2010-12-15 4 views
4

Я перебираю сетевой каталог и пытаюсь вывести имена пользователей/групп (разрешения), связанные с каждым файлом/папкой. Я получаю обратно SID, но мне нужны имена типа «group_test», а не «S-1-5-32-544». Вот мой код -Преобразование SID в имена пользователей/групп?

var files = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly); 

       foreach (var f in files2) 
       { 
        var fileInfo = new FileInfo(f); 
        var fs = fileInfo.GetAccessControl(AccessControlSections.Access); 

        foreach (FileSystemAccessRule rule in fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) 
        { 
         var value = rule.IdentityReference.Value; 
         Response.Write(string.Format("File: {0} \t Usergroup: {1} <br/>", fileInfo.Name, value)); 
        } } 

я Сида из приведенного выше кода, но в цикле Еогеасп, если я использую это вместо этого -

(NTAccount)((SecurityIdentifier)rule.IdentityReference).Translate(typeof(NTAccount)).Value 

Я получаю это исключение - Some or all identity references could not be translated.

Он появляется что метод перевода не работает с удаленными долями. Как получить реальные имена SID? На удаленном сервере нет LDAP.

спасибо.

ответ

3

Проблема заключается в том, что вы пытаетесь решить SID, который локальная к удаленной машине. В ответ на this question состояний:

SecurityReference объекта Перевести метод действительно работает на нелокальных УЛМ, но только для учетных записей домена ...

Это link дает пример для удаленного решение SID с помощью WMI, который, вероятно, лучший метод для выполнения вашей задачи.

0

Если вы можете использовать WMI, вы должны быть в состоянии сделать это через класс Win32_UserAccount, я думаю. Он имеет Name собственности и SID собственности.

или Win32_Group класс для групп.

Вот статья для подключения к удаленному компьютеру с помощью WMI, который имеет C# код: How To: Connect to a Remote Computer

 Смежные вопросы

  • Нет связанных вопросов^_^