【发布时间】:2018-04-23 01:00:51
【问题描述】:
我的代码有一个循环,它使用 AdjustTokenPrivileges 来启用 SE_DEBUG_NAME 权限并将其删除。 每次我运行它时,第一组启用/禁用是成功的,但是在第一个循环之后,其余的启用/删除组为 AdjustTokenPrivileges 提供 ERROR_NOT_ALL_ASSIGNED。 机器是 Windows 10 专业版 64 位。编译后的 exe 以“以管理员身份运行”模式运行。 请帮忙。
以下代码在循环中。
TOKEN_PRIVILEGES priv = { 0,0,0,0 };
HANDLE hToken = NULL;
LUID luid = { 0,0 };
BOOL Status = true;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) {
Status = false;
goto EXIT;
}
if (!LookupPrivilegeValueW(0, lpszPrivilege, &luid)) {
Status = false;
goto EXIT;
}
priv.PrivilegeCount = 1;
priv.Privileges[0].Luid = luid;
priv.Privileges[0].Attributes = bEnablePrivilege ? SE_PRIVILEGE_ENABLED : SE_PRIVILEGE_REMOVED;
if (!AdjustTokenPrivileges(hToken, false, &priv, 0, 0, 0)) {
Status = false;
goto EXIT;
}
std::cout << "priv:" << GetLastError() << std::endl; //gives 0(no error) on first pair of enable/disable, then 0x514, which is ERROR_NOT_ALL_ASSIGNED, on the following loops.
EXIT:
if (hToken)
CloseHandle(hToken);
return Status;
【问题讨论】:
标签: c++ windows winapi visual-c++ privileges