之前添加SE_SHUTDOWN_NAME特权之前,我们可以使用关闭计算机的ExitWindowsEx
功能,我们必须SE_SHUTDOWN_NAME
特权添加到过程是这样的:为什么我们需要使用ExitWindowsEx
HANDLE hToken = NULL;
LUID luid;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue(L"", SE_SHUTDOWN_NAME, &luid);
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
bRet = AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, 0);
ExitWindowsEx(EWX_REBOOT, 0);
这工作完全正常。
我知道这是通过设计,但我不明白微软决定在使用ExitWindowsEx
函数之前必须启用特权的动机是什么。这显然不是为了防止进程重新启动计算机,因为它需要重新启动的所有操作都是将SE_SHUTDOWN_NAME添加到进程并调用ExitWindowsEx
。
Windows开发术语可以将上面的代码直接放到ExitWindowsEx
函数中。
-1。你误解了整个观点。你必须启用权限,所以如果你没有这个权限,你不会关闭系统。 – user2120666
@ user2120666:不,我完全理解了整点,我知道必须启用该特权,这是在微软文档中写的BTW,并且我的代码如上所述**会启用所需的特权。再次阅读我的问题。问题在于,为什么微软决定在使用ExitWindowsEx之前必须启用soome特权。 –
因为这是完整的特权。 – user2120666