我有一个扫描目录并收集一些信息的 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 的类,也许我应该使用它,但它需要一个域名,我也不知道如何获得它——我所拥有的只是我正在扫描的目录的路径。
提前致谢。