Thema: Delphi ExitWindowsEx

Einzelnen Beitrag anzeigen

Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

ExitWindowsEx

  Alt 12. Mai 2003, 20:45
Hi Leute,

ich hab hier eine Procedure, die ich von einem Dienst aus aufrufe. Es soll mittels EWX_SHUTDOWN und EWX_FORCE der Rechner heruntergefahren werden.
Es wird aber nur ein Logoff durchgeführt.

Hat einer einen Tipp, woran das liegen kann?

Hier die Procedure
Delphi-Quellcode:
function TService1.ExitWindow(flag: Word): Boolean;
var
 vi: TOSVersionInfo;
 hToken: THandle;
 tp: TTokenPrivileges;
 h: dWord;
begin
    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);
     //if result then Writelog('True') else Writelog('False');
    end else begin
     result:=ExitWindowsEx(flag,0);
    end;
end;
Ich übergeben in <flag> EWX_SHUTDOWN and EWX_FORCE.

Die Procedure benutze ich, weil der Dienst später umgeschreiben wird, damit ohne große Änderungen ein Prog für W98 draus gemacht werden kann.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat