windows nt 怎样用程序实现关机?(50分)

  • 主题发起人 主题发起人 kaiyangit
  • 开始时间 开始时间
K

kaiyangit

Unregistered / Unconfirmed
GUEST, unregistred user!
windows nt 怎样用程序实现关机.
nt下不是win98
 
用ExitWindowEx(EWX_POWEROFF, 0)不可以吗?^-^
 
看看ExitWindowEx帮助,OK?
 
关键是还要用AdjustTokenPrivileges给自己的进程添加SE_SHUTDOWN_NAME特权
 
怎样用AdjustTokenPrivileges给自己的进程添加SE_SHUTDOWN_NAME特权
请告之详细情况。
 
ExitWindowEx(EWX_POWEROFF+EWX_FORCE, 0);

权限是默认有的
 
对此问题关注。
 
就在这里,自己去看吧!
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=268694
 
温柔一刀 时间:00-6-20 18:41:11 ID:268738
procedure ExitWindowsNT(uFlags : integer);
var
hToken : THANDLE;
tkp, tkDumb : TTokenPrivileges;
DumbInt : integer;
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);

// Cannot test the return value of AdjustTokenPrivileges
if GetLastError <> ERROR_SUCCESS then
Raise Exception.create('AdjustTokenPrivileges failed with code '
+ inttostr(GetLastError));

// shut down the system and for all applications to close
if not ExitWindowsEx(uFlags, 0) then
Raise Exception.create('ExitWindowsEx failed with code '
+ inttostr(GetLastError));
end;

调用方法:
ExitWindowsNT(EWX_SHUTDOWN or EWX_FORCE)
ExitWindowsNT(EWX_REBOOT)等等


请予近期结束!
 
多人接受答案了。
 
Wo Kao!有没有搞错!
:-(((((((((((((((
 
后退
顶部