Windows NT 4.0 Shutdown
-
Der Shutdown bei Win95/98/ME ist kein Problem : ExitWindowsEx(EWX_SHUTDOWN, NULL);
Aber wie funzt das bloß bei NT 4.0 ??
Vielleicht kann jemand helfen ?
-
Unter NT muss der Prozess, der den Shutdown durchführen will, das Privileg SE_SHUTDOWN_NAME haben, welches man mit AdjustTokenPrivileges setzen kann.
------------------
Gruß PeterWenn Dein Programm auf Anhieb läuft, hast Du irgendwas falsch gemacht
Ausserdem, ein Blick in die Online-Doku und ein wenig Kreativität wirken manchmal Wunder.
-
Das habe ich auch aus der Online Hilfe, aber ich habe keine Ahnung, wie das laufen soll, weil es sehr spärlich beschrieben ist. Hat jemand einen Beispielcode für mich, der einfach den NT Rechner runterfährt, und ausschaltet ? Es ist ein Server, wo ich im Bios eingestellt habe, er soll morgens um 7 hochfahren. Jetzt soll er Abends um 8 von alleine runterfahren. Vorher war es ein 98 Server, und mein Programm lief wunderbar. Jetzt nach der Umstellung auf NT klappt das leider nicht mehr.
-
Shutdown mit Ausschalten des Rechner geht für NT so:
void __fastcall TForm1::BShutdownNTClick(TObject *Sender) { HANDLE token; TOKEN_PRIVILEGES tokenpriv; // Token für diesen Prozess holen if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token)==0) { ShowMessage("Fehler beim OpenProcessToken"); return; } // LUID für die Shutdown Privilege holen LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tokenpriv.Privileges[0].Luid); tokenpriv.PrivilegeCount=1; tokenpriv.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; // Shutdown privilege für diesen Prozess setzen if(AdjustTokenPrivileges(token, false, &tokenpriv, 0, (PTOKEN_PRIVILEGES)NULL, 0)==NULL) { ShowMessage("Fehler bei AdjustTokenPrivileges"); return; } // Windows beenden und Rechner ausschalten if(ExitWindowsEx(EWX_LOGOFF | EWX_POWEROFF, NULL)==NULL) { ShowMessage("Fehler beim ExitWindowsEx"); return; } }
Der Beispielcode war für den C++-Builder - ShowMessage unter WinApi oder MFC entsprechend ersetzen!
[ 09.07.2001: Beitrag editiert von: Marc++us ]