Является ли олицетворение в Win32 на поток?
Звонит ImpersonateSecurityContext
на сервере, выдавая себя за клиента в вызывающем потоке или для всего процесса. Документация немного расплывчата по этому вопросу, поскольку в ней говорится, что "функция создает маркер олицетворения и позволяет потоку или процессу выполняться с контекстом олицетворения".
Я предполагаю, что олицетворение только для вызывающего потока, все остальное было бы странно, но я хочу быть уверен.
1 ответ
По MSDN:
Олицетворение - это способность потока выполнять с использованием другой информации о безопасности, чем процесс, которому принадлежит поток. Как правило, поток в приложении сервера олицетворяет клиента. Это позволяет потоку сервера действовать от имени этого клиента для доступа к объектам на сервере или проверки доступа к собственным объектам клиента.
Microsoft Windows API предоставляет следующие функции для начала олицетворения:
...
- Пакет безопасности или сервер приложений может вызватьImpersonateSecurityContext
функция, чтобы выдать себя за клиента.
Таким образом, олицетворение делается на основе потока.
Олицетворение может использоваться, чтобы порождать новый процесс как олицетворенный пользователь (с помощью DuplicateTokenEx()
а также CreateProcessAsUser()
) но олицетворение никогда не заставляет вызывающий процесс работать от имени другого пользователя, только вызывающий поток.
В контексте сервера, где несколько клиентов могут быть подключены одновременно, было бы очень опасно, если бы имитация клиента применялась на основе всего процесса.