У меня есть приложение на C #, которое сканирует каталог и собирает некоторую информацию. Я хотел бы отобразить имя учетной записи для каждого файла. Я могу сделать это в локальной системе, получив SID для объекта FileInfo, а затем выполнив:
string GetNameFromSID( SecurityIdentifier sid )
{
NTAccount ntAccount = (NTAccount)sid.Translate( typeof( NTAccount ) );
return ntAccount.ToString();
}
Однако это не работает для файлов в сети, возможно потому, что функция Translate () работает только с локальными учетными записями пользователей. Я подумал, что, возможно, смогу выполнить поиск LDAP по SID, поэтому я попробовал следующее:
string GetNameFromSID( SecurityIdentifier sid )
{
string str = "LDAP://<SID=" + sid.Value + ">";
DirectoryEntry dirEntry = new DirectoryEntry( str );
return dirEntry.Name;
}
Кажется, что это будет работать, так как доступ к "dirEntry.Name" зависает на несколько секунд, как будто он отключается и запрашивает сеть, но затем выдает System.Runtime.InteropServices.COMException
Кто-нибудь знает, как я могу получить имя учетной записи произвольного файла или SID? Я не знаю много о сети или LDAP или что-то еще. Есть класс DirectorySearcher, который, возможно, я должен использовать, но он хочет доменное имя, и я тоже не знаю, как его получить - все, что у меня есть, - это путь к каталогу, который я сканирую.
Заранее спасибо.