TDI トランスポートの使用

Winsock カーネル (WSK) サブシステムは、TDI トランスポートの使用をサポートします。 WSK アプリケーションで WSK ネットワーク プログラミング インターフェイス (NPI) を介して TDI トランスポートを使用するには、使用する各 TDI トランスポートのアドレス ファミリー、ソケットの種類、プロトコルの組み合わせを、それらの各 TDI トランスポートの関連付けられたデバイス名にマップする必要があります。 WSK アプリケーションは、WSK_TDI_DEVICENAME_MAPPING クライアント制御操作を使用して、アドレス ファミリー、ソケットの種類、プロトコルの組み合わせを TDI トランスポートのデバイス名にマップします。

次のコード例は、WSK アプリケーションがアドレス ファミリー、ソケットの種類、プロトコルの組み合わせを TDI トランスポートのデバイス名にマップする方法を示しています。

// Number of TDI mappings
#define MAPCOUNT 2

// Array of TDI mappings
const WSK_TDI_MAP TdiMap[MAPCOUNT] =
{
  {SOCK_STREAM, ..., ..., ...},
  {SOCK_DGRAM, ..., ..., ...}
};

// TDI map info structure
const WSK_TDI_MAP_INFO TdiMapInfo =
{
  MAPCOUNT,
  TdiMap
}

// Function to set the TDI map
NTSTATUS
  SetTdiMap(
    PWSK_APP_BINDING_CONTEXT BindingContext
  )
{
  NTSTATUS Status;

  // Perform client control operation
  Status =
    BindingContext->
      WskProviderDispatch->
        WskControlClient(
          BindingContext->WskClient,
          WSK_TDI_DEVICENAME_MAPPING,
          sizeof(WSK_TDI_MAP_INFO),
          &TdiMapInfo,
          0,
          NULL,
          NULL,
          NULL  // No IRP for this control operation
          );

  // Return status of client control operation
  return Status;
}

WSK アプリケーションでは、ソケットを作成する前に、アドレス ファミリー、ソケットの種類、プロトコルの組み合わせを TDI トランスポートのデバイス名にマップする必要があります。 WSK アプリケーションは、アドレス ファミリー、ソケットの種類、プロトコルの組み合わせを TDI トランスポートのデバイス名に正常にマップした後、マップされた TDI トランスポートを使用する新しいソケットを作成できます。

注: TDI は Windows Vista より後の Microsoft Windows バージョンでサポートされません。 代わりに、Windows フィルタリング プラットフォームWinsock カーネルを使用してください。