ImpersonateLoggedOnUser后,OpenProcessToken失败

时间:2011-08-15 17:13:33

标签: c++ windows privileges

我有一个冒充用户的服务。该服务作为本地系统运行。用户是本地管理员和域管理员。模仿后,我有必要调整进程的令牌权限。我希望在返回的令牌句柄上使用OpenProcessToken然后AdjustTokenPrivileges来执行此操作。

在致电LogonUserImpersonateLoggedOnUser后,以下呼叫失败且拒绝访问。

HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
      Log("Error=%d", GetLastError());
}

我正在使用LOGON32_LOGON_INTERACTIVELOGON32_PROVIDER_DEFAULT登录用户。

调整用户令牌的相同权限成功。

1 个答案:

答案 0 :(得分:1)

这是一个由两部分组成的答案,具体取决于您要做的事情:

1)如果要调整模拟令牌的权限,则需要使用OpenThreadToken函数,而不是OpenProcessToken。模拟会影响线程,而不会影响整个流程。试试这个:

OpenThreadToken(GetCurrentThread(), TOKEN_READ | TOKEN_ADJUST_PRIVILEGES, TRUE, &hToken)

2)如果你真的想调整进程令牌的权限,你可能应该在你没有模仿客户端的时候这样做。您可以根据需要打开和关闭模拟。