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。
関数が失敗した場合、戻り値には次のいずれかのエラー コードを指定できます。
リターン コード | 説明 |
---|---|
|
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 (include Lm.h) |
Library | Netapi32.lib |
[DLL] | Netapi32.dll |