Escribir un controlador de cliente del Administrador de directivas de tipo C usb

El Administrador de directivas usb type-C proporcionado por Microsoft supervisa las actividades de los conectores USB type-C. Windows, versión 1809, presenta un conjunto de interfaces de programación que puede usar para escribir un controlador cliente en Policy Manager (denominado controlador de cliente PM en este tema). El controlador cliente puede participar en las decisiones de directiva para los conectores USB type-C. Con este conjunto, puede elegir escribir un controlador de exportación en modo kernel o un controlador en modo de usuario.

El Administrador de directivas obtiene y coordina la información del Administrador de conectores USB (UCM), el controlador de host USB y la función USB, y el controlador cliente PM. Cuando se requiere una notificación de interfaz de usuario, el Administrador de directivas envía la solicitud al Shell del sistema.

Diagrama de bloques architechtural para USB Policy Manager.

Para obtener una vista completa de los controladores, vea Arquitectura: diseño usb de tipo C para un sistema Windows.

API importantes

Las API pm se declaran en el encabezado Usbpmapi.h .

1: Registro de cliente

  1. El controlador cliente llama a UsbPm_Register para registrar las funciones de devolución de llamada del controlador.
  2. El controlador cliente espera un evento del Administrador de directivas.

    Una llamada UsbPm_Register correcta no garantiza que el controlador cliente haya solicitado acceso. Cuando el Administrador de directivas está listo, el EVT_USBPM_EVENT_CALLBACK del controlador se invoca con PolicyManagerArrival como los datos del evento que indican el acceso real concedido.

  3. La llamada UsbPm_Register devuelve el identificador de registro.

    El controlador cliente puede recibir EVT_USBPM_EVENT_CALLBACK incluso antes de que UsbPm_Register devuelva.

2: Llegada del concentrador

  1. Cuando llega un dispositivo UCMCX, se notifica al administrador de POlicy y se realiza un seguimiento de todos los identificadores del concentrador junto con las propiedades y los estados de todos los conectores de cada concentrador.
  2. El EVT_USBPM_EVENT_CALLBACK del controlador cliente se invoca con HubArrivalRemoval como los datos del evento. La llamada también contiene los identificadores del concentrador.
  3. En la implementación del controlador cliente de EVT_USBPM_EVENT_CALLBACK, el controlador llama a UsbPm_RetrieveHubProperties para obtener el número de conectores en el centro y, a continuación, llama a UsbPm_RetrieveConnectorProperties y UsbPm_RetrieveConnectorState para obtener más información sobre cada conector.

3: Cambio de estado del conector

  1. Debido a un cambio de estado del conector, por ejemplo, la asociación o desasociación de Type-C, el contrato pd negociado, Policy Manager actualiza la información de estado por conector.
  2. El EVT_USBPM_EVENT_CALLBACK del controlador cliente se invoca con ConnectorStateChange como datos del evento. La llamada también contiene los identificadores del conector.
  3. También se llama a la rutina de finalización del controlador cliente y toma medidas en consecuencia.
  4. En la implementación del controlador cliente de EVT_USBPM_EVENT_CALLBACK, el controlador llama a UsbPm_RetrieveConnectorProperties. Mediante el identificador de conector especificado, el controlador obtiene el estado del conector más reciente, lo inspecciona y puede decidir actualizar su copia local.

4: Cambio iniciado por el controlador de cliente

  1. Para solicitar un cambio, el controlador cliente llama a UsbPm_AssignConnectorPowerLevel.

    El controlador cliente puede llamar a esta función dentro de la devolución de llamada de EVT_USBPM_EVENT_CALLBACK registrada mediante UsbPm_Register.

  2. El Administrador de directivas reenvía la solicitud al Administrador de conectores USB (UCM). El controlador cliente para UcmCx realiza la acción adecuada para cambiar el estado solicitado.

  3. El EVT_USBPM_EVENT_CALLBACK del controlador cliente se invoca con ConnectorStateChange como datos del evento. La llamada también contiene el identificador del conector.

  4. También se llama a la rutina de finalización del controlador cliente y toma medidas en consecuencia.

  5. Dentro de la devolución de llamada, el controlador de cliente llama a UsbPm_RetrieveConnectorState con el identificador de conector especificado para obtener el estado del conector más reciente, lo inspecciona y puede decidir actualizar su copia local.

5: Eliminación del concentrador

  1. UCM notifica al Administrador de directivas cuando se quita un dispositivo UcmCx (no un conector individual en un dispositivo UcmCx). El Administrador de directivas quita el centro de su colección de concentradores.
  2. La implementación de EVT_USBPM_EVENT_CALLBACK del controlador cliente se invoca con HubRemoval como datos del evento. La llamada también contiene el identificador del concentrador.
  3. En la implementación del controlador cliente de EVT_USBPM_EVENT_CALLBACK, el controlador cliente realiza tareas de limpieza para el concentrador y los conectores que se quitan. El controlador puede llamar a UsbPm_RetrieveHubProperties y UsbPm_RetrieveConnectorProperties para obtener las propiedades del concentrador y los conectores.

6: Desregistración de cliente

  1. El controlador cliente llama a UsbPm_Deregister cuando el controlador ya no necesita ninguna notificación.
  2. El Administrador de directivas marca el registro del controlador de cliente como anulado y no invoca EVT_USBPM_EVENT_CALLBACK devolución de llamada.

Consulte también