BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- C Windows API Schrott? (http://www.black-board.net/thread.php?threadid=14302)


Geschrieben von scr!pTk!d am 23.10.2003 um 22:02:

  Windows API Schrott?

Ich wollte in ein C Programm eine Funktion zum Herunterfahren des PC einbauen und hierfür die API ExitWindowsEx(UINT uFlags, DWORD dwReason) verwenden. Allerdings zeigt diese überhaupt keine Wirkung. Hier ein Source-Ausschnitt:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
#define EWX_SHUTDOWN 0x08

...

ExitWindowsEx(EWX_SHUTDOWN,0);

...

return 0;


Weder 9x/ME noch 2000/XP zeigt sich beeindruckt. Bei 9x erscheint eine Warnung Windows würde heruntergefahren und alle Dokumente sollten gespeichert werden, allerdings geschieht nichts. Bei 2000/XP klappt nur Logoff (mit uFlags 0x00).
MfG



Geschrieben von CDW am 24.10.2003 um 14:48:

 

für NT/2k muss man noch dem progreamm die benötigten Rechte zuschieben... am besten www.cdw.de.vu unter tutorials => kommentierter sourcecode von shutdown(tut1) (mein erstes Programm in asm Augenzwinkern ) da sind praktisch die ganzen APIs aufgelistet...
außerdem:
; EWX_LOGOFF equ 0
; EWX_SHUTDOWN equ 1
; EWX_REBOOT equ 2
; EWX_FORCE equ 4
; EWX_POWEROFF equ 8
also bei meinem rechner geschit bei x8 auch nix (zu alt, noch keine Unterstützung für) und für den Rest unter 2k/xp/NT muss man wie gesagt sich die privilegien einheimsen.



Geschrieben von scr!pTk!d am 24.10.2003 um 18:56:

 

Habs geschafft. Falls jemand das gleiche Problem haben sollte:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
int EnableShutdownPrivileges( )
{
   HANDLE token;
   TOKEN_PRIVILEGES privileges;
   if( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
                         | TOKEN_QUERY, &token ))
return -1;   
LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &privileges.Privileges[ 0 ].Luid );
   privileges.PrivilegeCount = 1;
   privileges.Privileges[ 0 ].Attributes = SE_PRIVILEGE_ENABLED;
   AdjustTokenPrivileges( token, FALSE, &privileges, 0, (PTOKEN_PRIVILEGES)NULL, 0 );
   if( GetLastError() != ERROR_SUCCESS )
      return -2;
}


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH