针对客户端对象执行控制操作

Winsock 内核 (WSK) 应用程序成功附加到 WSK 子系统后,它可以对客户端对象执行控制操作, ( WSK_CLIENT WSK 子系统在附件期间返回的) 。 这些控制操作并非特定于特定套接字,而是具有更通用的范围。 有关可以对客户端对象执行的每个控制操作的详细信息,请参阅 WSK 客户端控制操作

WSK 应用程序通过调用 WskControlClient 函数来执行客户端控制操作。 WskControlClient 函数由 WSK 子系统在附件期间返回的 WSK_PROVIDER_DISPATCH 结构的 WskControlClient 成员指向。

下面的代码示例演示 WSK 应用程序如何使用 WSK_TRANSPORT_LIST_QUERY 客户端控制操作来检索可在创建新套接字时指定的可用网络传输的列表。

// Function to retrieve a list of available network transports
NTSTATUS
  GetTransportList(
    PWSK_PROVIDER_NPI WskProviderNpi,
    PWSK_TRANSPORT TransportList,
    ULONG MaxTransports,
    PULONG TransportsRetrieved
    )
{
  SIZE_T BytesRetrieved;
  NTSTATUS Status;

  // Perform client control operation
  Status =
    WskProviderNpi->Dispatch->
        WskControlClient(
          WskProviderNpi->Client,
          WSK_TRANSPORT_LIST_QUERY,
          0,
          NULL,
          MaxTransports * sizeof(WSK_TRANSPORT),
          TransportList,
          &BytesRetrieved,
          NULL  // No IRP for this control operation
          );

  // Convert bytes retrieved to transports retrieved
  TransportsRetrieved = BytesRetrieved / sizeof(WSK_TRANSPORT);

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