共用方式為


ACX 線路

本主題討論 ACX 線路。 如需 ACX 和 ACX 詞彙清單的一般概觀,請參閱 ACX 音訊類別延伸模組概觀

如 ACX 物件的摘要中所述,AcxCircuit 物件代表使用者感知音訊裝置的部分或完整音訊路徑(喇叭、麥克風等)。 AcxCircuit 至少有一個輸入針腳和一個輸出針腳(ACXPIN),而且可能會匯總一或多個 AcxElements,例如物件。 線路代表現有的端點及其功能。

而ACX Stream 是用來代表線路所建立音訊數據流的驅動程式元件。 Stream 是由根據父線路的 Elements 所建立的元素清單所組成。 串流線路是 多堆疊 架構(部分音訊路徑)中的線路,可直接與上層使用者模式串流服務介面。 核心線路是 多堆疊 架構(部分音訊路徑)中的線路,可提供音訊端點裝置的身分識別。

ACX 線路識別

每個 ACX 線路都有線路標識碼。 ACX 定義下列專案:

  • 名稱 (str),可唯一識別此線路音訊裝置類型。 它用來找出 INF 的設定,而且它是用來從遠端裝置存取此線路的符號連結的一部分。 範例:“Render0”、“Render1” 或 “Capture0”。

  • 符號連結。 符號連結會與所有公開的線路相關聯。 用戶端會使用此符號連結來開啟與裝置/線路的通訊路徑。

  • 線路的元件識別碼 (guid)。 唯一識別線路實例(廠商特定)。 如果指定了線路 URI,則無法在 AcxCircuitTemplate 系結中使用。

  • 線路的元件 URI (str)。 唯一識別線路實例(廠商特定)。 如果指定了線路標識碼,則無法在 AcxCircuitTemplate 系結中使用。

  • 線路處理站的元件標識碼 (guid)。 可唯一識別線路處理站實例(廠商特定)。 如果指定了 Circuit Factory URI,則無法在 AcxCircuitTemplate 系結中使用。

  • 線路處理站的元件 URI (str)。 可唯一識別線路處理站實例(廠商特定)。 如果指定了 Circuit Factory 識別符,則無法在 AcxCircuitTemplate 系結中使用。

AcxCircuitCreate

AcxCircuitCreate 式可用來建立 ACXCIRCUIT。 AcxCircuitCreate 函式所使用的不透明ACXCIRCUIT_INIT結構。 AcxCircuitInitAllocate 是用來初始化ACXCIRCUIT_INIT結構。

AcxFactoryCircuit

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

ACX 線路組合

ACX 會將線路系結在一起,直到形成完整的音訊路徑為止。 ACX 會使用音訊系結將音訊線路連接在一起。 如需詳細資訊,請參閱 ACX multicircuit 組合

ACX 線路動態建立 (隨時)

ACX 可以視需要建立動態線路。 若要這樣做,驅動程式會呼叫 WdfPdoInitAllocate 來配置WDFDEVICE_INIT結構。 然後,驅動程式會指定它想要接收並建立裝置的任何 PnP/電源回呼。 驅動程式會呼叫 AcxDeviceAddCircuitDevice 來具現化新的裝置/線路。 如需詳細資訊,請參閱 ACX 裝置列舉

ACX 線路動態移除

驅動程式會叫用 AcxDeviceRemoveCircuitDevice ,以從裝置清單中移除音訊裝置。 這會觸發 ACX 線路裝置/線路實體上的關閉電源順序。 線路裝置/線路會以異步方式刪除。 如需詳細資訊,請參閱 ACX 裝置列舉

AcxDeviceRemoveCircuit 和 AcxDeviceDetachCircuit

有兩種常見的方法來管理線路終止。 AcxDeviceDetachCircuit 或 AcxDeviceRemoveCircuit

如果呼叫端叫用 AcxDeviceDetachCircuit,則它不得呼叫 AcxDeviceRemoveCircuit。 如果呼叫的驅動程式想要刪除 AcxDeviceDetachCircuit 之後的線路,它應該使用 WdfObjectDelete

藉由呼叫 AcxDeviceRemoveCircuit ,呼叫端驅動程式會告訴 ACX 移除此線路,並從裝置中移除/刪除它。 在此情況下,不需要在線路上呼叫 WdfObjectDelete。

總而言之,AcxDeviceDetachCircuit 表示驅動程式擁有線路物件存留期的管理,AcxDeviceRemoveCircuit 表示將會移除和刪除線路。

如需 WDF 物件存留期管理的一般資訊,請參閱 Framework 物件生命週期

AcxDeviceRemoveCircuitDevice

不同於上述的線路終止, 音訊驅動程式會使用 AcxDeviceRemoveCircuitDevice 來移除現有的音訊端點,並在驅動程式生命週期期間隨時呼叫。

驅動程式也可以選擇在重新平衡時一律終結和重新建立音訊裝置。 當裝置偵測到新設定與舊設定不相容時,這與上述案例相同。

刪除線路必須在 EvtDevicePrepareHardware/EvtDeviceReleaseHardware 回呼中完成,而且新的線路會在 EvtDevicePrepareHardware 中重新建立。 驅動程式會取消註冊線路來刪除線路(使用 AcxDeviceRemoveCircuit)。

EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEASE_HARDWARE) 回呼函式

如果驅動程式已註冊 EvtAcxCircuitReleaseHardware 回呼函 式,架構會在下列轉換期間呼叫它:

  • 資源重新平衡
  • 有序移除
  • 意外移除

ACX 架構會在 WDF 架構停止將 I/O 要求傳送至裝置之後,呼叫 EvtAcxCircuitReleaseHardware 回呼函式,指派給裝置的任何中斷都已停用並中斷連線,且裝置已關閉。

ACX 架構會在 WDF 架構呼叫驅動程式的 EvtDeviceReleaseHardware 回呼函式之前,先呼叫 EvtAcxCircuitReleaseHardware 回呼函式。

當架構呼叫 EvtAcxCircuitReleaseHardware 時,裝置的 PDO 仍然存在,而且可以查詢裝置資訊,以取得處於關閉電源狀態的裝置資訊,例如 PCI 組態狀態。

此外,架構提供給 EvtDeviceReleaseHardware 的已轉譯硬體資源仍會指派給裝置。 此回呼函式的主要目的是釋放這些資源,特別是取消對應驅動程式 EvtAcxCircuitPrepareHardware 回呼函式所對應的任何記憶體資源。 驅動程式也可以使用此回呼來執行任何其他可能處於電源關閉狀態的 ACXCIRCUIT 管理活動。 通常會在驅動程式的 EvtDeviceD0Exit 回呼函式中執行所有其他硬體關機作業。

如果驅動程式的 EvtAcxCircuitPrepareHardware 回呼函式已呼叫驅動程式的 EvtAcxCircuitPrepareHardware 回呼函式,除非 EvtAcxCircuitPrepareHardware 傳回失敗碼,否則 ACX 架構一律會呼叫驅動程式的 EvtAcxCircuitReleaseHardware 回呼函式。

如需硬體資源的詳細資訊,請參閱 硬體資源簡介。

EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE) 回呼函式

當架構呼叫 EvtAcxFactoryCircuitReleaseHardware 時,裝置的 PDO 仍然存在,而且可以查詢裝置資訊,以取得處於電源關閉狀態的裝置資訊,例如 PCI 組態狀態。

此外,架構提供給 EvtDeviceReleaseHardware 的已轉譯硬體資源仍會指派給裝置。 此回呼函式的主要目的是釋放這些資源,特別是取消對應驅動程式 EvtAcxCircuitPrepareHardware 回呼函式所對應的任何記憶體資源。 驅動程式也可以使用此回呼來執行任何其他可能處於電源關閉狀態的 ACXCIRCUIT 管理活動。 通常會在驅動程式的 EvtDeviceD0Exit 回呼函式中執行所有其他硬體關機作業。

如果驅動程式的 EvtAcxFactoryCircuitReleaseHardware 回呼函式已呼叫驅動程式的 EvtAcxFactoryCircuitPrepareHardware 回呼函式,除非 EvtAcxFactoryCircuitPrepareHardware 傳回失敗碼。

如需管理 WDF 和線路對象的詳細資訊,請參閱 ACX WDF 驅動程式存留期管理

另請參閱

ACX 音訊類別擴充功能概觀

ACX 多堆疊跨驅動程序通訊

ACX WDF 驅動程式存留期管理

ACX 對象的摘要