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