Share via


EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT función de devolución de llamada (acxcircuit.h)

ACX invoca la devolución de llamada EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT cuando el controlador debe crear un objeto ACXCIRCUIT con la configuración especificada.

Sintaxis

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT EvtAcxFactoryCircuitCreateCircuit;

NTSTATUS EvtAcxFactoryCircuitCreateCircuit(
  WDFDEVICE Parent,
  WDFDEVICE Device,
  ACXFACTORYCIRCUIT Factory,
  PACX_FACTORY_CIRCUIT_ADD_CIRCUIT Config,
  PACXCIRCUIT_INIT CircuitInit
)
{...}

Parámetros

Parent

Objeto WDFDEVICE (descrito en Resumen de objetos de marco) que es el elemento primario del objeto WDFDEVICE al que se hace referencia en el objeto Device.

Device

Objeto WDFDEVICE (descrito en Resumen de objetos de marco) creado en la devolución de llamada EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE. Este dispositivo se asociará con el nuevo ACXCIRCUIT.

Factory

Objeto ACXFACTORYCIRCUIT de fábrica de circuitos existente. Para obtener más información sobre los objetos ACX, vea Resumen de objetos ACX.

Config

Estructura ACX_FACTORY_CIRCUIT_ADD_CIRCUIT que define la configuración del nuevo ACXCIRCUIT.

CircuitInit

ACXCIRCUIT_INIT es un objeto opaco utilizado para la inicialización del circuito. Use AcxCircuitInitAllocate para inicializar la estructura de ACXCIRCUIT_INIT.

Valor devuelto

Devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, devuelve un código de error adecuado. Para obtener más información, vea Uso de valores NTSTATUS.

Comentarios

AcxFactoryCircuit representa un objeto de fábrica capaz de crear un ACXCIRCUIT a petición.

Un controlador puede registrar uno o varios ACXFACTORYCIRCUIT con ACX, esta acción permitirá a ACX saber que el controlador es capaz de crear ACXCIRCUIT de un tipo bien definido.

ACX invoca las devoluciones de llamada de ACXFACTORYCIRCUIT cuando detecta que una ruta de acceso de audio requiere uno de los ACXCIRCUITs proporcionados por el generador.

AcxFactoryCircuit tiene una cola WDF dedicada. Para obtener más información sobre las colas de WDF, vea Objetos de cola de marco.

Ejemplo

A continuación se muestra el uso de ejemplo.

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;
}

Requisitos de ACX

Versión mínima de ACX: 1.0

Para obtener más información sobre las versiones de ACX, consulte Introducción a la versión de ACX.

Requisitos

Requisito Valor
Header acxcircuit.h
IRQL PASSIVE_LEVEL

Consulte también