procedure AdjustToken; 
var
  hdlProcessHandle : Cardinal;
  hdlTokenHandle : Cardinal;
  tmpLuid : Int64;
  tkpPrivilegeCount : Int64;
  tkp : TOKEN_PRIVILEGES;
  tkpNewButIgnored : TOKEN_PRIVILEGES;
  lBufferNeeded : Cardinal;
  Privilege : array[0..0] of _LUID_AND_ATTRIBUTES; 
begin
        hdlProcessHandle := GetCurrentProcess;
        OpenProcessToken(hdlProcessHandle,
                        (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY),
                          hdlTokenHandle);
        // Get the LUID for shutdown privilege.
        LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);
        Privilege[0].Luid := tmpLuid;
        Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
        tkp.PrivilegeCount := 1; // One privilege to set
        tkp.Privileges[0] := Privilege[0];
        // Enable the shutdown privilege in the access token of this
        // process.
        AdjustTokenPrivileges(hdlTokenHandle,
                              False,
                              tkp,
                              Sizeof(tkpNewButIgnored),
                              tkpNewButIgnored,
                              lBufferNeeded); end; 
给分吧