Kann man mit der WINAPI system-shutdown abbrechen?
-
Kann man mit der WINAPI system-shutdown abbrechen?
Ich meine wenn z.b. das Fenster mit dem Countdown erscheint.Unter XP kann man einfach "shutdown -a" im cmd eingeben aber shutdown scheint es unter Win2k leider nciht zu geben ..
Wie kann man das unter Win2K?
-
Du könntest die Shutdown-Nachricht (so in der Art WM_SHUTDOWN oder so - such einfach mal) mit -1 beantworten ... (ungetestet)
Aber ich denke mal bei dem 60sek. Fenster wird der Shutdown schlauer gelöst sein (dunkle Vermutung
)
M.T.
-
AbortSystemShutdown ?!
-
Und wie hole ich mir den SE_SHUTDOWN_NAME-Privileg??
Ich kann leider den erscheinenden Dialog des Systems cniht abbrechen lassen.
Laut SDK müsste es klappen.-Danke für deine ANtwort.- zumindest habe ich nun den Funktionsnamen..
-
Habe das ganze hiermit realisiert aber es klappt nicht!
//Programmcode int WINAPI WinMain(HINSTANCE hxInstance, HINSTANCE previnstance, PSTR myCommands, int ShowState) { HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process. if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) MessageBox( NULL,TEXT("Fehler beim holen des eigenen Privileg-Tokens"), TEXT("KeepOn © by KDSbest - Kann Passieren..."), MB_ICONWARNING); // Get the LUID for the shutdown privilege. if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid)) MessageBox( NULL,TEXT("Fehler beim holen des Privileg-LUID"), TEXT("KeepOn © by KDSbest - Kann Passieren..."), MB_ICONWARNING); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process. if(!AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0)!=ERROR_SUCCESS) MessageBox( NULL,TEXT("Fehler beim holen des Privilegs."), TEXT("KeepOn © by KDSbest - Kann Passieren..."), MB_ICONWARNING); if(AbortSystemShutdown(NULL)) MessageBox( NULL,TEXT("System-Shutdown-Prozess wurde erfolgreich verhindert.\n\rSie haben gesiegt."), TEXT("KeepOn © by KDSbest - Überflüssige Meldung"), MB_ICONWARNING); else MessageBox( NULL,TEXT("Das System war zu blöd, den Shutdown-Prozess abzubrechen.\n\rDer Computer wird herunter gefahren."), TEXT("KeepOn © by KDSbest - Kann Passieren..."), MB_ICONWARNING); return 1; }
Das lässt sich kompilieren und Ausführen und AbortSystemShutdown(NULL); returned IMMER nen Fehler. Auch wenn der shutdown-dialog aktiv ist.
Wer kann helfen? Evtl. Vorschläge??
Mfg.
-
bitte beleidigt mich. Ihr durft es!
Ich Idiot habe immer die alte Version getestet und nciht die neukompilierte. Es klappt. Vielen dank @ all. Vor allem flenders und Tolga.
Mfg.
-
du könntest auch psshutdown nehmen damit gehts auch unter windows2000, einfach bei google psshutdown eigenben und es is da
lg papanoah
-
Ich_bins_wieder schrieb:
Habe das ganze hiermit realisiert aber es klappt nicht!
//Programmcode int WINAPI WinMain(HINSTANCE hxInstance, HINSTANCE previnstance, PSTR myCommands, int ShowState) { HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process. if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) MessageBox( NULL,TEXT("Fehler beim holen des eigenen Privileg-Tokens"), TEXT("KeepOn © by KDSbest - Kann Passieren..."), MB_ICONWARNING); // Get the LUID for the shutdown privilege. if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid)) MessageBox( NULL,TEXT("Fehler beim holen des Privileg-LUID"), TEXT("KeepOn © by KDSbest - Kann Passieren..."), MB_ICONWARNING); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process. if(!AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0)!=ERROR_SUCCESS) MessageBox( NULL,TEXT("Fehler beim holen des Privilegs."), TEXT("KeepOn © by KDSbest - Kann Passieren..."), MB_ICONWARNING); if(AbortSystemShutdown(NULL)) MessageBox( NULL,TEXT("System-Shutdown-Prozess wurde erfolgreich verhindert.\n\rSie haben gesiegt."), TEXT("KeepOn © by KDSbest - Überflüssige Meldung"), MB_ICONWARNING); else MessageBox( NULL,TEXT("Das System war zu blöd, den Shutdown-Prozess abzubrechen.\n\rDer Computer wird herunter gefahren."), TEXT("KeepOn © by KDSbest - Kann Passieren..."), MB_ICONWARNING); return 1; }
Ich hoffe die Messageboxen waren nur zum Debuggen im Code. das ist absolut fürchterlicher Stil.
Besser wäre:
int tuwas() { if (!foo) return GetLastError(); if (!bar) return GetLastError() return 0; }
dannliefert deine Funktion als Rückgabewert GetLastError zurück den du nit FormatMessage schön leserlich ausgeben kannst.
-
Manuel schrieb:
Du könntest die Shutdown-Nachricht (so in der Art WM_SHUTDOWN oder so - such einfach mal) mit -1 beantworten ...
Nur zur Ergänzung zu dem schon gesagten:
Es gibt prinzipiell zwei Arten den Shutdown abzubrechen:
1. Bei einem "normalen" Shutdown (also via ExitWindows oder das ("Start|Herunterfahren") kann man dies indem man auf die Nachricht "WM_QUERYENDSESSION" mit 0 antwortet. Diese Nachricht wird aber nur an Top-Level-Windows gesendet.2. Ein Shutdown, welcher mit "InitiateSystemShutdown(Ex)" eingeleitet wurde, kann man mit "AbortSystemShutdown" abbrechen.
Nicht abbrechen kann man einen Shutdown mit "ExitWindowsEx" welcher mit dem Parameter EWX_FORCE aufgerufen wurde...
-
Hätte ich nicht die erste Anwort selbst geschrieben und jetzt nicht zufällig den Nick gelesen wäre s mir gar nicht aufgefallen ... aber ... welcher Freak gräbt nen 2 Jahre alten Beitrag aus?
Greetz