OpenProcessToken завершается ошибкой после ImpersonateLoggedOnUser - PullRequest
0 голосов
/ 15 августа 2011

У меня есть служба, которая выдает себя за пользователя. Служба работает как локальная система. Пользователь является локальным администратором и администратором домена. После олицетворения мне необходимо настроить права токена процесса. Я надеялся сделать это, используя OpenProcessToken и затем AdjustTokenPrivileges на возвращенном дескрипторе токена.

После вызова LogonUser и ImpersonateLoggedOnUser следующий вызов завершается с ошибкой доступа.

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

Я вхожу в систему, используя LOGON32_LOGON_INTERACTIVE и LOGON32_PROVIDER_DEFAULT.

Настройка той же привилегии на токене пользователя выполнена успешно.

1 Ответ

1 голос
/ 16 августа 2011

Это ответ из двух частей, в зависимости от того, что вы пытаетесь сделать:

1) Если вы хотите настроить привилегии для маркера олицетворения, вам нужно использовать функцию OpenThreadToken, а не OpenProcessToken,Олицетворение влияет на поток, а не на процесс в целом.Попробуйте это:

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

2) Если вы действительно хотите настроить привилегии для маркера процесса, вам, вероятно, следует сделать это в тот момент, когда вы не выдаете себя за клиента.При необходимости вы можете включать и выключать олицетворение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...