Преобразование имени пользователя в SID в C # - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь использовать этот код для преобразования имени пользователя Windows (в классической форме .\username) в объект SID:

NTAccount account = new NTAccount(".\\MyUser");
SecurityIdentifier sid = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));

Однако я продолжаю получать следующее исключение при выполнениипоследняя инструкция:

System.Security.Principal.IdentityNotMappedException: «Некоторые или все ссылки на идентификаторы не могут быть переведены.»

Что я делаю не так?

1 Ответ

0 голосов
/ 23 октября 2018

Отвечая на мой вопрос после проб и ошибок:

Код правильный, но функция Translate, похоже, не поддерживает сокращение ., указывающее, что учетная запись является локальной, а не в домене.,Поэтому, если у вас есть имя пользователя, начинающееся с .\, вам необходимо заменить точку на имя машины.Следующий код работает правильно:

public static SecurityIdentifier usernameToSid(string user)
{
    if (user.StartsWith(@".\"))
    {
        user = user.Replace(@".\", Environment.MachineName + @"\");
    }

    NTAccount account = new NTAccount(user);
    return (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
}
...