procedure offcomputer; var hToken : THandle; tkp : TOKEN_PRIVILEGES; ReturnLength : DWord; begin if not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_ALL_ACCESS or TOKEN_QUERY,hToken) then begin exit; end; LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid); tkp.PrivilegeCount := 1; tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; ReturnLength := 0; AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil,ReturnLength); if GetLastError() <> ERROR_SUCCESS then begin exit; end; if not ExitWindowsEx(EWX_POWEROFF, 0) then begin exit; end; end; |