У меня есть класс, которому нужно знать имя текущего пользователя. 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"
...
У меня есть контроль над кодом олицетворения, но я бы предпочел, чтобы он не зависел от другие части раствора.