使用 TDI 传输

Winsock 内核 (WSK) 子系统支持使用 TDI 传输。 为了通过 WSK 网络编程接口 (NPI) 使用 TDI 传输,WSK 应用程序必须将它使用的每个 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 传输的新套接字。

注意 Windows Vista 之后的 Microsoft Windows 版本将不支持 TDI。 请改用 Windows 筛选平台Winsock 内核