本主題提供音訊類別 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 佇列的物件呈現鎖定。
- 即插即用和電源回調的自動序列化。
如需同步處理和序列化的深入描述,請參閱 使用自動同步處理。 如需更完整的說明,請參閱 Microsoft Press 出版的《使用 Windows 驅動程式基礎建設開發驅動程式》一書。
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 請求使用不同的鎖定。