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 (beschrieben in Summary of Framework Objects), das das übergeordnete Element des WDFDEVICE ist, auf das im Device-Objekt verwiesen wird.

Device

Ein WDFDEVICE-Objekt (beschrieben unter Zusammenfassung der Frameworkobjekte), das im EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE-Rückruf erstellt wurde. Dieses Gerät wird dem neuen ACXCIRCUIT zugeordnet.

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.

CircuitInit

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

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.

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.

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

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