Freigeben über


EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT Rückruffunktion (acxcircuit.h)

Der EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT Rückruf wird von ACX aufgerufen, wenn der Treiber ein ACXCIRCUIT-Objekt mit der angegebenen Konfiguration erstellen muss.

Syntax

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT EvtAcxFactoryCircuitCreateCircuit;

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

Parameter

Parent

Ein WDFDEVICE-Objekt (in Summary of Framework Objects) beschrieben, das das übergeordnete Element des WDFDEVICE-Objekts ist, auf das im Device-Objekt verwiesen wird.

Device

Ein WDFDEVICE-Objekt (das in Summary of Framework Objects) beschrieben wird, das im EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE Rückruf erstellt wurde. Dieses Gerät wird dem neuen ACXCIRCUIT zugeordnet.

Factory

Das vorhandene Schaltkreiswerk ACXFACTORYCIRCUIT-Objekt. Weitere Informationen zu ACX-Objekten finden Sie unter Summary of ACX Objects.

Config

Eine ACX_FACTORY_CIRCUIT_ADD_CIRCUIT Struktur, die die Konfiguration für den neuen ACXCIRCUIT definiert.

CircuitInit

ACXCIRCUIT_INIT ist ein undurchsichtiges Objekt, das für die Schaltkreisinitialisierung verwendet wird. Verwenden Sie AcxCircuitInitAllocate, um die ACXCIRCUIT_INIT Struktur zu initialisieren.

Rückgabewert

Gibt STATUS_SUCCESS zurück, wenn der Anruf erfolgreich war. Andernfalls wird ein entsprechender Fehlercode zurückgegeben. Weitere Informationen finden Sie unter Verwenden von NTSTATUS-Werten.

Bemerkungen

Ein AcxFactoryCircuit stellt ein Factoryobjekt dar, das eine ACXCIRCUIT bei Bedarf erstellen kann.

Ein Treiber kann einen oder mehrere ACXFACTORYCIRCUIT bei ACX registrieren. Diese Aktion informiert ACX darüber, dass der Treiber ACXCIRCUITs eines gut definierten Typs erstellen kann.

ACX ruft die Rückrufe von ACXFACTORYCIRCUIT auf, wenn erkannt wird, dass für einen Audiopfad eine der vom Hersteller bereitgestellten ACXCIRCUITs erforderlich ist.

Ein AcxFactoryCircuit verfügt über eine dedizierte WDF-Warteschlange. Weitere Informationen zu WDF-Warteschlangen finden Sie unter Framework Queue Objects.

Beispiel

Die Beispielverwendung wird unten gezeigt.

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-Anforderungen

Mindestens ACX-Version: 1.0

Weitere Informationen zu ACX-Versionen finden Sie unter ACX-Versionsübersicht.

Anforderungen

Anforderung Wert
Header- acxcircuit.h
IRQL- PASSIVE_LEVEL

Siehe auch