共用方式為


寫入USB Type-C原則管理員客戶端驅動程式

Microsoft 提供的 USB Type-C 原則管理員會監視 USB Type-C 連接器的活動。 Windows 1809 版引進了一組程式設計介面,可讓您在本主題中將用戶端驅動程式寫入原則管理員, (稱為 PM 用戶端驅動程式) 。 用戶端驅動程式可以參與 USB Type-C 連接器的原則決策。 透過此集合,您可以選擇撰寫內核模式導出驅動程式或使用者模式驅動程式。

原則管理員會從 USB 連接器管理員 (UCM) 、USB 主機控制器和 USB 功能,以及 PM 用戶端驅動程式取得及協調資訊。 需要UI通知時,原則管理員會將要求傳送至系統殼層。

USB 原則管理員的 Architechtural 區塊圖。

如需驅動程式的完整檢視,請參閱 架構:Windows 系統的USB Type-C設計

重要 API

PM API 會在 Usbpmapi.h 標頭中宣告。

1:客戶端註冊

  1. 用戶端驅動程式會 呼叫 UsbPm_Register 來註冊驅動程式的回呼函式。
  2. 用戶端驅動程式會等候原則管理員的事件。

    成功的 UsbPm_Register 呼叫不保證客戶端驅動程式已要求存取權。 當原則管理員就緒時,驅動程式 的EVT_USBPM_EVENT_CALLBACK 會使用 PolicyManagerArrival 叫用,作為指出授與實際存取權的事件數據。

  3. UsbPm_Register呼叫會傳回註冊句柄。

    即使在傳回 UsbPm_Register 之前,客戶端驅動程式仍會收到 EVT_USBPM_EVENT_CALLBACK

2:中樞抵達

  1. 當 UCMCX 裝置送達時,POlicy Manager 會收到通知,並追蹤所有中樞句柄,以及每個中樞上所有連接器的屬性和狀態。
  2. 用戶端驅動程式 的EVT_USBPM_EVENT_CALLBACK 會以 HubArrivalRemoval 作為事件數據叫用。 呼叫也包含中樞句柄。
  3. 在用戶端驅動程式的 EVT_USBPM_EVENT_CALLBACK 實作中,驅動程式會 呼叫 UsbPm_RetrieveHubProperties 以取得中樞上的連接器數目,然後呼叫 UsbPm_RetrieveConnectorPropertiesUsbPm_RetrieveConnectorState ,以取得每個連接器的詳細資訊。

3:連接器狀態變更

  1. 由於連接器狀態變更,例如 Type-C 附加/卸離、PD 合約交涉,原則管理員會更新每個連接器的狀態資訊。
  2. 用戶端驅動程式 的EVT_USBPM_EVENT_CALLBACK 會以 ConnectorStateChange 作為事件數據叫用。 呼叫也包含連接器句柄。
  3. 用戶端驅動程式的完成例程也會被呼叫,並據以採取動作。
  4. 在客戶端驅動程式的 EVT_USBPM_EVENT_CALLBACK 實作中,驅動程式會 呼叫 UsbPm_RetrieveConnectorProperties。 藉由使用指定的連接器句柄,驅動程式會取得最新的連接器狀態、檢查它,並決定更新其本機複本。

4:用戶端驅動程式起始的變更

  1. 若要要求變更,用戶端驅動程式會 呼叫 UsbPm_AssignConnectorPowerLevel

    用戶端驅動程式可以在使用UsbPm_Register 註冊的EVT_USBPM_EVENT_CALLBACK回呼內呼叫此函式。

  2. 原則管理員會將要求轉送至USB連接器管理員, (UCM) 。 適用於UcmCx的客戶端驅動程式會採取適當的動作來變更要求的狀態。

  3. 用戶端驅動程式 的EVT_USBPM_EVENT_CALLBACK 會以 ConnectorStateChange 作為事件數據叫用。 呼叫也包含連接器句柄。

  4. 用戶端驅動程式的完成例程也會被呼叫,並據以採取動作。

  5. 在回呼中,用戶端驅動程式會使用指定的連接器句柄 呼叫UsbPm_RetrieveConnectorState ,以取得最新的連接器狀態、檢查它,並決定更新其本機複本。

5:中樞移除

  1. UCM 會在 UcmCx 裝置 (不是 UcmCx 裝置上的個別連接器) 移除時通知原則管理員。 原則管理員會從中樞集合中移除中樞。
  2. 用戶端驅動程式 的EVT_USBPM_EVENT_CALLBACK 實作會以 HubRemoval 作為事件數據叫用。 呼叫也包含中樞句柄。
  3. 在用戶端驅動程式的 EVT_USBPM_EVENT_CALLBACK 實作中,用戶端驅動程式會針對要移除的中樞和連接器執行清除工作。 驅動程式可以呼叫 UsbPm_RetrieveHubPropertiesUsbPm_RetrieveConnectorProperties ,以取得中樞和連接器的屬性。

6:用戶端取消註冊

  1. 當驅動程式不再需要任何通知時,用戶端驅動程式會 呼叫 UsbPm_Deregister
  2. 原則管理員會將用戶端句柄註冊標示為已取消註冊,而且不會 叫用EVT_USBPM_EVENT_CALLBACK回 呼。

另請參閱