我还也。
InitiateSystemShutdown在条件许可的时候可以关闭指定的计算机。
要关闭本地机器,调用进程必须具有SE_SHUTDOWN_NAME特权;要关闭远程机器,调用进程必须具有SE_REMOTE_SHUTDOWN_NAME特权。
缺省的,用户可以使他登陆到的对本地机器的SE_SHUTDOWN_NAME特权有效,管理员可以使SE_REMOTE_SHUTDOWN_NAME特权有效。
所以在调用InitiateSystemShutdown之前必须先使对应的特权有效,见如下源代码:
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//得到进程权标
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES and TOKEN_QUERY,&hToken))
return;
//得到关机的特权的LUID
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;//设置一个特权
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//得到进程关机的特权
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
//不应该只是测试AdjustTokenPrivileges的返回值
if (GetLastError() != ERROR_SUCCESS)
return;
调用AbortSystemShutdown()也要做一样的准备工作`。
VC 关机
最新推荐文章于 2021-05-18 04:50:19 发布