Функция NetGetDCName (lmaccess.h)

Функция NetGetDCName возвращает имя основного контроллера домена (PDC). Он не возвращает имя резервного контроллера домена (BDC) для указанного домена. Кроме того, эту функцию нельзя удалить на сервере, отличном от PDC.

Приложения, поддерживающие имена в стиле DNS, должны вызывать функцию DsGetDcName . Контроллеры домена в среде этого типа имеют отношение репликации каталогов с несколькими master. Поэтому приложению может быть полезно использовать контроллер домена, который не является контроллером домена. Вы можете вызвать функцию DsGetDcName , чтобы найти любой контроллер домена в домене. NetGetDCName возвращает только имя основного контроллера домена.

Синтаксис

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 . В примере вызывается NetGetDCName , указывая параметры servername и domainname. Если вызов завершается успешно, код выводит сведения из имени основного контроллера домена. Наконец, в примере освобождается память, выделенная для буфера, в котором было возвращено имя контроллера домена.

#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
Header lmaccess.h (включая Lm.h)
Библиотека Netapi32.lib
DLL Netapi32.dll

См. также раздел

DsGetDcName

Получение функций

NetGetAnyDCName

Функции управления сетью

Общие сведения об управлении сетью