ACX 目標和驅動程式同步處理
本主題提供音訊類別 eXtensions (ACX) 目標和驅動程式同步處理的摘要。
如需 ACX 的一般資訊,請參閱 ACX 音訊類別延伸模組概觀 和 ACX 物件的摘要。 如需 IRP 的相關信息,請參閱 ACX IO 要求封包 IRP。
ACX 目標
ACX 使用 WdfIoTarget 來促進 ACX 對象、線路、針腳、數據流、元素和線路處理站之間的通訊。 WdfIoTarget 是現有的 WDF 抽象概念,可促進兩個不同的堆疊之間的通訊。
驅動程式會使用 AcxTargetCircuit 與不同堆疊公開的遠端線路通訊。 AcxTargetCircuit 是使用 WdfIoTarget 實作。
驅動程式會使用 AcxTargetPin 與不同堆疊公開的遠端線路針腳進行通訊。 AcxTargetPin 是使用 WdfIoTarget 實作,以將訊息傳送至遠端釘選實體。
驅動程式會使用 AcxTargetStream 與不同堆疊公開的遠端線路串流通訊。 AcxTargetStream 是使用 WdfIoTarget 來實作,以建立遠端數據流並變更遠端數據流的狀態。
驅動程式會使用 AcxTargetElement 與不同堆疊所公開的遠端線路項目通訊。 AcxTargetElement 是使用 WdfIoTarget 實作,以將訊息傳送至遠端元素實體。
驅動程式會使用 AcxTargetFactoryCircuit 與遠端線路處理站實例通訊。 AcxTargetFactoryCircuit 是使用 WdfTarget 實作,以將訊息傳送至遠端線路處理站。
為了與遠端線路互動,上述每個 ACX 類型都支援:
- 內容
- 方法
- 活動
所有這些類型都是建置在 WdfIoTarget 物件類型之上。
此圖顯示 ACX 目標架構和 WDF 驅動程式和裝置對象的繼承。
ACX 驅動程式同步處理和串行化
同步處理一詞是一般詞彙,可用來參考多個並行用戶端之間共用資源(記憶體、I/O 等)所需的作業。
串行化一詞可用來參考一種物件類型的同步處理類型(I/O 要求、回呼等)。
ACX 驅動程式是 WDF 驅動程式,這表示 ACX 驅動程式的同步處理是以 WDF 的同步處理功能為基礎:
- 使用參考計數和階層式物件模型。
- I/O 佇列的驅動程式可設定流程控制。
- 裝置物件和 I/O 佇列的物件呈現鎖定。
- 自動串行化 隨插即用和電源回呼。
如需同步處理和串行化的深入描述,請參閱 使用自動同步處理。 如需更完整的說明,請參閱 使用 Windows Driver Foundation 開發驅動程式 Microsoft Press Book。
WDF 支援下列同步處理範圍:
- 沒有範圍(KMDF 中的預設值)。
- 裝置範圍,WDF 會取得裝置對象呈現鎖定以串行化作業。
默認 ACX 佇列是被動的序列佇列,沒有鎖定。 驅動程式必須先完成 I/O 作業,才能傳遞下一個作業。
ACX 不支援佇列範圍選項。 使用此選項,驅動程式會將特定佇列上的 I/O 串行化。 不同的佇列可能會有不同的同步處理範圍。
ACX 不支援裝置範圍串行化。 根據預設,ACX 會使用沒有鎖定的序列 I/O 佇列來串行化要求。 每個線路和數據流物件都有自己的專用佇列。 如需串流 I/O 的詳細資訊,請參閱 ACX 串流主題。
如果驅動程式持有鎖定,在釋放鎖定之前,它絕對不應該在其控件外部呼叫程式代碼(明確或隱含)。
針對歷程記錄參考,原始 PortCls 會使用同步處理範圍,例如 WDF 裝置範圍同步處理,在此裝置上建立的任何音訊子裝置的所有 I/O 都會經歷相同的串行化鎖定。 這種類型的串行化仍然是各種故障的原因。 在更新版本的 Windows 10(版本 1511 - TH2) PortCls 中已更新,以針對數據流位置 I/O 要求使用不同的鎖定。