Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обратный вызов EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT вызывается ACX, когда драйвер должен создать объект ACXCIRCUIT с указанной конфигурацией.
Синтаксис
EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT EvtAcxFactoryCircuitCreateCircuit;
NTSTATUS EvtAcxFactoryCircuitCreateCircuit(
WDFDEVICE Parent,
WDFDEVICE Device,
ACXFACTORYCIRCUIT Factory,
PACX_FACTORY_CIRCUIT_ADD_CIRCUIT Config,
PACXCIRCUIT_INIT CircuitInit
)
{...}
Параметры
Parent
Объект WDFDEVICE (описанный в разделе Сводка объектов Платформы), который является родительским объектом WDFDEVICE, на который ссылается объект Device.
Device
Объект WDFDEVICE (описанный в сводке объектов Платформы), созданный в обратном вызове EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE. Это устройство будет связано с новым ACXCIRCUIT.
Factory
Существующий объект фабрики каналов ACXFACTORYCIRCUIT. Дополнительные сведения о объектах ACX см. в сводке по объектам ACX.
Config
Структура ACX_FACTORY_CIRCUIT_ADD_CIRCUIT, которая определяет конфигурацию для нового ACXCIRCUIT.
CircuitInit
ACXCIRCUIT_INIT — это непрозрачный объект, используемый для инициализации канала. Используйте AcxCircuitInitAllocate для инициализации структуры ACXCIRCUIT_INIT.
Возвращаемое значение
Возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код ошибки. Дополнительные сведения см. в использовании значений NTSTATUS.
Замечания
AcxFactoryCircuit представляет объект фабрики, способный создавать ACXCIRCUIT по запросу.
Драйвер может зарегистрировать один или несколько ACXFACTORYCIRCUIT в ACX, это действие позволит ACX знать, что драйвер может создавать ACXCIRCUITs хорошо определенного типа.
ACX вызывает обратные вызовы ACXFACTORYCIRCUIT при обнаружении того, что звуковой путь требует одной из фабрики, предоставленных ACXCIRCUITs.
AcxFactoryCircuit имеет выделенную очередь WDF. Дополнительные сведения о очередях WDF см. в разделе Объекты очередей Платформы.
Пример
Ниже показан пример использования.
EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT Dsp_EvtAcxFactoryCircuitCreateCircuit;
NTSTATUS
Dsp_EvtAcxFactoryCircuitCreateCircuit(
_In_ WDFDEVICE Parent,
_In_ WDFDEVICE Device,
_In_ ACXFACTORYCIRCUIT Factory,
_In_ PACX_FACTORY_CIRCUIT_ADD_CIRCUIT CircuitConfig,
_In_ PACXCIRCUIT_INIT CircuitInit
)
{
ACXOBJECTBAG circuitProperties;
PAGED_CODE();
NTSTATUS status = STATUS_SUCCESS;
// Create object bag from the CompositeProperties
ACX_OBJECTBAG_CONFIG propConfig;
ACX_OBJECTBAG_CONFIG_INIT(&propConfig);
propConfig.Handle = CircuitConfig->CircuitProperties;
propConfig.Flags |= AcxObjectBagConfigOpenWithHandle;
WDF_OBJECT_ATTRIBUTES attributes;
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));
AcxCircuitInitSetComponentId(CircuitInit, &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_EvtAcxFactoryCircuitCreateCircuit(Parent, Device, Factory, CircuitConfig, CircuitInit);
}
else if (IsEqualGUID(circuitId, DSP_CIRCUIT_SPEAKER_GUID) || IsEqualGUID(circuitId, DSP_CIRCUIT_UNIVERSALJACK_RENDER_GUID))
{
return DspR_EvtAcxFactoryCircuitCreateCircuit(Parent, Device, Factory, CircuitConfig, CircuitInit);
}
status = STATUS_NOT_SUPPORTED;
return status;
}
Требования к ACX
минимальная версия ACX: 1.0
Дополнительные сведения о версиях ACX см. в обзоре версий ACX.
Требования
| Требование | Ценность |
|---|---|
| заголовка | acxcircuit.h |
| IRQL | PASSIVE_LEVEL |