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.