Выполнение управляющих операций с клиентским объектом
После успешного подключения приложения ядра Winsock (WSK) к подсистеме WSK оно может выполнять управляющие операции с клиентским объектом ( WSK_CLIENT), который был возвращен подсистемой WSK во время вложения. Эти операции управления не относятся к конкретному сокету, а имеют более общие область. Дополнительные сведения о каждой из операций управления, которые могут выполняться с клиентским объектом, см. в разделе Операции управления клиентом WSK.
Приложение WSK выполняет операции управления клиентом, вызывая функцию WskControlClient . На функцию WskControlClient указывает элемент WskControlClientструктуры WSK_PROVIDER_DISPATCH , возвращенный подсистемой WSK во время вложения.
В следующем примере кода показано, как приложение 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;
}