NetGetDCName 函数 (lmaccess.h)

NetGetDCName 函数 (PDC) 返回主域控制器的名称。 它不会返回指定域 (BDC) 备份域控制器的名称。 此外,不能将此函数远程到非 PDC 服务器。

支持 DNS 样式名称的应用程序应调用 DsGetDcName 函数。 此类型环境中的域控制器具有多主目录复制关系。 因此,应用程序使用非 PDC 的 DC 可能很有利。 可以调用 DsGetDcName 函数来查找域中的任何 DC; NetGetDCName 仅返回 PDC 的名称。

语法

NET_API_STATUS NET_API_FUNCTION NetGetDCName(
        LPCWSTR ServerName,
        LPCWSTR DomainName,
        LPBYTE  *Buffer
);

参数

ServerName

指向常量字符串的指针,该字符串指定要对其执行函数的远程服务器的 DNS 或 NetBIOS 名称。 如果此参数为 NULL,则使用本地计算机。

DomainName

指向指定域名称的常量字符串的指针。 域名必须是 NetBIOS 域名 (例如 microsoft) 。 NetGetDCName 不支持 DNS 样式的名称 (例如 microsoft.com) 。 如果此参数为 NULL,则该函数将返回主域的域控制器的名称。

Buffer

返回值

如果函数成功,则返回值NERR_Success。

如果函数失败,则返回值可能是以下错误代码之一。

返回代码 说明
NERR_DCNotFound
找不到 domainname 参数中指定的域的域控制器。
ERROR_BAD_NETPATH
找不到网络路径。 如果找不到 servername 参数中指定的计算机,则返回此错误。
ERROR_INVALID_NAME
名称语法不正确。 如果 servername 参数中指定的名称包含非法字符,则返回此错误。
ERROR_NOT_SUPPORTED
不支持该请求。

注解

无需特殊的组成员身份即可成功执行 NetGetDCName 函数。

示例

以下代码示例演示如何使用 检索主域控制器
NetGetDCName 函数。 此示例调用指定 servername 和 domainname 参数的 NetGetDCName 。 如果调用成功,代码会输出主域控制器的名称信息。 最后,该示例释放为返回域控制器名称的缓冲区分配的内存。

#ifndef UNICODE
#define UNICODE
#endif

#include <stdio.h>
#include <stdlib.h>  // for _wtoi function
#include <assert.h>
#include <windows.h>
#include <lm.h>

// Need to link with netapi32.lib
#pragma comment(lib, "netapi32.lib")

int wmain(int argc, wchar_t * argv[])
{

    NET_API_STATUS nStatus;

    LPCWSTR lpServer = NULL;
    LPCWSTR lpDomain = NULL;

    LPCWSTR lpDcName = NULL;
    
    if (argc != 3 ) {
        wprintf(L"Usage: %ws <ServerName> <DomainName>\n",
                argv[0]);
        wprintf(L"     %ws Myserver Domain\n", argv[0]);
        exit(1);
    }

    lpServer = argv[1];
    lpDomain = argv[2];

    wprintf(L"Calling NetGetDCName with parameters\n");
    wprintf(L"    lpServer = %ws\n", lpServer);
    wprintf(L"    lpDomain = %ws\n", lpDomain);

    //
    // Call the NetGetDCName function
    //
    nStatus = NetGetDCName(lpServer, lpDomain, (LPBYTE *) &lpDcName);
    //
    // If the call succeeds,
    //
    if (nStatus == NERR_Success) {
        wprintf(L"NetGetDCName was successful\n", nStatus);
        wprintf(L"DC Name = %ws\n", lpDcName);
        // Need to free the returned buffer
        nStatus = NetApiBufferFree( (LPVOID) lpDcName);
        if (nStatus != NERR_Success)
            wprintf(L"NetApiBufferFree failed with error: %lu (0x%lx)\n",
                nStatus, nStatus);
    } else {
        wprintf(L"NetGetDCName failed with error: %lu (0x%lx)\n", nStatus,
                nStatus);
        wprintf(L"   Error = ");
        switch (nStatus) {
        case ERROR_INVALID_PARAMETER:
            wprintf(L"ERROR_INVALID_PARAMETER\n");
            break;
        case ERROR_NO_SUCH_DOMAIN:
            wprintf(L"ERROR_NO_SUCH_DOMAIN\n");
            break;
        case ERROR_NOT_SUPPORTED:
            wprintf(L"ERROR_NOT_SUPPORTED\n");
            break;
        case ERROR_BAD_NETPATH:
            wprintf(L"ERROR_BAD_NETPATH\n");
            break;
        case ERROR_INVALID_COMPUTERNAME:
            wprintf(L"ERROR_INVALID_COMPUTERNAME\n");
            break;
        case DNS_ERROR_INVALID_NAME_CHAR:
            wprintf(L"DNS_ERROR_INVALID_NAME_CHAR\n");
            break;
        case DNS_ERROR_NON_RFC_NAME:
            wprintf(L"DNS_ERROR_NON_RFC_NAME\n");
            break;
        case ERROR_INVALID_NAME:
            wprintf(L"ERROR_INVALID_NAME\n");
            break;
        case NERR_DCNotFound:
            wprintf(L"NERR_DCNotFound\n");
            break;
        case NERR_WkstaNotStarted:
            wprintf(L"NERR_WkstaNotStarted\n");
            break;
        case RPC_S_SERVER_UNAVAILABLE:
            wprintf(L"RPC_S_SERVER_UNAVAILABLE\n");
            break;
        case RPC_E_REMOTE_DISABLED:
            wprintf(L"RPC_E_REMOTE_DISABLED\n");
            break;
        default:
            wprintf(L"Other error, see Winerror.h or lmerr.h)\n");
            break;
        }
    }

    return nStatus;
}

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 lmaccess.h (包括 Lm.h)
Library Netapi32.lib
DLL Netapi32.dll

另请参阅

DsGetDcName

获取函数

NetGetAnyDCName

网络管理功能

网络管理概述