トランスポートの構成とインストール
トランスポート プロトコルに Windows ソケットを介してアクセスできるようにするには、システムに適切にインストールし、Windows ソケットに登録する必要があります。 ベンダーのインストール プログラムを呼び出してトランスポート サービス プロバイダーをインストールする場合は、構成情報を構成データベースに追加して、サービス プロバイダーに関するWs2_32.dll必要な情報を提供する必要があります。 Ws2_32.dllでは、インストールするサービス プロバイダーに関する関連情報を提供するために、ベンダーのインストール プログラムに対して WSCInstallProvider と WSCInstallProviderAndChains という複数のインストール機能がエクスポートされます。 この情報には、サービス プロバイダー DLL の名前とパス、このプロバイダーがサポートできる WSAPROTOCOL_INFO 構造の一覧などが含まれます。 Ws2_32.dllでは、ベンダーのアンインストール プログラム用の WSCDeinstallProvider 関数も提供され、Ws2_32.dllによって管理されている構成データベースからすべての関連情報が削除されます。 この構成情報の正確な場所と形式は、Ws2_32.dllに対してプライベートであり、上記の関数でのみ操作できます。
64 ビット プラットフォームでは、32 ビットと 64 ビットのカタログで動作する同様の関数があります。 これらの関数には、 WSCInstallProvider64_32、 WSCInstallProviderAndChains64_32、 WSCDeinstallProvider32 が含まれます。
トランスポート サービス プロバイダーが最初にインストールされる順序は、サービス プロバイダー インターフェイスの WSCEnumProtocols および WSCEnumProtocols32、またはアプリケーション インターフェイスの WSAEnumProtocols を介して列挙される順序を制御します。 さらに重要なのは、この順序は、クライアントがアドレス ファミリ、型、プロトコル識別子に基づいてソケットの作成を要求したときにプロトコルとサービス プロバイダーが考慮される順序も制御することです。 Windows Sockets 2 には、Sporder.exeと呼ばれるアプレットが含まれています。これにより、インストールされているプロトコルのカタログを、プロトコルが既にインストールされた後に対話形式で並べ替えることができます。 Windows ソケット 2 には、プロトコルを並べ替える手続き型インターフェイスをエクスポートする補助 DLL Sporder.dllも含まれています。 この手続き型インターフェイスは、 WSCWriteProviderOrder という名前の 1 つのプロシージャで構成されます。
レイヤード プロトコルとプロトコル チェーンのインストール
インストールする各プロトコルで提供される WSAPROTOCOL_INFO 構造は、プロトコルが基本プロトコル、階層化プロトコル、またはプロトコル チェーンであるかどうかを示します。 ProtocolChain.ChainLen パラメーターの値は、次の表に示すように解釈されます。
値 | 説明 |
---|---|
0 | レイヤード プロトコル。 |
1 | 基本プロトコル (またはコンポーネントが 1 つだけのチェーン)。 |
>1 | プロトコル チェーン。 |
プロトコル チェーンのインストールは、すべての構成要素 (ベース プロトコルと階層化されたプロトコル) の正常なインストール後にのみ行うことができます。 プロトコル チェーンの WSAPROTOCOL_INFO 構造では、 ProtocolChain パラメーターを使用して、チェーンの長さと各コンポーネントの ID を記述します。 チェーンを構成する個々のプロトコルは ProtocolChain.ChainEntries 配列内の順序で一覧表示され、配列の 0 番目の要素は最初の階層化されたプロバイダーに対応します。 プロトコルは CatalogEntryID 値によって識別されます。これは、プロトコルのインストール時にWs2_32.dllによって割り当てられ、各プロトコルの WSAPROTOCOL_INFO 構造にあります。
プロトコル チェーンの WSAPROTOCOL_INFO 構造の残りのパラメーターの値は、プロトコル チェーン全体を最適に特徴付ける属性と識別子を反映するように選択する必要があります。 これらの値を選択する場合、開発者は、プロトコル チェーン経由の通信は、両方のエンドポイントに互換性のあるプロトコル チェーンがインストールされている場合にのみ発生し、アプリケーションが対応する WSAPROTOCOL_INFO 構造を認識できる必要があることに注意する必要があります。
ベース プロトコルがインストールされている場合、 ProtocolChain.ChainEntries 配列にエントリを作成する必要はありません。 このチェーンの唯一のコンポーネントは、同じWSAPROTOCOL_INFO構造の CatalogEntryID パラメーターで既に識別されていることが暗黙的 に 理解されています。 また、プロトコル チェーンには、同じ階層化されたプロトコルの複数のインスタンスが含まれていない場合があることにも注意してください。