Поделиться через


Выполнение управляющих операций с клиентским объектом

После успешного подключения приложения ядра 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;
}