如何从域名dns名称获取域名sid?

问题描述 投票:0回答:2

我有 Active Directory 域的 dns 名称,我想获取该域的域 sid。我该怎么做?

我已经拥有以下内容:

var domainContext =
    new DirectoryContext(DirectoryContextType.Domain, domainDnsName);
var domain = Domain.GetDomain(domainContext);
var dc = domain.DomainControllers.OfType<DomainController>().FirstOrDefault();

但是我有点困惑从这里该去哪里(或者也许我走错了路线)。

c# active-directory directoryservices
2个回答
7
投票

你想要的是这样的:

DirectoryEntry domainEntry = domain.GetDirectoryEntry();
byte[] domainSid = domainEntry.Properties["objectSID"].Value as byte[];
SecurityIdentifier strongDomainSid = new SecurityIdentifier(domainSid, 0);

1
投票

如果您使用本机代码。

  1. 为您想要的域构建 LDAP 查询字符串。例如。 “LDAP://fabrikam.com”(不必采用区分形式,例如“LDAP://DC=fabrikam,DC.com”1

    String path = "LDAP://fabrikam.com";
    
  2. 获取代表域的

    ADs
    对象

    IADs domain = ADsGetObject(path);
    
  3. 获取域对象的

    objectSid
    字节数组属性:

    Variant objectSid = domain.Get("objectSid");
    
  4. 将二进制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"
© www.soinside.com 2019 - 2024. All rights reserved.