【问题标题】:OpenProcessToken fails after ImpersonateLoggedOnUser在 ImpersonateLoggedOnUser 之后 OpenProcessToken 失败
【发布时间】:2011-08-15 17:13:33
【问题描述】:

我有一个冒充用户的服务。该服务作为本地系统运行。用户是本地管理员和域管理员。冒充后,我需要调整进程的令牌权限。我希望在返回的令牌句柄上使用OpenProcessTokenAdjustTokenPrivileges 来实现。

在调用 LogonUserImpersonateLoggedOnUser 后,以下调用失败,访问被拒绝。

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

我正在使用LOGON32_LOGON_INTERACTIVELOGON32_PROVIDER_DEFAULT 登录用户。

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

【问题讨论】:

    标签: c++ windows privileges


    【解决方案1】:

    这是一个由两部分组成的答案,具体取决于您要执行的操作:

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

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

    2) 如果您确实想要调整进程令牌的权限,您可能应该在不模拟客户端时执行此操作。您可以根据需要打开和关闭模拟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2018-10-08
      • 2015-11-13
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多