VC 重启与关机操作

BOOL ExitWindowsEx(
  UINT uFlags,              // 关机的操作
  DWORD dwReason   // 操作的原因
);
uFlags :[in] 以下参数选择其中一种
含义
EWX_LOGOFF 关闭所有运行的程序,注销系统
EWX_POWEROFF

关闭系统,并关闭电源。对于Windows NT/2000/X,调用的进程必须有 SE_SHUTDOWN_NAME 权限.

EWX_REBOOT 重启系统.

Windows NT/2000/XP: 对于Windows NT/2000/X,调用的进程必须有 SE_SHUTDOWN_NAME 权限.

EWX_SHUTDOWN 关闭系统,并关闭电源,并保证所有的进程及文件缓冲都安全写回硬盘。

Windows NT/2000/XP: 对于Windows NT/2000/X,调用的进程必须有 SE_SHUTDOWN_NAME 权限.


以下参数作为可选择参数:

含义
EWX_FORCE 强行关闭所有进程.当这个标志设置后,系统不再发送 WM_QUERYENDSESSION 及 WM_ENDSESSION消息.会导致数据的丢失,因此可以用于紧急情况.
EWX_FORCEIFHUNG 对于Windows 2000/XP,强制关闭所有进程,如果进程未对 WM_QUERYENDSESSION 或 WM_ENDSESSION 消息作应答.与 EWX_FORCE同用时被忽略。

 

你可以用ExitWindowsEx 函数关闭系统. 关闭所有文件的缓存及把系统安全的关闭. Windows NT/2000/XP: 下面的例子是获取SE_SHUTDOWN_NAME的权限后关闭系统. 代码示例: HANDLE hToken; TOKEN_PRIVILEGES tkp; // Get a token for this process. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) error("OpenProcessToken"); // 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); // Cannot test the return value of AdjustTokenPrivileges. if (GetLastError() != ERROR_SUCCESS) error("AdjustTokenPrivileges"); // Shut down the system and force all applications to close. if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)) error("ExitWindowsEx");

你可能感兴趣的:(windows,null,System,query,token)