Delphi shutdown program NT version

xiaoxiao2021-03-06  58

The following is a block of NT (copy)

procedure ExitWindowsNT (uFlags: integer); var hToken: THANDLE; tkp, tkDumb: TTokenPrivileges; DumbInt: DWORD; begin FillChar (tkp, sizeof (tkp), 0); // Get a token for this process if not (OpenProcessToken (GetCurrentProcess , TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)) then raise Exception.create ( 'OpenProcessToken failed with code' inttostr (GetLastError)); // Get the LUID for the Shutdown privilege LookupPrivilegeValue (nil, pchar ( 'SeShutdownPrivilege'), tkp.Privileges [0] .Luid); tkp.PrivilegeCount: = 1; // one privilege to set tkp.Privileges [0] .Attributes: = SE_PRIVILEGE_ENABLED; // Get the shutdown provolege for this process AdjustTokenPrivileges (hToken, false, tkp, sizeof (tkDumb), tkDumb, DumbInt); // Can not test the return value of AdjustTokenPrivileges if GetLastError <> ERROR_SUCCESS then Raise Exception.create ( 'AdjustTokenPrivileges failed with code' inttostr (GetLastError)); // shut down th e system and for all applications to close if not ExitWindowsEx (uFlags, 0) then Raise Exception.create ( 'ExitWindowsEx failed with code' inttostr (GetLastError)); end; procedure TForm1.Button1Click (Sender: TObject); begin ExitWindowsNT ( EWX_PowerOff); end; procedure tform1.button2click (sender: TOBJECT); begin exitwindowsnt (ewx_reboot);

转载请注明原文地址:https://www.9cbs.com/read-117009.html

New Post(0)