W2000以上的系统,要操作机器的操作系统,应该先获取令牌环并调整它:L<br><br>先声明一个过程;<br>procedure AdjustToken();<br>再定义此过程:<br>procedure Tmainf.AdjustToken();<br>var<br> hdlProcessHandle: Cardinal;<br> hdlTokenHandle: Cardinal;<br> tmpLuid: Int64;<br> //tkpPrivilegeCount: Int64;<br> tkp: TOKEN_PRIVILEGES;<br> tkpNewButIgnored: TOKEN_PRIVILEGES;<br> lBufferNeeded: Cardinal;<br> Privilege: array[0..0] of _LUID_AND_ATTRIBUTES;<br>begin<br> hdlProcessHandle := GetCurrentProcess;<br> OpenProcessToken(hdlProcessHandle,<br> (TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY),<br> hdlTokenHandle);<br><br> // Get the LUID for shutdown privilege.<br> LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);<br> Privilege[0].Luid := tmpLuid;<br> Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;<br> tkp.PrivilegeCount := 1; // One privilege to set<br> tkp.Privileges[0] := Privilege[0];<br> // Enable the shutdown privilege in the access token of this<br> // process.<br> AdjustTokenPrivileges(hdlTokenHandle,<br> False,<br> tkp,<br> Sizeof(tkpNewButIgnored),<br> tkpNewButIgnored,<br> lBufferNeeded);<br><br>end;<br><br>重启时如下调用:<br> AdjustToken;<br> ExitWindowsEx((EWX_FORCE or EWX_REBOOT), 0);<br>