您的位置:首页 > 其它

ExitWindowsEx 实现关机、重启

2008-03-04 17:42 651 查看

ExitWindowsEx

The ExitWindowsEx function either logs off the current user, shuts down the system, or shuts down and restarts the system. It sends the WM_QUERYENDSESSION message to all applications to determine if they can be terminated.


BOOL ExitWindowsEx(


UINT uFlags,


DWORD dwReason


);



uFlags [in] Shutdown type. This parameter must include one of the following values. 关机类型EWX_LOGOFFEWX_POWEROFFEWX_REBOOTEWX_SHUTDOWN可选的参数EWX_FORCE 强制进程终止 不发送WM_QUERYENDSESSION and WM_ENDSESSION消息EWX_FORCEIFHUNG 发送WM_QUERYENDSESSION and WM_ENDSESSION消息,如果没有响应强制终止进程。dwReason [in] Reason for initiating the shutdown. If this parameter is zero, the SHTDN_REASON_FLAG_PLANNED reason code will not be set, and therefore the default action is an undefined shutdown that is logged as "No title for this reason could be found". By default, it is also an unplanned shutdown. Depending on how the system is configured, an unplanned shutdown triggers the creation of a file that contains the system state information, which can delay shutdown. Therefore, do not use zero for this parameter.
示例:


The following example enables the SE_SHUTDOWN_NAME privilege and then shuts down the system.




BOOL MySystemShutdown()




...{


HANDLE hToken;


TOKEN_PRIVILEGES tkp;




// Get a token for this process.




if (!OpenProcessToken(GetCurrentProcess(),


TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))


return( FALSE );




// Get the LUID for the shutdown privilege.




LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,


&tkp.Privileges[0].Luid);




tkp.PrivilegeCount = 1; // one privilege to set


tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;




// Get the shutdown privilege for this process.




AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,


(PTOKEN_PRIVILEGES)NULL, 0);




if (GetLastError() != ERROR_SUCCESS)


return FALSE;




// Shut down the system and force all applications to close.




if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))


return FALSE;




return TRUE;


}



注意,如果不实现设置权限 会导致调用失败。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: