クライアント オブジェクトの制御操作の実行

Winsock カーネル (WSK) アプリケーションが WSK サブシステムに正常に接続されると、接続時に WSK サブシステムによって返されたクライアント オブジェクト ( WSK_CLIENT) に対して制御操作を実行できます。 これらの制御操作は特定のソケットに固有ではなく、より一般的なものを対象としています。 クライアント オブジェクトに対して実行できる各制御操作の詳細については、「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;
}