我想将SID字符串格式转换为字节数组表示形式,然后将其提供给C#中LookupAccountSid()
方法的第二个参数。但我没有找到任何可以做到这一点的内置功能。例如:
SID = S-1-5-32-544
可以转换为:
(SID:1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0)
我在一些帖子中看到了它。但怎么样?
有没有简单的方法来实现这一目标?基本上我想要NT Authority\NetworkService
的字节数组表示SID = S-1-5-20
。在此先感谢您的帮助。
答案 0 :(得分:9)
您应该使用System.Security.Principal
命名空间中的SecurityIdentifier
对象:
var sid = new SecurityIdentifier("S-1-5-32-544");
byte[] bytes = new byte[sid.BinaryLength];
sid.GetBinaryForm(bytes, 0);
如果您想将其作为文本,则可以:
string strsid = string.Format("(SID: {0})", string.Join(",", bytes ));
完全产生:
(SID:1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0)
此外,如果您希望SID为NT Authority\NetworkService
,则可以将第一行替换为:
var sid = new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null);
答案 1 :(得分:0)
仅供参考,如果您想采用其他方式(SID的字节[]),就是这样。就我而言,byte []来自ManagementEventWatcher:
ManagementBaseObject ne = e.NewEvent;
var securityIdentifier = System.Security.Principal.SecurityIdentifier((byte[])ne.Properties["SID"].Value, 0);
您可以只使用securityIdentifier.ToString()来获取SID作为字符串。