4

我想将 SID 字符串格式转换为字节数组表示,然后将其提供给LookupAccountSid()C# 中方法的第二个参数。但我没有发现任何特定的内置函数可以做到这一点。例如:

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\NetworkServiceSID = S-1-5-20. 在此先感谢您的帮助。

4

2 回答 2

14

您应该使用命名空间SecurityIdentifier中的对象System.Security.Principal

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);
于 2014-07-09T16:21:40.303 回答
2

仅供参考,如果您想另辟蹊径(byte[] 到 SID),就是这个。就我而言,byte[] 来自 ManagementEventWatcher:

ManagementBaseObject ne = e.NewEvent;
var securityIdentifier = new System.Security.Principal.SecurityIdentifier((byte[])ne.Properties["SID"].Value, 0);

您可以使用securityIdentifier.ToString()将 SID 作为字符串获取。

于 2019-12-10T00:48:38.483 回答