次の方法で共有


SAN サービス プロバイダーの初期化

Windows ソケット スイッチは、次の図に示すように SAN サービス プロバイダーを初期化します。

Diagram illustrating how the windows sockets switch initializes a SAN service provider.

Windows が Windows ソケット スイッチ DLL をアプリケーションのプロセスに読み込んだ後、次の一連のイベントが発生します。

SAN サービス プロバイダーを初期化するには

  1. 「SAN サービス プロバイダーのインストール」に記載の通り、スイッチは、TCP/IP プロバイダーを検出して読み込んだ後、レジストリ内の SAN サービス プロバイダーの一覧を照会して、これらのプロバイダーをすべて検出します。 スイッチは、検出された各プロバイダーの WSPStartupEx 関数を呼び出して、そのプロバイダーの使用を開始します。

  2. WSPStartupEx の呼び出しでは、スイッチは TCP/IP プロバイダーのプロトコル情報を含む WSAPROTOCOL_INFOW 構造体へのポインターを渡します。 TCP/IP プロバイダーのプロトコルは、他の階層化されたサービス プロバイダーまたは Windows ソケット インターフェイスではなく、スイッチによって初期化されたことを SAN サービス プロバイダーに示します。 スイッチは、Microsoft Windows SDK ドキュメントの「Windows ソケット サービス プロバイダー インターフェイス (SPI)」セクションで推奨されているように、SAN サービス プロバイダーのトランスポート情報ではなく、TCP/IP プロバイダーのプロトコル情報を渡します。

    SAN サービス プロバイダーは、スイッチによって初期化されていることを検出できるため、適切なエントリ ポイント関数のセットをスイッチに公開できます。 SAN サービス プロバイダーがアプリケーションによって直接初期化されている場合は、別のエントリ ポイント関数のセットをそのアプリケーションに公開できます。 SAN サービス プロバイダーがスイッチの下に階層化されている場合、そのプロバイダーは、このセクションで説明する拡張機能と動作に従う必要があります。

  3. SAN サービス プロバイダーのプロキシ ドライバーは、「SAN NIC 通知の登録」の説明に従って、各 NIC に割り当てられている IP アドレスの一覧を制御下で取得します。 SAN サービス プロバイダーは、プライベート インターフェイスを使用して、プロキシ ドライバーからこの一覧を取得します。 スイッチは、SAN サービス プロバイダーの WSPSocket 関数を呼び出してソケットを作成します。 スイッチはこのソケットを使用して、SAN サービス プロバイダーのプロキシ ドライバーの制御下にある NIC に割り当てられている IP アドレスの完全な一覧を取得します。 スイッチは、「NIC アドレスの受信と変換」の説明に従って、この一覧を取得します。 このリストと他の SAN サービス プロバイダーの一覧に基づいて、スイッチはローカル IP サブネットを SAN サービス プロバイダーにマッピングするテーブルを構築します。

  4. Windows ソケット スイッチは、SAN で使用するために Windows ソケット サービス プロバイダー インターフェイス (SPI) を拡張する SAN サービス プロバイダーのエントリ ポイント関数へのポインターを取得する必要があります。 これらの各拡張関数を取得するために、Windows ソケット スイッチは SAN サービス プロバイダーの WSPIoctl 関数を呼び出し、SIO_GET_EXTENSION_FUNCTION_POINTER コマンド コードと、値でこれらの拡張関数のいずれか 1 つを識別する GUID を渡します。

    これらの関数の全詳細については、「SAN 用 Windows ソケット SPI 拡張機能」を参照してください。

  5. スイッチは、「SAN 接続のセットアップ」の説明に従って、リスニング ソケットと非ブロッキング接続要求をサポートするスレッドを作成できます。