在ImpersonateLoggedOnUser之后OpenProcessToken失败

OpenProcessToken fails after ImpersonateLoggedOnUser

本文关键字:失败 OpenProcessToken 之后 ImpersonateLoggedOnUser      更新时间:2023-10-16

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

呼叫LogonUserImpersonateLoggedOnUser后,呼叫失败,拒绝访问。

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

我正在使用LOGON32_LOGON_INTERACTIVELOGON32_PROVIDER_DEFAULT登录用户。

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

这是一个由两部分组成的答案,取决于你想做什么:

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

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

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