我想要实现的是当进程在非管理员用户(Windows 登录用户)下以管理员身份运行时来自会话 ID 的实际令牌句柄。
DWORD dwSessionId = 0;
if (false == ProcessIdToSessionId(dwProcessId, &dwSessionId))
{
LOG_ERROR(L"Failed obtaining session id");
return false;
}
HANDLE hToken
if (false == WTSQueryUserToken(dwSessionId, &hToken))
{
LOG_ERROR(L"Failed to obtain session's handle");
return false;
}
当我调用 WTSQueryUserToken 时出现我的问题,它失败并出现错误 1314,这意味着我需要授予具有 SE_TCB_NAME 权限的调用令牌。
所以我尝试使用以下代码这样做:
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
bool bSuccess = DynamicAPI::AdjustTokenPrivileges(
%%WHICH_TOKEN_EXACTLLY%%,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES)nullptr,
(DWORD)nullptr);
但我不完全确定应该准确提供哪个令牌。我已经用%%WHICH_TOKEN_EXACTLLY%%占位符标记了它。对于我的测试,我尝试 AdjustTokenPriviliges 我的进程的令牌(管理员权限),但它也没有帮助。