之前添加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