EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE回呼函式 (acxcircuit.h)
當驅動程式必須為新的 ACXCIRCUIT 物件建立 WDFDEVICE 時,ACX 會叫用 EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE 回呼。
語法
EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE EvtAcxFactoryCircuitCreateCircuitdevice;
NTSTATUS EvtAcxFactoryCircuitCreateCircuitdevice(
WDFDEVICE Parent,
ACXFACTORYCIRCUIT Factory,
PACX_FACTORY_CIRCUIT_ADD_CIRCUIT Config,
WDFDEVICE *Device
)
{...}
參數
Parent
WDFDEVICE 物件 (描述於 Framework 物件的摘要) ,該對像是 Device 物件中所參考 WDFDEVICE 的父系。
Factory
現有的線路處理站 ACXFACTORYCIRCUIT 物件。 如需 ACX 對象的詳細資訊,請參閱 ACX 物件的摘要。
Config
定義新 ACXCIRCUIT 組態 的ACX_FACTORY_CIRCUIT_ADD_CIRCUIT 結構。
Device
接收新 WDFDEVICE 架構物件句柄的位置指標, (Framework 物件摘要) 中所述。
傳回值
如果呼叫成功,則傳 STATUS_SUCCESS
回 。 否則,它會傳回適當的錯誤碼。 如需詳細資訊,請參閱 使用NTSTATUS值。
備註
AcxFactoryCircuit 代表能夠視需要建立 ACXCIRCUIT 的 Factory 物件。
驅動程式可以向 ACX 註冊一或多個 ACXFACTORYCIRCUIT,此動作會讓 ACX 知道驅動程式能夠建立定義完善的類型 ACXCIRCUIT。
ACX 會在偵測到音訊路徑需要其中一個原廠提供的 ACXCIRCUIT 時,叫用 ACXFACTORYCIRCUIT 的回呼。
ACXFACTORYCIRCUIT 對象支援動態 ACXCIRCUIT,這表示處理站所建立的每個 ACXCIRCUIT 都與 WDFDEVICE 相關聯,而且這兩個物件具有相同的存留期。
AcxFactoryCircuit 有專用的 WDF 佇列。 如需 WDF 佇列的詳細資訊,請參閱 Framework Queue Objects。
範例
範例使用方式如下所示。
NTSTATUS
Dsp_EvtAcxFactoryCircuitCreateCircuitDevice(
_In_ WDFDEVICE Parent,
_In_ ACXFACTORYCIRCUIT Factory,
_In_ PACX_FACTORY_CIRCUIT_ADD_CIRCUIT CircuitConfig,
_Out_ WDFDEVICE* Device
)
{
ACXOBJECTBAG circuitProperties;
PAGED_CODE();
NTSTATUS status = STATUS_SUCCESS;
WDF_OBJECT_ATTRIBUTES attributes;
*Device = NULL;
// Create object bag from the CircuitProperties
ACX_OBJECTBAG_CONFIG propConfig;
ACX_OBJECTBAG_CONFIG_INIT(&propConfig);
propConfig.Handle = CircuitConfig->CircuitProperties;
propConfig.Flags |= AcxObjectBagConfigOpenWithHandle;
WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
RETURN_NTSTATUS_IF_FAILED(AcxObjectBagOpen(&attributes, &propConfig, &circuitProperties));
auto cleanupPropConfig = scope_exit([=]() {
WdfObjectDelete(circuitProperties);
}
);
// Retrieve the intended Circuit ID from the object bag
GUID circuitId;
RETURN_NTSTATUS_IF_FAILED(Dsp_DetermineCircuitGuidFromVendorProperties(circuitProperties, &circuitId));
// Call the appropriate CreateCircuitDevice based on the Circuit ID
if (IsEqualGUID(circuitId, DSP_CIRCUIT_MICROPHONE_GUID) || IsEqualGUID(circuitId, DSP_CIRCUIT_UNIVERSALJACK_CAPTURE_GUID))
{
return DspC_EvtAcxFactoryCircuitCreateCircuitDevice(Parent, Factory, CircuitConfig, Device);
}
else if (IsEqualGUID(circuitId, DSP_CIRCUIT_SPEAKER_GUID) || IsEqualGUID(circuitId, DSP_CIRCUIT_UNIVERSALJACK_RENDER_GUID))
{
return DspR_EvtAcxFactoryCircuitCreateCircuitDevice(Parent, Factory, CircuitConfig, Device);
}
status = STATUS_NOT_SUPPORTED;
DrvLogError(g_SDCAVDspLog, FLAG_INIT, L"Unexpected CircuitId %!GUID!, %!STATUS!", &circuitId, status);
return status;
}
ACX 需求
最小 ACX 版本: 1.0
如需 ACX 版本的詳細資訊,請參閱 ACX 版本概觀。
規格需求
需求 | 值 |
---|---|
標頭 | acxcircuit.h |
IRQL | PASSIVE_LEVEL |