Получить вымышленное имя пользователя

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

У меня есть контроль над кодом олицетворения, но я бы предпочел, чтобы он не зависел от другие части раствора.

6
задан zzandy 1 March 2011 в 11:07
поделиться