我有一个冒充用户的服务。该服务作为本地系统运行。用户是本地管理员和域管理员。模仿后,我有必要调整进程的令牌权限。我希望在返回的令牌句柄上使用OpenProcessToken
然后AdjustTokenPrivileges
来执行此操作。
在致电LogonUser
和ImpersonateLoggedOnUser
后,以下呼叫失败且拒绝访问。
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
Log("Error=%d", GetLastError());
}
我正在使用LOGON32_LOGON_INTERACTIVE
和LOGON32_PROVIDER_DEFAULT
登录用户。
调整用户令牌的相同权限成功。
答案 0 :(得分:1)
这是一个由两部分组成的答案,具体取决于您要做的事情:
1)如果要调整模拟令牌的权限,则需要使用OpenThreadToken函数,而不是OpenProcessToken。模拟会影响线程,而不会影响整个流程。试试这个:
OpenThreadToken(GetCurrentThread(), TOKEN_READ | TOKEN_ADJUST_PRIVILEGES, TRUE, &hToken)
2)如果你真的想调整进程令牌的权限,你可能应该在你没有模仿客户端的时候这样做。您可以根据需要打开和关闭模拟。