Escrever um driver de cliente do Gerenciador de Políticas tipo C USB

O Gerenciador de Políticas de Tipo C USB fornecido pela Microsoft monitora as atividades dos conectores USB Tipo C. O Windows, versão 1809, apresenta um conjunto de interfaces de programação que você pode usar para gravar um driver de cliente no Gerenciador de Políticas (chamado de driver de cliente PM neste tópico). O driver cliente pode participar das decisões de política para conectores USB Tipo C. Com esse conjunto, você pode optar por escrever um driver de exportação no modo kernel ou um driver de modo de usuário.

O Gerenciador de Políticas obtém e coordena as informações do UCM (Gerenciador de Conectores USB), do controlador de host USB e da função USB e do driver do cliente PM. Quando a notificação da interface do usuário é necessária, o Gerenciador de Políticas envia a solicitação para o Shell do sistema.

Diagrama de blocos architechtural para o Gerenciador de Políticas USB.

Para obter uma visão completa dos drivers, consulte Arquitetura: design usb tipo C para um sistema Windows.

APIs importantes

As APIs pm são declaradas no cabeçalho Usbpmapi.h .

1: Registro do cliente

  1. O driver cliente chama UsbPm_Register para registrar as funções de retorno de chamada do driver.
  2. O driver do cliente aguarda um evento do Gerenciador de Políticas.

    Uma chamada de UsbPm_Register bem-sucedida não garante que o driver cliente solicitou acesso. Quando o Gerenciador de Políticas estiver pronto, o EVT_USBPM_EVENT_CALLBACK do driver será invocado com PolicyManagerArrival como os dados de evento que indicam o acesso real concedido.

  3. A chamada UsbPm_Register retorna o identificador de registro.

    O driver do cliente pode receber EVT_USBPM_EVENT_CALLBACK mesmo antes de UsbPm_Register retornar.

2: Chegada do hub

  1. Quando um dispositivo UCMCX chega, o Gerenciador de POlicy é notificado e mantém o controle de todos os identificadores de hub, juntamente com propriedades e estados de todos os conectores em cada hub.
  2. O EVT_USBPM_EVENT_CALLBACK do driver cliente é invocado com HubArrivalRemoval como os dados do evento. A chamada também contém os identificadores de hub.
  3. Na implementação de EVT_USBPM_EVENT_CALLBACK do driver cliente, o driver chama UsbPm_RetrieveHubProperties para obter o número de conectores no hub e, em seguida, chama UsbPm_RetrieveConnectorProperties e UsbPm_RetrieveConnectorState para obter mais informações sobre cada conector.

3: Alteração de estado do conector

  1. Devido a uma alteração de estado do conector, por exemplo, anexação/desanexação do Tipo C, contrato PD negociado, o Gerenciador de Políticas atualiza as informações de estado por conector.
  2. O EVT_USBPM_EVENT_CALLBACK do driver cliente é invocado com ConnectorStateChange como os dados do evento. A chamada também contém os identificadores do conector.
  3. A rotina de conclusão do driver cliente também é chamada e executa uma ação adequadamente.
  4. Na implementação de EVT_USBPM_EVENT_CALLBACK do driver cliente, o driver chama UsbPm_RetrieveConnectorProperties. Usando o identificador do conector especificado, o driver obtém o estado mais recente do conector, inspeciona-o e pode decidir atualizar sua cópia local.

4: Alteração iniciada pelo driver do cliente

  1. Para solicitar uma alteração, o driver do cliente chama UsbPm_AssignConnectorPowerLevel.

    O driver cliente pode chamar essa função no EVT_USBPM_EVENT_CALLBACK retorno de chamada registrado usando UsbPm_Register.

  2. O Gerenciador de Políticas encaminha a solicitação para o UCM (Gerenciador de Conectores USB). O driver do cliente para UcmCx executa a ação apropriada para alterar o estado solicitado.

  3. O EVT_USBPM_EVENT_CALLBACK do driver cliente é invocado com ConnectorStateChange como os dados do evento. A chamada também contém o identificador do conector.

  4. A rotina de conclusão do driver cliente também é chamada e executa uma ação adequadamente.

  5. Dentro do retorno de chamada, o driver cliente chama UsbPm_RetrieveConnectorState com o identificador do conector fornecido para obter o estado mais recente do conector, inspeciona-o e pode decidir atualizar sua cópia local.

5: Remoção de hub

  1. O UCM notifica o Gerenciador de Políticas quando um dispositivo UcmCx (não um conector individual em um dispositivo UcmCx) é removido. O Gerenciador de Políticas remove o hub de sua coleção de hubs.
  2. A implementação de EVT_USBPM_EVENT_CALLBACK do driver cliente é invocada com HubRemoval como os dados do evento. A chamada também contém o identificador do hub.
  3. Na implementação de EVT_USBPM_EVENT_CALLBACK do driver cliente, o driver cliente executa tarefas limpo para o hub e conectores que estão sendo removidos. O driver pode chamar UsbPm_RetrieveHubProperties e UsbPm_RetrieveConnectorProperties para obter as propriedades do hub e dos conectores.

6: Desregistração do cliente

  1. O driver cliente chama UsbPm_Deregister quando o driver não precisa mais de notificações.
  2. O Gerenciador de Políticas marca o registro do identificador do cliente como desregistrado e não invoca EVT_USBPM_EVENT_CALLBACK retorno de chamada.

Consulte Também