關于自動關機
在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);
}