我有一个C#应用程序,它扫描目录并收集一些信息.我想显示每个文件的帐户名称.我可以通过获取FileInfo对象的SID在本地系统上执行此操作,然后执行以下操作:
string GetNameFromSID( SecurityIdentifier sid )
{
NTAccount ntAccount = (NTAccount)sid.Translate( typeof( NTAccount ) );
return ntAccount.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于网络上的文件,可能是因为Translate()函数仅适用于本地用户帐户.我想也许我可以在SID上进行LDAP查找,所以我尝试了以下方法:
string GetNameFromSID( SecurityIdentifier sid )
{
string str = "LDAP://<SID=" + sid.Value + ">";
DirectoryEntry dirEntry = new DirectoryEntry( str );
return dirEntry.Name;
}
Run Code Online (Sandbox Code Playgroud)
这似乎可以工作,因为对"dirEntry.Name"的访问会挂起几秒钟,好像它正在关闭并查询网络,但它会抛出一个System.Runtime.InteropServices.COMException
有谁知道如何获得任意文件或SID的帐户名称?我对网络或LDAP或其他任何东西都不太了解.有一个名为DirectorySearcher的类,我可能会使用它,但它想要一个域名,我不知道如何得到它 - 我所拥有的只是我正在扫描的目录的路径.
提前致谢.
我已经编写了一个代码,可以创建共享并更改当前用户的权限.目标是始终允许所有人在共享级别上并拒绝ntfs acl级别的权限.
我使用德语窗口,我注意到我只能使用"jeder"访问每个用户.在英语中,我认为用户是"每个人"还是"所有人"?!无论如何,我正在寻找一种方法来获得每个用户语言独立的名称.
希望这是可能的.