Я использую что-то вроде следующего метода для олицетворения пользователя в моем коде:
Как вы выполняете олицетворение в .NET?
В другом классе мне нужно узнать текущего пользователя (например, "mydomain\moose" ), но я не буду иметь никакой идеи, если я в настоящее время выдаю себя за другого пользователя или нет.
Как получить имя пользователя, если я выдаю себя за кого-то?
System.Environment.UserName и System.Security.Principal.WindowsIdentity.GetCurrent(). Имя и возвращают оригинального пользователя, а не текущего пользователя.
Подробнее:
Я делаю это олицетворение, чтобы я мог получить доступ к некоторым файлам в общем сетевом ресурсе, к которому пользователь обычно не имеет доступа.
Если я использую тип входа LOGON32_LOGON_INTERACTIVE, я вижу нового пользователя, но я не могу получить доступ к общему ресурсу сети. Если я использую тип входа LOGON32_LOGON_NEW_CREDENTIALS (значение 9), я могу получить доступ к общему сетевому ресурсу, но я не вижу нового пользователя в Environment.UserName.