function SetPrivilege(PrivilegeName: String; Enable:Boolean): Boolean;
//PrivilegeName指想要获得权限的常量,
// 如果想要取得其它相应的权限只需要输入相应的常量。
//关闭系统的常量是SeShutdownPrivilege,
//该常量在Delphi中没有声明。
var
NewState,
PreviousState : TTokenPrivileges;
token : THandle;
dwRetLen : DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess,
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
NewState.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, PChar(PrivilegeName),
NewState.Privileges[0].LUID) then
begin
if Enable then
NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
NewState.Privileges[0].Attributes := 0;
dwRetLen := 0;
Result := AdjustTokenPrivileges(token,
False, NewState, SizeOf(PreviousState),
PreviousState, dwRetLen);
end;
CloseHandle(token);
end;
function GetWinVer:Byte;
var OS:TOSVersionInfo;
begin
OS.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(OS);
case OS.dwPlatformId of
VER_PLATFORM_WIN32s : Result:=0; //Windows 3.1x/32s
VER_PLATFORM_WIN32_WINDOWS : Result:=1; //Windows 95
VER_PLATFORM_WIN32_NT : Result:=2; //Windows NT
end;
end;
function ShutDownComputer:Boolean;
begin
if GetWinVer=2 then
begin //如果当前系统是Windows NT
SetPrivilege('SeShutdownPrivilege', True);
if not ExitWindowsEx(8, 0) then
SetPrivilege('SeShutdownPrivilege', False);
end
else
ExitWindowsEx(8,0);
end;