Hauptmenü
Home
Delphi
C# / .NET
Freepascal
Firebird
OPF
Tutorials
Tipps und Tricks
Links
Suche
Impressum
Neustart / Beenden von NT-System PDF E-Mail
Geschrieben von Lemmy   
Sonntag, 19. Februar 2006
Quelle: Spotlight-Forum

Bei Windows NT, 2000 und XP müssen zuvor noch die entsprechenden Sicherheitsattribute gesetzt werden. Dafür folgende Funktion (sie ist allerdings nicht getestet):

function ExitWindows(flag:Word):Boolean;
var
  vi : TOSVersionInfo;
  hToken : THandle;
  tp : TTokenPrivileges;
  h  : dWord;
begin
  result := false;
  vi.dwOsVersionInfoSize := SizeOf(vi);
  getVersionEx(vi);
  if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then begin
    OpenProcessToken(GetCurrentProcess(),Token_Adjust_Privileges,hToken);
    LookUpPrivilegeValue(nil,'SeShutDownPrivilege',tp.Privileges[0].Luid);
    tp.PrivilegeCount := 1;
    tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    h := 0;
    AdjustTokenPrivileges(hToken,False,tp,0,pTokenPrivileges(nil)^,h);
    CloseHandle(hToken);
    result := exitWindowsEx(flag,0);
  end else
    result := ExitWindowsEx(flag,0);
end;


Aufruf der Funktion - für iFlags wieder die Werte aus obiger Tabelle verwenden:

if (NOT ExitWindows(iFlags)) Then begin
//Fehler ausgeben, falls es nicht geklappt hat
End;
 
< Zurück   Weiter >