Écrire un pilote client USB Type-C Policy Manager

Le Gestionnaire de stratégie USB Type-C fourni par Microsoft surveille les activités des connecteurs USB Type-C. Windows, version 1809, présente un ensemble d’interfaces de programmation que vous pouvez utiliser pour écrire un pilote client dans Policy Manager (appelé pilote client PM dans cette rubrique). Le pilote client peut participer aux décisions de stratégie pour les connecteurs USB Type-C. Avec cet ensemble, vous pouvez choisir d’écrire un pilote d’exportation en mode noyau ou un pilote en mode utilisateur.

Policy Manager obtient et coordonne les informations à partir du gestionnaire de connecteur USB (UCM), du contrôleur hôte USB et de la fonction USB, ainsi que de votre pilote client PM. Lorsque la notification de l’interface utilisateur est requise, Policy Manager envoie la demande à system Shell.

Diagramme de blocs architechtural pour USB Policy Manager.

Pour obtenir une vue complète des pilotes, consultez Architecture : conception USB Type-C pour un système Windows.

API importantes

Les API PM sont déclarées dans l’en-tête Usbpmapi.h .

1 : Inscription du client

  1. Le pilote client appelle UsbPm_Register pour inscrire les fonctions de rappel du pilote.
  2. Le pilote client attend un événement du Gestionnaire de stratégies.

    Un appel de UsbPm_Register réussi ne garantit pas que le pilote client a demandé l’accès. Lorsque le Gestionnaire de stratégies est prêt, le EVT_USBPM_EVENT_CALLBACK du pilote est appelé avec PolicyManagerArrival comme données d’événement qui indiquent l’accès réel accordé.

  3. L’appel UsbPm_Register retourne le handle d’inscription.

    Le pilote client peut recevoir EVT_USBPM_EVENT_CALLBACK avant même UsbPm_Register retours.

2 : Arrivée du hub

  1. Lorsqu’un appareil UCMCX arrive, POlicy Manager est averti et effectue le suivi de tous les descripteurs de hub, ainsi que des propriétés et des états de tous les connecteurs sur chaque hub.
  2. Le EVT_USBPM_EVENT_CALLBACK du pilote client est appelé avec HubArrivalRemoval comme données d’événement. L’appel contient également les descripteurs de hub.
  3. Dans l’implémentation du pilote client de EVT_USBPM_EVENT_CALLBACK, le pilote appelle UsbPm_RetrieveHubProperties pour obtenir le nombre de connecteurs sur le hub, puis appelle UsbPm_RetrieveConnectorProperties et UsbPm_RetrieveConnectorState pour obtenir plus d’informations sur chaque connecteur.

3 : Modification de l’état du connecteur

  1. En raison d’un changement d’état du connecteur, par exemple, attachement/détachement de type C, contrat PD négocié, Policy Manager met à jour les informations d’état par connecteur.
  2. Le EVT_USBPM_EVENT_CALLBACK du pilote client est appelé avec ConnectorStateChange comme données d’événement. L’appel contient également les descripteurs de connecteur.
  3. La routine d’achèvement du pilote client est également appelée et prend des mesures en conséquence.
  4. Dans l’implémentation du pilote client de EVT_USBPM_EVENT_CALLBACK, le pilote appelle UsbPm_RetrieveConnectorProperties. En utilisant le handle de connecteur donné, le pilote obtient le dernier état du connecteur, l’inspecte et peut décider de mettre à jour sa copie locale.

4 : Modification initiée par le pilote client

  1. Pour demander une modification, le pilote client appelle UsbPm_AssignConnectorPowerLevel.

    Le pilote client peut appeler cette fonction dans le EVT_USBPM_EVENT_CALLBACK rappel inscrit à l’aide de UsbPm_Register.

  2. Policy Manager transfère la requête au Gestionnaire de connecteurs USB (UCM). Le pilote client pour UcmCx prend l’action appropriée pour modifier l’état demandé.

  3. Le EVT_USBPM_EVENT_CALLBACK du pilote client est appelé avec ConnectorStateChange comme données d’événement. L’appel contient également le handle du connecteur.

  4. La routine d’achèvement du pilote client est également appelée et prend des mesures en conséquence.

  5. Dans le rappel, le pilote client appelle UsbPm_RetrieveConnectorState avec le handle de connecteur donné pour obtenir le dernier état du connecteur, l’inspecte et peut décider de mettre à jour sa copie locale.

5 : Suppression du hub

  1. UCM avertit policy Manager lorsqu’un appareil UcmCx (et non un connecteur individuel sur un appareil UcmCx) est supprimé. Policy Manager supprime le hub de sa collection de hubs.
  2. L’implémentation EVT_USBPM_EVENT_CALLBACK du pilote client est appelée avec HubRemoval comme données d’événement. L’appel contient également le handle du hub.
  3. Dans l’implémentation du pilote client de EVT_USBPM_EVENT_CALLBACK, le pilote client effectue des tâches propre pour le hub et les connecteurs supprimés. Le pilote peut appeler UsbPm_RetrieveHubProperties et UsbPm_RetrieveConnectorProperties pour obtenir les propriétés du hub et des connecteurs.

6 : Désinscription du client

  1. Le pilote client appelle UsbPm_Deregister lorsque le pilote n’a plus besoin de notifications.
  2. Le Gestionnaire de stratégies marque l’inscription du handle client comme étant désinscrit et n’appelle pas EVT_USBPM_EVENT_CALLBACK rappel.

Voir aussi