关于自动关机
在Win9X 中直接使用ExitWindowsEx函数可以直接关机,
而在Win2K以上系统中就不是这样拉。
关键词:TOKEN_PRIVILEGES AdjustTokenPrivileges
void CAutoStopDlg::Shutdown()
{
if(IsNT())
{
HANDLE hToken; // handle to process token
TOKEN_PRIVILEGES tkp; // pointer to token structure
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
//TOKEN_ADJUST_PRIVILEGES 改变权限
//TOKEN_QUERY 允许这个进程访问所有进程
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0);
//改变特权为有效
}
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE|EWX_POWEROFF,0);
}