функция обратного вызова EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE (acxcircuit.h)

Обратный вызов EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE вызывается ACX, когда драйвер должен создать WDFDEVICE для нового объекта ACXCIRCUIT.

Синтаксис

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE EvtAcxFactoryCircuitCreateCircuitdevice;

NTSTATUS EvtAcxFactoryCircuitCreateCircuitdevice(
  WDFDEVICE Parent,
  ACXFACTORYCIRCUIT Factory,
  PACX_FACTORY_CIRCUIT_ADD_CIRCUIT Config,
  WDFDEVICE *Device
)
{...}

Параметры

Parent

Объект WDFDEVICE ( описанный в разделе Сводка объектов платформы), который является родительским объектом WDFDEVICE, на который ссылается объект Device.

Factory

Объект ACXFACTORYCIRCUIT существующей фабрики цепи. Дополнительные сведения об объектах ACX см. в разделе Сводка по объектам ACX.

Config

Структура ACX_FACTORY_CIRCUIT_ADD_CIRCUIT , которая определяет конфигурацию для нового ACXCIRCUIT.

Device

Указатель на расположение, которое получает дескриптор нового объекта платформы WDFDEVICE (описано в разделе Сводка объектов платформы).

Возвращаемое значение

Возвращает значение STATUS_SUCCESS , если вызов был успешным. В противном случае возвращается соответствующий код ошибки. Дополнительные сведения см. в разделе Использование значений NTSTATUS.

Комментарии

AcxFactoryCircuit представляет объект фабрики, способный создавать ACXCIRCUIT по запросу.

Драйвер может зарегистрировать один или несколько ACXFACTORYCIRCUIT в ACX. Это действие сообщит ACX, что драйвер может создавать ACXCIRCUITs с четко определенным типом.

ACX вызывает обратные вызовы ACXFACTORYCIRCUIT, когда обнаруживает, что для звукового пути требуется один из предоставленных фабрикой ACXCIRCUITs.

Объект ACXFACTORYCIRCUIT поддерживает динамические acXCIRCUITs. Это означает, что каждый ACXCIRCUIT, созданный фабрикой, связан с WDFDEVICE, и эти два объекта имеют одинаковое время существования.

AcxFactoryCircuit имеет выделенную очередь WDF. Дополнительные сведения об очередях WDF см. в разделе Объекты очередей платформы.

Пример

Ниже приведен пример использования.

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

См. также раздел