Функция ImpersonateLoggedOnUser (securitybaseapi.h)

Функция ImpersonateLoggedOnUser позволяет вызывающму потоку олицетворять контекст безопасности пользователя, выполнившего вход. Пользователь представлен дескриптором маркера.

Синтаксис

BOOL ImpersonateLoggedOnUser(
  [in] HANDLE hToken
);

Параметры

[in] hToken

Дескриптор основного маркера доступа или маркера доступа олицетворения, представляющего вошедшего в систему пользователя. Это может быть дескриптор маркера, возвращаемый вызовом функций LogonUser, CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken или OpenThreadToken . Если hToken является дескриптором для первичного маркера, маркер должен иметь TOKEN_QUERY и TOKEN_DUPLICATE доступ. Если hToken является дескриптором маркера олицетворения, маркер должен иметь TOKEN_QUERY и TOKEN_IMPERSONATE доступ.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Олицетворение продолжается до тех пор, пока поток не завершит работу или не вызовет RevertToSelf.

Вызывающий поток не должен иметь определенных привилегий для вызова ImpersonateLoggedOnUser.

Если вызов ImpersonateLoggedOnUser завершается сбоем, клиентское подключение не олицетворяется и клиентский запрос выполняется в контексте безопасности процесса. Если процесс выполняется от имени учетной записи с высоким уровнем привилегий, например LocalSystem, или от имени члена административной группы, пользователь может иметь возможность выполнять действия, которые в противном случае будут запрещены. Поэтому важно всегда проверка возвращаемое значение вызова и в случае сбоя вызвать ошибку; не продолжать выполнение клиентского запроса.

Все функции олицетворения, включая ImpersonateLoggedOnUser , разрешают запрошенное олицетворение, если выполняется одно из следующих значений:

  • Запрошенный уровень олицетворения маркера меньше, чем SecurityImpersonation, например SecurityIdentification или SecurityAnonymous.
  • Вызывающий объект имеет привилегию SeImpersonatePrivilege .
  • Процесс (или другой процесс в сеансе входа вызывающего объекта) создал маркер, используя явные учетные данные с помощью функции LogonUser или LsaLogonUser .
  • Удостоверение, прошедшее проверку подлинности, совпадает с вызывающим.
Windows XP с пакетом обновления 1 (SP1) и более ранними версиями: Привилегия SeImpersonatePrivilege не поддерживается.

Дополнительные сведения об олицетворении см. в разделе Олицетворение клиента.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header securitybaseapi.h (включая Windows.h)
Библиотека Advapi32.lib
DLL Advapi32.dll

См. также раздел

Функции контроль доступа клиента и сервера

Общие сведения о клиенте и сервере контроль доступа

CreateProcessAsUser

CreateRestrictedToken

DuplicateToken

DuplicateTokenEx

Logonuser

OpenProcessToken

OpenThreadToken

RevertToSelf