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.
함수가 실패하면 반환 값은 다음 오류 코드 중 하나일 수 있습니다.
반환 코드 | 설명 |
---|---|
|
domainname 매개 변수에 지정된 도메인의 도메인 컨트롤러를 찾을 수 없습니다. |
|
네트워크 경로를 찾을 수 없습니다. servername 매개 변수에 지정된 컴퓨터를 찾을 수 없는 경우 이 오류가 반환됩니다. |
|
이름 구문이 잘못되었습니다. servername 매개 변수에 지정된 이름에 잘못된 문자가 포함된 경우 이 오류가 반환됩니다. |
|
요청이 지원되지 않습니다. |
설명
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 |