{-----------------------------------------------------------------------------
Unit Name: Shutdown
Author: Manfred Ruzicka
History: Mit dieser Unit ist es möglich einen Windows NT /2000 Computer
über das Netzwerk herunterzufahren, und diesen Vorgang wieder abzubrechen.
Erklärung der Variablen:
System: string - Computername oder IP-Adresse
Nachricht: string - Die Nachricht die als Warnung erscheinen soll
(nur wenn countdoen <> 0)
force: boolean - Ob der Computer bei nicht gespeicherten Dokumenten
nachfragt (true = keine nachfrage)
reboot: boolean - true = startet den Computer neu
countdown: integer - gibt die Zeit in Sekunden an, die vor dem
Shutdown vergehen soll (0 = keine Warnung)
-----------------------------------------------------------------------------}
unit shutdown;
interface
uses
Windows,
StdCtrls;
procedure shut(system, nachricht:
string; force, reboot: boolean; countdown: integer);
procedure abortshut(system:
string);
implementation
const
SE_SHUTDOWN_NAME = '
SeShutdownPrivilege';
var
hdlg: DWORD = 0;
procedure shut(system, nachricht:
string; force, reboot: boolean; countdown: integer);
var
otoken, hToken: THandle;
tp: TTokenPrivileges;
h: Dword;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
otoken := htoken;
LookupPrivilegeValue(
nil, SE_SHUTDOWN_NAME,
tp.Privileges[0].luid);
tp.privilegecount := 1;
tp.privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
h := 0;
AdjustTokenPrivileges(hToken, False,
tp, 0, PTokenPrivileges(
nil)^, h);
InitiateSystemShutdown(PChar(system), pchar(nachricht), countdown, force, reboot);
tp.privilegecount := 1;
tp.privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
h := 0;
AdjustTokenPrivileges(oToken, False,
tp, 0, PTokenPrivileges(
nil)^, h);
CloseHandle(hToken);
end;
procedure abortshut(system:
string);
var
hToken: THandle;
tp: TTokenPrivileges;
h: Dword;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
LookupPrivilegeValue(pchar(system), SE_SHUTDOWN_NAME,
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);
abortSystemShutdown(pchar(system));
end;
end.