将SID转换为用户名/组?

时间:2010-12-15 21:15:24

标签: c# usergroups sid

我正在遍历网络目录并尝试输出与每个文件/文件夹关联的用户/组名称(权限)。我得到了SID的回复,但我希望名称如“group_test”而不是“S-1-5-32-544”。这是我的代码 -

var files = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly);

                foreach (var f in files2)
                {
                    var fileInfo = new FileInfo(f);
                    var fs = fileInfo.GetAccessControl(AccessControlSections.Access);

                    foreach (FileSystemAccessRule rule in fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
                    {
                        var value = rule.IdentityReference.Value;
                        Response.Write(string.Format("File: {0} \t Usergroup: {1} <br/>", fileInfo.Name, value));
                    }  }

我从上面的代码获得SID,但在foreach循环中,如果我使用它代替 -

(NTAccount)((SecurityIdentifier)rule.IdentityReference).Translate(typeof(NTAccount)).Value

我得到这个例外 - Some or all identity references could not be translated.

似乎Translate方法不适用于远程共享。如何检索SID的真实姓名?远程服务器没有LDAP。

谢谢。

2 个答案:

答案 0 :(得分:3)

问题是您正在尝试将 local 的SID解析为远程计算机。作为this question州的答案:

  

SecurityReference对象的Translate方法适用于非本地SID,但仅适用于域帐户...

link提供了使用WMI远程解析SID的示例,这可能是完成任务的最佳方法。

答案 1 :(得分:0)

如果您可以使用WMI,您应该可以通过我认为的Win32_UserAccount课程来完成。它具有Name属性和SID属性。

或小组的Win32_Group课程。

这是一篇使用具有C#代码的WMI连接到远程PC的文章:How To: Connect to a Remote Computer