Q
qiuxueting
Unregistered / Unconfirmed
GUEST, unregistred user!
2000/NT系统程序关机问题:
我有一段关闭2000/NT的代码,可以正确运行,但不能象手动关机时那样完全关机,
而是到“您可以安全关机了”的屏幕提示。
是不是获取权限的那段代码不对?请高手给看一下。
我是在2000 pro下试的。
procedure TForm1.Button1Click(Sender: TObject);
begin
; AdjustToken;
; ExitWindowsEx(EWX_SHUTDOWN, 0);
end;
//获取NT系统的操作权限
procedure AdjustToken();
var
; hdlProcessHandle : Cardinal;
; hdlTokenHandle ; : Cardinal;
; tmpLuid ; ; ; ; ;: 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;
我有一段关闭2000/NT的代码,可以正确运行,但不能象手动关机时那样完全关机,
而是到“您可以安全关机了”的屏幕提示。
是不是获取权限的那段代码不对?请高手给看一下。
我是在2000 pro下试的。
procedure TForm1.Button1Click(Sender: TObject);
begin
; AdjustToken;
; ExitWindowsEx(EWX_SHUTDOWN, 0);
end;
//获取NT系统的操作权限
procedure AdjustToken();
var
; hdlProcessHandle : Cardinal;
; hdlTokenHandle ; : Cardinal;
; tmpLuid ; ; ; ; ;: 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;