调整令牌权限:成功后ERROR_NOT_ALL_ASSIGNED
AdjustTokenPrivileges: ERROR_NOT_ALL_ASSIGNED after success
我的代码有一个循环,它使用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;
MSDN 会告诉您原因:
SE_PRIVILEGE_REMOVED:
由于该特权已从令牌中删除,因此尝试重新启用该特权会导致警告ERROR_NOT_ALL_ASSIGNED就好像该特权从未存在过一样。
将属性设置为 0 以禁用。MSDN 这里有一个例子...
感谢安德斯,
更改行
priv.Privileges[0].Attributes = bEnablePrivilege ? SE_PRIVILEGE_ENABLED : SE_PRIVILEGE_REMOVED;
自
priv.Privileges[0].Attributes = bEnablePrivilege ? SE_PRIVILEGE_ENABLED : NULL;
修复了代码。但是代码现在只启用/禁用权限。正如MSDN所说
取消特权是不可逆
的
所以我无法删除它并重新添加它。
相关文章:
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- Is !NaN not a NaN?
- 为什么我会" void value not ignored as it ought to be"?
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- Directx 11 - CompileFromFile() is not compiling
- 方法错误"not all control paths return a value"和方法不返回值
- Centos7 g++ "to_string is not in a member of std"
- 将系数存储在头文件的数组中("does not name a type"错误)
- 警告:"Not all control paths return a value" c++
- SFML 2.1 和 Xcode 4.6.3 - "The specified SDK " 当前的 OS X " does not appear to have all of the necessar
- C++错误"not all control paths return a value"
- 如果。。否则警告" not all control paths return a value"