ззанды у тебя недоразумение. LOGON32_LOGON_NEW_CREDENTIALS на самом деле не «подражает» пользователю, поэтому WindowsIdentity.Name сообщается правильно. Обновил мой ответ.

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

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

Ответы на вопрос(2)

Ваш ответ на вопрос