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

时间:2011-08-11 08:44:16

标签: active-directory directoryservices

我有一个Active Directory域的DNS名称,我想获得该域的域名sid。我怎么能这样做?

我已经拥有以下内容:

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

但是我有点卡在这里(也许我跟着错误的路线)。

2 个答案:

答案 0 :(得分:6)

你想要的是这样的:

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

答案 1 :(得分:0)

如果您使用的是本机代码。

  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"