{ 注销:MyExitWindows(EWX_LogOff); 重启:MyExitWindows(EWX_REBOOT); 关机:MyExitWindows(EWX_SHUTDOWN); } function SetShutdownPrivilege(Enable: Boolean): Boolean; var PrevPrivileges: TTokenPrivileges; Privileges: TTokenPrivileges; Token: THandle; dwRetLen: DWord; begin Result := False; OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token); Privileges.PrivilegeCount := 1; if LookupPrivilegeValue(nil,'SeShutdownPrivilege', Privileges.Privileges[0].LUID) then begin if Enable then Privileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else Privileges.Privileges[0].Attributes := 0; dwRetLen := 0; Result := AdjustTokenPrivileges(Token, False, Privileges, SizeOf(PrevPrivileges), PrevPrivileges, dwRetLen); end; CloseHandle(Token); end;procedure MyExitWindows(const P:Word); begin Application.Terminate; if IsWin9x then ExitWindowsEx(EWX_FORCE or P, 0) else begin SetShutdownPrivilege(True); ExitWindowsEx(EWX_FORCE or P, 0); SetShutdownPrivilege(False); end; end;
客户端程序用此udpserver发一个特点的字符到服务端
服务端收到此字符,即重启计算机(重启计算机的代码很容易获得)
注销:MyExitWindows(EWX_LogOff);
重启:MyExitWindows(EWX_REBOOT);
关机:MyExitWindows(EWX_SHUTDOWN);
}
function SetShutdownPrivilege(Enable: Boolean): Boolean;
var
PrevPrivileges: TTokenPrivileges;
Privileges: TTokenPrivileges;
Token: THandle;
dwRetLen: DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);
Privileges.PrivilegeCount := 1;
if LookupPrivilegeValue(nil,'SeShutdownPrivilege', Privileges.Privileges[0].LUID) then
begin
if Enable then
Privileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
Privileges.Privileges[0].Attributes := 0;
dwRetLen := 0;
Result := AdjustTokenPrivileges(Token, False, Privileges, SizeOf(PrevPrivileges), PrevPrivileges, dwRetLen);
end;
CloseHandle(Token);
end;procedure MyExitWindows(const P:Word);
begin
Application.Terminate;
if IsWin9x then
ExitWindowsEx(EWX_FORCE or P, 0)
else
begin
SetShutdownPrivilege(True);
ExitWindowsEx(EWX_FORCE or P, 0);
SetShutdownPrivilege(False);
end;
end;