Share via


ACX 裝置列舉

本主題討論 ACX 裝置列舉、啟動和關機,以及裝置重新平衡。 如需 ACX 的一般概觀,請參閱 ACX 音訊類別延伸模組概觀。 如需 ACX 電源管理和 PnP 的相關信息,請參閱 ACX 電源管理

靜態音訊裝置的 ACX 裝置列舉和啟動

若要瞭解 ACX 啟動的運作方式,將會說明下列案例。

  • 音訊裝置是由單一線路表示。
  • 音訊/線路存留期會系結至 PnP 裝置存留期。
  • 單一裝置可以針對不同的音訊裝置建立多個線路。
  • KMDF 核心模式環境。

啟動順序為:

ACX 數據流新增

  • ACX 線路上的 ACX 串流新增 (實例) (ACX 線路上的 ACX 回呼) – 在叫用 WDF 自我管理 I/O Init 或重新啟動之後,隨時叫用,且裝置位於 D0 中。 線路範圍。
    • 輸入:AcxStreamInit 內容、ACXCIRCUIT。
    • 新增回呼。
    • 建立 AcxStream (實例)。
    • 選擇性地執行任何後置數據流實例 init。
    • 在傳回時,ACX 會啟動此串流實例,而且在此案例中是唯一的音訊路徑,因此它允許串流訊息通過。

動態音訊裝置的 ACX 裝置列舉和啟動

在此案例中,假設有下列情況。

  • 動態音訊支援(在運行時間建立/刪除音訊裝置)。
  • 裝置存留期不會系結至線路存留期。
  • 單一裝置可以針對不同的音訊裝置建立多個線路。
  • 上述簡單靜態模式上的 Piggyback 只會新增動態模式特有的元素。
  • 使用子原始 PDO。
  • KMDF 核心模式環境。

此案例的啟動順序如下:

  • WDM DriverEntry。 驅動程式範圍。

    • Init 追蹤。
    • 選擇性地註冊卸除。
    • 建立 WDFDRIVER。
    • 呼叫 ACX 以執行任何後置驅動程式 init。
    • 選擇性地執行任何後置驅動程式 init。
  • WDF DeviceAdd。 裝置範圍。

    • 呼叫 ACX 以初始化裝置 init 內容。
    • 建立裝置。
    • 呼叫 ACX 以執行任何張貼裝置 init。
    • 選擇性地執行任何張貼裝置 init。
  • WDF PrepareHardware。 裝置範圍。

    • 建立和初始化硬體資源(針對中斷和線程,向 ACX 註冊它們)。
  • WDF 裝置 D0 專案回呼。 裝置範圍。

  • WDF 佇列會重新啟動。

  • WDF DeviceSelfManagedIoInit。 裝置範圍。

  • WDF DeviceSelfManagedIoRestart。 裝置範圍。

    • 每次從 Dx 開機後 Init。

線路動態建立 (隨時)

AcxFactoryCircuit

ACX 驅動程式也可以使用 AcxFactoryCircuit 函式和 AcxDeviceAddFactoryCircuit 函式,在啟動序列期間建立 AcxFactoryCircuit 物件(線路提供者)。

由於 ACX 驅動程式已向 ACX 註冊為線路處理站,因此 ACX 架構會使用已註冊的處理站來要求驅動程式建立新的線路。

AcxFactoryCircuitCreate(Device, &attributes, &factoryInit, &factory);

AcxDeviceAddFactoryCircuit(Device, factory);

ACX 裝置重新平衡

當系統資源使用量需要操作系統在裝置之間重新平衡資源時,就會進行重新平衡。 如需重新平衡的一般資訊,請參閱 實作 PortCls 音訊驅動程式的 PnP 重新平衡。

ACX 支援裝置重新平衡,如下所示:

  • 在關閉電源 WDF/ACX 序列中,驅動程式會釋放所有串流資源(EvtAcxStreamPowerDown、EvtAcxStreamReleaseHardware)、線路資源 (EvtAcxCircuitPowerDown、EvtAcxCircuitReleaseHardware) 和裝置資源 (EvtDeviceReleaseHardware)。

  • 所有要求都會掛號,且句柄會保持開啟狀態。

  • 在啟動 WDF/ACX 序列中,驅動程式可確保新的資源與目前的資源相容,而且會對其設定進行任何允許的調整。 如果資源與目前的裝置/線路初始化不相容,驅動程式必須刪除目前的線路並建立新的線路。 請參閱下方的詳細資訊。

  • 在電源增加序列中,WDF 會叫用其 EvtDevicePrepareHardware 和 EvtDeviceD0 專案,而 ACX 會叫用對應的 EvtAcxCircuitPrepareHardware 和 EvtAcxCircuitPowerUp,並將所有數據流移至其預先存在的狀態。

  • 一旦佇列移至啟動/執行狀態,I/O 流程就會再次流動。

如果有作用中 (RUN) 狀態的數據流,ACX 不允許移除 (失敗查詢移除) 或重新平衡 (查詢停止失敗)。

驅動程式也可以選擇在重新平衡時一律終結和重新建立音訊裝置。 當裝置偵測到新設定與舊設定不相容時,這與上述案例相同。 刪除線路必須在 EvtDevicePrepareHardware/EvtDeviceReleaseHardware 回呼中完成,而且新的線路會在 EvtDevicePrepareHardware 中重新建立。 驅動程式會取消註冊線路來刪除線路(使用 AcxDeviceRemoveCircuit)。

使用者模式檔案句柄

ACX 不會等待使用者模式檔案句柄關閉,再重新建立新的線路。 文件系統句柄的存留期不會繫結至裝置/線路所使用的硬體資源存留期。 客戶端必須負責接聽介面抵達/移除,並關閉並重新開啟檔句柄。

舊檔句柄標示為過時,而 ACX 會失敗與其相關聯的所有 I/O 要求。

另請參閱

ACX 音訊類別擴充功能概觀

ACX 參考檔

PnP 和電源管理回呼序列