Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Функция 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.
Если вызов олицетворения ОлицетворенияLoggedOnUser завершается ошибкой, подключение клиента не является олицетворенным, и запрос клиента выполняется в контексте безопасности процесса. Если процесс выполняется как высоко привилегированная учетная запись, например LocalSystem или как член административной группы, пользователь может иметь возможность выполнять действия, которые они в противном случае будут запрещены. Поэтому важно всегда проверять возвращаемое значение вызова, и если он завершается сбоем, возникает ошибка; не продолжайте выполнение запроса клиента.
Все олицетворение функций, включая олицетворениеLoggedOnUser , позволяют запрашивать олицетворение, если одно из следующих значений имеет значение true:
- Вызывающий объект имеет привилегию SeImpersonatePrivilege .
- Процесс (или другой процесс в сеансе входа вызывающего объекта) создал маркер с помощью явных учетных данных с помощью функции LogonUser или LsaLogonUser .
- Удостоверение, прошедшее проверку подлинности, совпадает с вызывающим.
Это важно
Маркер должен иметь уровень олицетворения SecurityImpersonation или более высокий для успешной олицетворения. Маркеры с уровнями SecurityIdentification или SecurityAnonymous нельзя использовать для олицетворения, даже если вызывающий объект имеет SeImpersonatePrivilege. Маркеры SecurityIdentification разрешают проверку идентификации и проверки ACL, но не разрешают олицетворение.
Требования к уровню олицетворения
Поведение зависит от уровня олицетворения маркера:
- SecurityAnonymous: сервер не может получить сведения об удостоверениях клиента и не может олицетворить клиента.
- SecurityIdentification: сервер может получить удостоверение клиента и выполнить проверку доступа, но не может олицетворение клиента. Это уровень по умолчанию для многих сценариев.
- SecurityImpersonation: сервер может олицетворить контекст безопасности клиента в локальной системе. Это минимальный уровень, необходимый для успешного выполнения олицетворенияLoggedOnUser .
- SecurityDelegation: сервер может олицетворить клиента в удаленных системах, а также локально.
Windows XP с пакетом обновления 1 (SP1) и более ранними версиями: Привилегия SeImpersonatePrivilege не поддерживается.
Дополнительные сведения об олицетворении см. в разделе олицетворение клиента.
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Windows XP [только классические приложения] |
| минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
| целевая платформа | Windows |
| Header | securitybaseapi.h (включая Windows.h) |
| Library | Advapi32.lib |
| DLL | Advapi32.dll |
См. также
Функции управления доступом клиента или сервера