クライアント オブジェクトの制御操作の実行
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;
}