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