我有 Active Directory 域的 dns 名称,我想获取该域的域 sid。我该怎么做?
我已经拥有以下内容:
var domainContext =
new DirectoryContext(DirectoryContextType.Domain, domainDnsName);
var domain = Domain.GetDomain(domainContext);
var dc = domain.DomainControllers.OfType<DomainController>().FirstOrDefault();
但是我有点困惑从这里该去哪里(或者也许我走错了路线)。
你想要的是这样的:
DirectoryEntry domainEntry = domain.GetDirectoryEntry();
byte[] domainSid = domainEntry.Properties["objectSID"].Value as byte[];
SecurityIdentifier strongDomainSid = new SecurityIdentifier(domainSid, 0);
如果您使用本机代码。
为您想要的域构建 LDAP 查询字符串。例如。 “LDAP://fabrikam.com”(不必采用区分形式,例如“LDAP://DC=fabrikam,DC.com”1)
String path = "LDAP://fabrikam.com";
获取代表域的
ADs
对象
IADs domain = ADsGetObject(path);
获取域对象的
objectSid
字节数组属性:
Variant objectSid = domain.Get("objectSid");
将二进制sid转换为字符串:
Pointer p = SafeArrayAccessData(objectSid);
String domainSid = ConvertSidToStringSid(p);
这将返回您好的域名 sid:
String GetDomainSid(String domainName)
{
Variant objectSid = ADSGetObject(domainName).Get("objectSid");
Pointer p = SafeArrayAccessData(objectSid);
String domainSid = ConvertSidToStringSid(p);
SafeArrayUnaccessData(objectSid);
return domainSid;
}
GetDomainSid("fabrikam.com") ==> "S-1-5-21-1708537768-844245398-2146844275"