У меня есть класс, которому нужно знать имя пользователя, который в данный момент действует.Environment.UserName
или WindowsIdentity.GetCurrent().Name
для этого.Но когда олицетворение включено, они возвращают LocalUser
имя, а не ImpersonatedUser
имя.
Как получить имя пользователя, выдавшего себя в настоящее время?
Приложение - консольное приложение C #, я знаю, чтоолицетворение действует, так как я получаю привилегии ImpersonatedUser
.Конечно, я могу заставить код олицетворения сохранить олицетворенное имя пользователя в некоторой глобальной переменной, но это будет неправильно.
ОБНОВЛЕНИЕ:
Код олицетворения:
if (LogonUser(userName, domain, password, LOGON32_LOGON_NEW_CREDENTIALS/*=9*/, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
WindowsIdentity tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
_impersonationContext = tempWindowsIdentity.Impersonate();
// WindowsIdentity.GetCurrent().Name equals "LocalUser"
// while userName equals "ImpersonatedUser"
...
У меня есть контроль над кодом олицетворения, но я бы предпочел сохранить его независимым от других частей решения.