我有一个C#应用程序,可以扫描一个目录并收集一些信息。我想要显示每个文件的帐户名称。我可以通过获取FileInfo对象的SID,然后执行以下操作,在本地系统上完成此操作:
string GetNameFromSID( SecurityIdentifier sid )
{
NTAccount ntAccount = (NTAccount)sid.Translate( typeof( NTAccount ) );
return ntAccount.ToString();
}
然而,这对于网络上的文件不起作用,可能是因为Translate()函数仅适用于本地用户帐户。我认为也许可以通过SID进行LDAP查找,因此我尝试了以下操作:
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的类也许我应该使用它,但它需要一个域名,而我不知道如何获取它 - 我只有正在扫描的目录的路径。