名前空間サービス プロバイダー
名前空間プロバイダーは、Winsock 名前空間 SPI と、DNS、X.500、NetWare Directory Services (NDS) などの既存のネーム サービスのネイティブ プログラム インターフェイスとの間のインターフェイス マッピングを実装します。 名前空間プロバイダーは 1 つの名前空間を正確にサポートしていますが、特定の名前空間に対して複数のプロバイダーをインストールできます。 また、1 つの DLL で複数の名前空間プロバイダーのインスタンスを作成することもできます。 名前空間プロバイダーがインストールされると、 WSANAMESPACE_INFO 構造のカタログが維持されます。 アプリケーションでは 、WSAEnumNameSpaceProviders を使用して、コンピューターでサポートされている名前空間を検出できます。
Windows Vista 以降では、拡張 WSANAMESPACE_INFOEX 構造と WSAEnumNameSpaceProvidersEx 関数が提供されます。
64 ビット プラットフォームでは、32 ビット カタログを列挙するために、同様の WSCEnumNameSpaceProviders32 関数と WSCEnumNameSpaceProvidersEx32 関数が提供されます。
詳細については、「 Winsock 名前空間サービス プロバイダーの要件 」を参照してください。
従来の GetXbyY サービス プロバイダー
Windows ソケット 2 では、Windows ソケット バージョン 1.1 にある TCP/IP 固有の名前解決機能が完全にサポートされています。 これは、 SPI に GetXbyY 関数のセットを含めることによって行われます。 ただし、この一連の関数の処理は、SPI 関数の残りの部分とは若干異なります。 SPI に表示される GetXbyY 関数は、GETXBYYSP_で始まるものであり、次の表にまとめられています。
バークレイスタイル関数
SPI 関数名 | 説明 |
---|---|
GETXBYYSP_gethostbyaddr | 指定したホスト アドレスの ホスト構造 を提供します。 |
GETXBYYSP_gethostbyname | 指定したホスト名の ホスト構造 を指定します。 |
GETXBYYSP_getprotobyname | 指定したプロトコル名の 原本 構造を指定します。 |
GETXBYYSP_getprotobynumber | 指定したプロトコル番号の 原本 構造を提供します。 |
GETXBYYSP_getservbyname | 指定されたサービス・ナムに対して サヴァント 構造を提供します。 |
GETXBYYSP_getservbyport | 指定したポートでサービスの サービス 提供構造を提供します。 |
GETXBYYSP_gethostname | ローカル コンピューターの標準ホスト名を返します。 |
非同期スタイル関数
SPI 関数名 | 説明 |
---|---|
GETXBYYSP_WSAAsyncGetHostByAddr | 指定したホスト アドレスの ホスト構造 を提供します。 |
GETXBYYSP_WSAAsyncGetHostByName | 指定したホスト名の ホスト構造 を指定します。 |
GETXBYYSP_WSAAsyncGetProtoByName | 指定したプロトコル名の 原本 構造を指定します。 |
GETXBYYSP_WSAAsyncGetProtoByNumber | 指定したプロトコル番号の 原本 構造を提供します。 |
GETXBYYSP_WSAAsyncGetServByName | 指定したサービス名の サービス 構造を提供します。 |
GETXBYYSP_WSAAsyncGetServByPort | 指定したポートでサービスの サービス 提供構造を提供します。 |
GETXBYYSP_WSACancelAsyncRequest | 非同期の GetXbyY 操作を 取り消します。 |
SPI のこれらの GetXbyY 関数の構文とセマンティクスは、API 仕様に記載されているものとまったく同じであるため、ここでは繰り返されません。
Windows Sockets 2 DLL を使用すると、1 つのサービス プロバイダーがこれらのサービスを提供できます。 そのため、起動時にサービス プロバイダーから受信したプロシージャ テーブルに、これらの関数へのポインターを含める必要はありません。 Windows 環境では、これらの関数を実装する DLL へのパスは、次のレジストリ パスにある値から取得されます。 このレジストリ エントリは、既定では存在しません。
Hkey_local_machine\システム\CurrentControlSet\サービス\WinSock2\パラメーター\GetXByYLibraryPath
既定の GetXbyY サービス プロバイダーのBuilt-In
既定の GetXbyY サービス プロバイダーは、標準の Windows ソケット 2 ランタイム コンポーネントに統合されています。 この既定のプロバイダーは上記のすべての関数を実装するため、これらの関数を名前空間プロバイダーで実装する必要はありません。 ただし、名前空間プロバイダーは、指定されたレジストリ キーにこれらの関数を実装する DLL へのパスである文字列を格納するだけで、これらの関数の一部またはすべてを自由に提供できます (したがって、既定値をオーバーライドします)。 名前付きプロバイダー DLL によってエクスポートされない GetXbyY 関数は、組み込みの既定値を使用して提供されます。 ただし、プロバイダーが GetXbyY 関数の非同期バージョンのいずれかを指定することを選択した場合、取り消し操作が適切に機能するように、すべての非同期関数を指定する必要があることに注意してください。
既定の GetXbyY サービス プロバイダーの現在の実装は、Wsock32.dll内に存在します。 コントロール パネルによって TCP/IP 設定がどのように確立されているかに応じて、DNS またはローカル ホスト ファイルを使用して名前解決が行われます。 DNS を使用する場合、既定の GetXbyY サービス プロバイダーは、標準の Windows Sockets 1.1 API 呼び出しを使用して DNS サーバーと通信します。 これらのトランザクションは、既定の TCP/IP スタックとして構成されている TCP/IP スタックを使用して発生します。 ただし、2 つの特別なケースは特別なメンションに値します。
GETXBYYSP_gethostnameの既定の実装では、レジストリからローカル ホスト名を取得します。 これは、"マイ コンピューター" に割り当てられた名前に対応します。 GETXBYYSP_gethostbyname と GETXBYYSP_WSAAsyncGetHostByName の既定の実装では、指定されたホスト名とローカル ホスト名が常に比較されます。 一致する場合、既定の実装では、ローカル IP アドレスを検出するために、プライベート インターフェイスを使用して Microsoft TCP/IP スタックをプローブします。 したがって、Microsoft TCP/IP スタックから完全に独立するには、名前空間プロバイダーがGETXBYYSP_gethostbynameとGETXBYYSP_WSAAsyncGetHostByNameの両方を実装する必要があります。