Как я могу узнать, когда управляемый поток изменил контекст пользователя с помощью олицетворения? - PullRequest
0 голосов
/ 01 сентября 2009

Есть ли способ узнать, когда управляемый поток изменил контекст пользователя из-за олицетворения? Я хотел бы иметь возможность делать это из неуправляемого кода, который наблюдает за управляемым кодом с помощью Microsoft .NET Profiling API.

Например, некоторый управляемый код может выполняться в пользовательском контексте A, а затем олицетворять пользователя B. Олицетворение может происходить из-за web.config или динамически во время выполнения, поскольку управляемый код использует API для ручного олицетворения пользователя B.

Как мне перехватить переход от пользователя A к пользователю B из моего неуправляемого потока?

Ответы [ 2 ]

3 голосов
/ 02 сентября 2009

Вы не можете сделать это надежно, потому что, насколько я знаю, нет уведомления об изменении токена потока.

То, что вы МОЖЕТЕ сделать, это вызвать OpenThreadToken в целевом потоке. Когда API завершается успешно (возвращает токен), поток подражает кому-либо. Этого может быть достаточно.

0 голосов
/ 02 октября 2009

Вы можете проверить свойство Thread.CurrentPrincipal. Он возвращает WindowsPrincipal на основе вызова OpenThreadToken.

...