unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 =
class
(TForm)
Button1: TButton;
procedure
Button1Click(Sender: TObject);
private
public
end
;
var
Form1: TForm1;
implementation
procedure
TForm1.Button1Click(Sender: TObject);
const
SE_SHUTDOWN_NAME =
'SeShutDownPrivilege'
;
var
hToken : THandle;
tkp : TTokenPrivileges;
tkpo : TTokenPrivileges;
zero : DWord;
begin
zero :=
0
;
if
not
OpenProcessToken(GetCurrentProcess(), Token_Adjust_privileges
or
Token_Query, hToken)
then
begin
MessageBox(
0
,
'Exit Error'
,
'OpenProcessToken() Failed'
, MB_OK);
Exit;
end
;
if
not
LookupPrivilegeValue(
nil
,SE_SHUTDOWN_NAME, tkp.Privileges[
0
].Luid)
then
begin
MessageBox(
0
,
'Exit Error'
,
'LookupPrivilegeValue() Failed'
, MB_OK);
Exit;
end
;
tkp.PrivilegeCount :=
1
;
tkp.Privileges[
0
].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTokenPrivileges), tkpo, zero);
if
Boolean(GetLastError())
then
begin
MessageBox(
0
,
'Exit Error'
,
'AdjustTokenPrivileges() Failed'
, MB_OK);
Exit;
end
else
ExitWindowsEx(EWX_FORCE
or
EWX_REBOOT,
0
);
Halt(
0
);
end
;
end
.
Syntax higlighted by Syntax highlighter, available at www.4ITDevelopers.net and www.JakNaWin.com