Home » Tipps & Tricks » Netzwerk/Internet » Netzwerk » Windows-PC über das Netzwerk herunterfahren
Windows-PC über das Netzwerk herunterfahren
{----------------------------------------------------------------------------- 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.