Share via


NetGetDCName 함수(lmaccess.h)

NetGetDCName 함수는 PDC(주 도메인 컨트롤러)의 이름을 반환합니다. 지정된 도메인에 대한 백업 도메인 컨트롤러(BDC)의 이름을 반환하지 않습니다. 또한 이 함수를 PDC가 아닌 서버로 원격으로 연결할 수 없습니다.

DNS 스타일 이름을 지원하는 애플리케이션은 DsGetDcName 함수를 호출해야 합니다. 이러한 유형의 환경의 도메인 컨트롤러에는 다중 master 디렉터리 복제 관계가 있습니다. 따라서 애플리케이션에서 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 함수입니다. 이 샘플에서는 서버 이름 및 도메인 이름 매개 변수를 지정하는 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 포함)
라이브러리 Netapi32.lib
DLL Netapi32.dll

추가 정보

DsGetDcName

함수 가져오기

NetGetAnyDCName

네트워크 관리 함수

네트워크 관리 개요