關(guān)于自動關(guān)機
在Win9X 中直接使用ExitWindowsEx函數(shù)可以直接關(guān)機,
而在Win2K以上系統(tǒng)中就不是這樣拉。
關(guān)鍵詞: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 改變權(quán)限
//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);
//改變特權(quán)為有效
}
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE|EWX_POWEROFF,0);
}