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