共用方式為


ACX IO 要求封包 IRP

本主題提供音訊類別 eXtensions (ACX) IO 要求封包 IRP 的摘要。

如需 ACX 的一般資訊,請參閱 ACX 音訊類別延伸模組概觀ACX 物件的摘要。 如需 ACX 目標和同步處理的相關信息,請參閱 ACX 目標和驅動程式同步處理

IRP 要求分派

ACX 用戶端會透過驅動程式要求 (IRP) 指定動作。 如需 IRP 的一般資訊, 請參閱 I/O 要求封 包和 具有可重複使用 IRP 的封包驅動 I/O。

用戶端會使用線路或數據流句柄,將此要求傳送至線路/針腳/元素/數據流。 要求標識碼是三重:

  • set (guid),
  • id/index (ulong)
  • 選用 pin-id/node-id (ulong) 值。

在建立時,驅動程式可以選擇性地將屬性/方法/事件與下列其中一個對象產生關聯:

  • pin
  • 線路
  • stream
  • 項目

每個屬性/方法/事件都是由標識符和回呼處理程式來識別。 根據預設,ACX 會定義 KS-clients(使用者模式層)所需的所有屬性/方法/事件,因此驅動程式不需要重新定義它們。 驅動程式只需要定義其自定義屬性/方法/事件。

當 ACX 收到 ACX/KS 樣式 IoCtrl 要求時,它會驗證要求,並將呼叫端的緩衝區鎖定在記憶體中。 此驗證和緩衝區鎖定是在 ACX 在初始化時註冊的 WDM 前置進程回呼中完成。 在此階段中,ACX 會將自己的完成回呼新增至 WDM IRP,再將它轉送回 WDF 以進行一般分派。 完成回呼讓 ACX 有機會視需要新增/插入任何相容性因應措施。

接下來的 WDF 會叫用動態分派 IRP 回呼,在此回呼 ACX/驅動程式中,選擇性地將 WDF 佇列與要求產生關聯。 在此回呼中,ACX 會找出目標 ACX 物件:使用傳送此要求的句柄,以及要求內的選擇性 pin-id/node-id/circuit-element。

在音訊複合裝置中,目標物件(僅限線路)可能位於與原本傳送要求之堆疊不同的堆疊上。 此外,要求可能需要對多個堆疊採取行動,例如,這是數據流變更狀態。

識別目標之後,ACX 會檢查目標線路/stream-object 是否指定默認處理佇列的覆寫,如果不是,ACX 會使用與目前句柄相關聯的預設佇列。 ACX/驅動程序接著會指示 WDF 將要求插入指定的 或預設佇列中。

下一個 WDF 會在出現時叫用呼叫端進程回呼。 ACX 不需要/使用呼叫端進程回呼,因為它已在前置進程回呼中鎖定記憶體中的緩衝區。 因此,ACX 會通知 WDF 在指定要求的目標佇列之後,不要叫用同進程回呼。

次要佇列使用量

默認 ACX 佇列是電源管理的序列、無鎖定佇列。 驅動程式應該將任何不定時間的要求移至次要佇列。 驅動程式受控佇列可以是手動被動佇列,驅動程式可以保留這些要求,直到稍後準備好完成這些要求為止。

電源參考要求

ACX 會在將要求分派給驅動程式之前自動啟動裝置。 這會使用 WDF 電源受控佇列以隱含方式完成。 這會建立類似 portcls 的行為。 也就是說,在分派要求之前,會先取得電源參考。

叫用佇列的分派處理程式

接下來 WDF 會取得電源參考,並叫用佇列的分派處理程式。 與 ACX 處理程式相關聯的預設佇列會檢查是否有任何前置進程覆寫,如果存在,ACX 會叫用已註冊驅動程式的前置進程回呼。 ACX 可讓驅動程式根據要求類型(屬性、事件和方法)和(選擇性地)要求標識符來指定覆寫。

如果指定了前置進程回呼,在 ACX 叫用回呼之後,驅動程式就會擁有要求。 驅動程式可以完成要求,或將它轉送回 ACX 以進行一般分派。

如果未指定前置進程回呼,或驅動程式將要求傳回給 ACX,ACX 會擷取目標 ACX 物件,並找出宣告的屬性/事件/方法回呼。 然後,它會叫用回呼,以傳遞 WDF 要求和目標 ACX 物件(circuit/stream/circuit-element)。

下一個 ACX (或針對自定義屬性,驅動程式)會執行要求的動作並完成要求,或如果要求需要不確定的時間量,驅動程式可以將要求移至次要佇列。 驅動程序負責串行化和完成任何作用中的擱置要求。

此圖說明一般要求分派工作流程。

圖表說明使用音訊服務、WDF、ACX 和驅動程式的分派工作流程。

此圖表說明當驅動程式已定義 ACX 前置處理回呼時分派工作流程,不過最終要求是由 ACX 架構處理。

圖表說明使用音訊服務、WDF、ACX 和具有前置處理回呼的驅動程式分派工作流程。

ACX 線路 PnP 內部介面

為了協助 ACX 連接點管理員 (EM) 與 ACX 驅動程式元件(內核模式或使用者模式元件)之間的通訊,ACX 會定義下列內部 PnP 裝置介面:

  • ACXCATEGORY_CIRCUITFACTORY
  • ACXCATEGORY_CIRCUIT

EM 會使用 ACXCATEGORY_CIRCUITFACTORY 介面,指示目標裝置建立或移除此類型的特定線路。 當底線裝置能夠建立線路時,此介面為作用中,否則會停用(例如:移除、意外移除、停止或手動移除)。

音訊子系統會使用ACXCATEGORY_CIRCUIT(這可以在與線路管理員堆疊不同的裝置堆疊上建立),來追蹤和與 ACX 線路通訊。 建立線路並準備好處理命令時,此介面會處於作用中狀態。

如需其他電源和 PnP 程式的相關信息,請參閱 ACX 裝置列舉ACX 電源管理

另請參閱

ACX 音訊類別擴充功能概觀

ACX 參考檔

ACX 對象的摘要

ACX 版本資訊

ACX 多堆疊跨驅動程序通訊