Hallo,
ich habe mir neulich Win2k neu zugelegt.
In einem Programm habe ich eine Routine, die den Computer herunterfährt, rebootet oder ausloggt. Diese habe ich jedoch nie unter NT getestet. Aber eigentlich müsste sie auch unter NT funktionieren. Stattdessen schließt sich das entsprechende Programm nur selbst anstadt den Copmuter herunter zu fahren.
<pre>
function ExitWindows(flag:word):Boolean;
var vi:TOSVersionInfo;
hToken:THandle;
tp:TTokenPrivileges;
hWord;
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,'SetShutDownPrivilege',
tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
h:=0;
AdjustTokenPrivileges(hToken,False,tp,0,PTokenPriv ileges(nil^,h);
CloseHandle(hToken);
result:= ExitWindowsEx(flag,0);
end else Result:=ExitWindowsEx(flag,0);
end;
Wenn ich den Copmuter herunter fahre Setze ich also
ExitWindows(ewx_shutdown + EXW_FORCE)
</pre>
Bei diesem Aufruf schließt sich das Progranm jedoch nur selbst. Ich hab die Routine nicht selbst entwickelt. Sie stammt aus irgendeinem Buch und dort stand, dass sie unter allen Windows-Versionen funktioniert. Also was ist falsch daran?
ich habe mir neulich Win2k neu zugelegt.
In einem Programm habe ich eine Routine, die den Computer herunterfährt, rebootet oder ausloggt. Diese habe ich jedoch nie unter NT getestet. Aber eigentlich müsste sie auch unter NT funktionieren. Stattdessen schließt sich das entsprechende Programm nur selbst anstadt den Copmuter herunter zu fahren.
<pre>
function ExitWindows(flag:word):Boolean;
var vi:TOSVersionInfo;
hToken:THandle;
tp:TTokenPrivileges;
hWord;
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,'SetShutDownPrivilege',
tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
h:=0;
AdjustTokenPrivileges(hToken,False,tp,0,PTokenPriv ileges(nil^,h);
CloseHandle(hToken);
result:= ExitWindowsEx(flag,0);
end else Result:=ExitWindowsEx(flag,0);
end;
Wenn ich den Copmuter herunter fahre Setze ich also
ExitWindows(ewx_shutdown + EXW_FORCE)
</pre>
Bei diesem Aufruf schließt sich das Progranm jedoch nur selbst. Ich hab die Routine nicht selbst entwickelt. Sie stammt aus irgendeinem Buch und dort stand, dass sie unter allen Windows-Versionen funktioniert. Also was ist falsch daran?
Comment