5

フルネームのドメインがあります(例:long-domainname.com)。このドメイン名はエイリアスshortに置き換えられます。netapi32.dllこのエイリアスは、次のようにを使用して取得できます。

[DllImport("Netapi32.dll")]
static extern int NetApiBufferFree(IntPtr Buffer);

// Returns the domain name the computer is joined to, or "" if not joined.
public static string GetJoinedDomain()
{
    int result = 0;
    string domain = null;
    IntPtr pDomain = IntPtr.Zero;
    NetJoinStatus status = NetJoinStatus.NetSetupUnknownStatus;
    try
    {
        result = NetGetJoinInformation(null, out pDomain, out status);
        if (result == ErrorSuccess &&
            status == NetJoinStatus.NetSetupDomainName)
        {
            domain = Marshal.PtrToStringAuto(pDomain);
        }
    }
    finally
    {
        if (pDomain != IntPtr.Zero) NetApiBufferFree(pDomain);
    }
    if (domain == null) domain = "";
    return domain;
}

このメソッドはソート値を返します。しかし、System.DirectoryServices.ActiveDirectory.DomainクラスとそのNameプロパティを使用して、 long-domainname.com値を取得します。デバッグモードでプロパティを検索したところ、短い値のフィールドまたはプロパティが見つかりませんでした。System.DirectoryServices.ActiveDirectory.Domainクラスで可能ですか?または、他のクラスのSystem.DirectoryServices名前空間で可能でしょうか?外部の*.dllをインポートせずに短いドメイン名の値を取得するにはどうすればよいですか?

4

1 に答える 1

8
private string GetNetbiosDomainName(string dnsDomainName)
    {
        string netbiosDomainName = string.Empty;

        DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");

        string configurationNamingContext = rootDSE.Properties["configurationNamingContext"][0].ToString();

        DirectoryEntry searchRoot = new DirectoryEntry("LDAP://cn=Partitions," + configurationNamingContext);

        DirectorySearcher searcher = new DirectorySearcher(searchRoot);
        searcher.SearchScope = SearchScope.OneLevel;
        searcher.PropertiesToLoad.Add("netbiosname");
        searcher.Filter = string.Format("(&(objectcategory=Crossref)(dnsRoot={0})(netBIOSName=*))", dnsDomainName);

        SearchResult result = searcher.FindOne();

        if (result != null)
        {
            netbiosDomainName = result.Properties["netbiosname"][0].ToString();
        }

        return netbiosDomainName;
    }
于 2012-12-11T06:07:10.360 に答える