OpenProcessToken завершается ошибкой после ImpersonateLoggedOnUser

У меня есть сервис, который выдает себя за пользователя. Служба работает как локальная система. Пользователь является локальным администратором и администратором домена. После олицетворения мне необходимо настроить токен привилегии процесса. Я надеялся сделать это с помощью 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) Если вы хотите настроить привилегии для маркера олицетворения, вам нужно использовать функцию OpenThreadToken, а не OpenProcessToken. Олицетворение влияет на поток, а не на процесс в целом. Попробуй это:

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

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

Другие вопросы по тегам