Executando operações de controle em um objeto cliente

Depois que um aplicativo WSK (Winsock Kernel) tiver sido anexado com êxito ao subsistema WSK, ele poderá executar operações de controle no objeto cliente ( WSK_CLIENT) que foi retornado pelo subsistema WSK durante o anexo. Essas operações de controle não são específicas para um soquete específico, mas têm um escopo mais geral. Para obter mais informações sobre cada uma das operações de controle que podem ser executadas em um objeto cliente, consulte Operações de controle de cliente do WSK.

Um aplicativo WSK executa operações de controle do cliente chamando a função WskControlClient . A função WskControlClient é apontada pelo membro WskControlClient da estrutura WSK_PROVIDER_DISPATCH que foi retornada pelo subsistema WSK durante o anexo.

O exemplo de código a seguir mostra como um aplicativo WSK pode usar a operação de controle do cliente WSK_TRANSPORT_LIST_QUERY para recuperar uma lista de transportes de rede disponíveis que podem ser especificados ao criar um soquete.

// 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;
}