Schreiben eines USB Typ-C Policy Manager-Clienttreibers

Der von Microsoft bereitgestellte USB-Typ-C-Richtlinien-Manager überwacht die Aktivitäten von USB-Typ-C-Anschlüssen. Windows, Version 1809, führt eine Reihe von Programmierschnittstellen ein, mit denen Sie einen Clienttreiber in Policy Manager schreiben können (in diesem Thema als PM-Clienttreiber bezeichnet). Der Clienttreiber kann an den Richtlinienentscheidungen für USB-Typ-C-Connectors teilnehmen. Mit diesem Satz können Sie einen Kernelmodus-Exporttreiber oder einen Benutzermodustreiber schreiben.

Der Richtlinien-Manager ruft die Informationen aus dem USB-Connector-Manager (UCM), dem USB-Hostcontroller und der USB-Funktion sowie vom PM-Clienttreiber ab und koordiniert diese. Wenn ui-Benachrichtigungen erforderlich sind, sendet der Richtlinien-Manager die Anforderung an die Systemshell.

Architekturblockdiagramm für DEN USB-Richtlinien-Manager.

Eine vollständige Ansicht der Treiber finden Sie unter Architektur: USB-Typ-C-Entwurf für ein Windows-System.

Wichtige APIs

Die PM-APIs werden im Usbpmapi.h-Header deklariert.

1: Clientregistrierung

  1. Der Clienttreiber ruft UsbPm_Register auf, um die Rückruffunktionen des Treibers zu registrieren.
  2. Der Clienttreiber wartet auf ein Ereignis aus dem Richtlinien-Manager.

    Ein erfolgreicher UsbPm_Register Anruf garantiert nicht, dass der Clienttreiber Zugriff angefordert hat. Wenn der Richtlinien-Manager bereit ist, wird der EVT_USBPM_EVENT_CALLBACK des Treibers mit PolicyManagerArrival als Ereignisdaten aufgerufen, die den tatsächlich gewährten Zugriff angeben.

  3. Der UsbPm_Register-Aufruf gibt das Registrierungshandle zurück.

    Der Clienttreiber erhält möglicherweise EVT_USBPM_EVENT_CALLBACK , bevor UsbPm_Register zurückgibt.

2: Hub Ankunft

  1. Wenn ein UCMCX-Gerät eintrifft, wird der POlicy Manager benachrichtigt und verfolgt alle Hubhandles sowie die Eigenschaften und Zustände aller Connectors auf jedem Hub nach.
  2. Die EVT_USBPM_EVENT_CALLBACK des Clienttreibers wird mit HubArrivalRemoval als Ereignisdaten aufgerufen. Der Aufruf enthält auch die Hubhandles.
  3. In der Implementierung von EVT_USBPM_EVENT_CALLBACK des Clienttreibers ruft der Treiber UsbPm_RetrieveHubProperties auf, um die Anzahl der Connectors auf dem Hub abzurufen, und ruft dann UsbPm_RetrieveConnectorProperties und UsbPm_RetrieveConnectorState auf, um weitere Informationen zu den einzelnen Connectors zu erhalten.

3: Connectorstatusänderung

  1. Aufgrund einer Änderung des Connectorstatus, z. B. Anfügen/Trennen von Typ-C, ausgehandelter PD-Vertrag, aktualisiert Policy Manager die Statusinformationen pro Connector.
  2. Die EVT_USBPM_EVENT_CALLBACK des Clienttreibers wird mit ConnectorStateChange als Ereignisdaten aufgerufen. Der Aufruf enthält auch die Connectorhandles.
  3. Die Vervollständigungsroutine des Clienttreibers wird ebenfalls aufgerufen und ergreift entsprechende Maßnahmen.
  4. Bei der Implementierung von EVT_USBPM_EVENT_CALLBACK durch den Clienttreiber ruft der Treiber UsbPm_RetrieveConnectorProperties auf. Mithilfe des angegebenen Connectorhandles erhält der Treiber den aktuellen Connectorstatus, überprüft ihn und entscheidet möglicherweise, seine lokale Kopie zu aktualisieren.

4: Vom Clienttreiber initiierte Änderung

  1. Um eine Änderung anzufordern, ruft der Clienttreiber UsbPm_AssignConnectorPowerLevel auf.

    Der Clienttreiber kann diese Funktion innerhalb des mit UsbPm_Register registrierten EVT_USBPM_EVENT_CALLBACK-Rückrufs aufrufen.

  2. Der Richtlinien-Manager leitet die Anforderung an usb Connector Manager (UCM) weiter. Der Clienttreiber für UcmCx führt die entsprechende Aktion aus, um den angeforderten Zustand zu ändern.

  3. Die EVT_USBPM_EVENT_CALLBACK des Clienttreibers wird mit ConnectorStateChange als Ereignisdaten aufgerufen. Der Aufruf enthält auch das Connectorhandle.

  4. Die Vervollständigungsroutine des Clienttreibers wird ebenfalls aufgerufen und ergreift entsprechende Maßnahmen.

  5. Innerhalb des Rückrufs ruft der Clienttreiber UsbPm_RetrieveConnectorState mit dem angegebenen Connectorhandle auf, um den aktuellen Connectorstatus abzurufen, überprüft ihn und entscheidet möglicherweise, seine lokale Kopie zu aktualisieren.

5: Hubentfernung

  1. UCM benachrichtigt den Richtlinien-Manager, wenn ein UcmCx-Gerät (kein einzelner Connector auf einem UcmCx-Gerät) entfernt wird. Der Richtlinien-Manager entfernt den Hub aus seiner Hubsammlung.
  2. Die EVT_USBPM_EVENT_CALLBACK Implementierung des Clienttreibers wird mit HubRemoval als Ereignisdaten aufgerufen. Der Aufruf enthält auch das Hubhandle.
  3. Bei der Implementierung von EVT_USBPM_EVENT_CALLBACK des Clienttreibers führt der Clienttreiber sauber Aufgaben für den Hub und die zu entfernenden Connectors aus. Der Treiber kann UsbPm_RetrieveHubProperties und UsbPm_RetrieveConnectorProperties aufrufen, um die Eigenschaften von Hub und Connectors abzurufen.

6: Clientabmeldung

  1. Der Clienttreiber ruft UsbPm_Deregister auf, wenn der Treiber keine Benachrichtigungen mehr benötigt.
  2. Der Richtlinien-Manager kennzeichnet die Clienthandleregistrierung als aufgehoben und ruft EVT_USBPM_EVENT_CALLBACK Rückruf nicht auf.

Weitere Informationen