Freigeben über


EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE Rückruffunktion (acxcircuit.h)

Der EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE Rückruf wird von ACX aufgerufen, wenn der Treiber ein WDFDEVICE für ein neues ACXCIRCUIT-Objekt erstellen muss.

Syntax

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE EvtAcxFactoryCircuitCreateCircuitdevice;

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

Parameter

Parent

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

Factory

Das vorhandene ACXFACTORYCIRCUIT-Objekt der Circuit Factory. Weitere Informationen zu ACX-Objekten finden Sie unter Zusammenfassung von ACX-Objekten.

Config

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

Device

Ein Zeiger auf einen Speicherort, der ein Handle für das neue WDFDEVICE-Frameworkobjekt empfängt (beschrieben in Zusammenfassung der Frameworkobjekte).

Rückgabewert

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

Hinweise

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

Ein Treiber kann einen oder mehrere ACXFACTORYCIRCUIT bei ACX registrieren. Durch diese Aktion wird ACX informiert, dass der Treiber ACXCIRCUITs eines klar definierten Typs erstellen kann.

ACX ruft die ACXFACTORYCIRCUIT-Rückrufe auf, wenn erkannt wird, dass ein Audiopfad eines der werkseitig bereitgestellten ACXCIRCUITs erfordert.

Das ACXFACTORYCIRCUIT-Objekt unterstützt dynamische ACXCIRCUITs. Dies bedeutet, dass jeder von der Factory erstellte ACXCIRCUIT einem WDFDEVICE zugeordnet ist und diese beiden Objekte dieselbe Lebensdauer haben.

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

Beispiel

Das Beispiel für die Verwendung ist unten dargestellt.

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

ACX-Mindestversion: 1.0

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

Anforderungen

Anforderung Wert
Header acxcircuit.h
IRQL PASSIVE_LEVEL

Weitere Informationen