Condividi tramite


EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT funzione di callback (acxcircuit.h)

Il callback EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT viene richiamato da ACX quando il driver deve creare un oggetto ACXCIRCUIT con la configurazione specificata.

Sintassi

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT EvtAcxFactoryCircuitCreateCircuit;

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

Parametri

Parent

Oggetto WDFDEVICE (descritto in Riepilogo degli oggetti framework) padre di WDFDEVICE a cui si fa riferimento nell'oggetto Device.

Device

Oggetto WDFDEVICE (descritto in Riepilogo degli oggetti framework) creato nel callback EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE. Questo dispositivo verrà associato al nuovo ACXCIRCUIT.

Factory

Oggetto ACXFACTORYCIRCUIT della fabbrica di circuiti esistente. Per altre informazioni sugli oggetti ACX, vedere Riepilogo degli oggetti ACX.

Config

Struttura ACX_FACTORY_CIRCUIT_ADD_CIRCUIT che definisce la configurazione per il nuovo ACXCIRCUIT.

CircuitInit

ACXCIRCUIT_INIT è un oggetto opaco utilizzato per l'inizializzazione del circuito. Usare AcxCircuitInitAllocate per inizializzare la struttura ACXCIRCUIT_INIT.

Valore restituito

Restituisce STATUS_SUCCESS se la chiamata ha avuto esito positivo. In caso contrario, restituisce un codice di errore appropriato. Per altre informazioni, vedere Uso dei valori NTSTATUS.

Commenti

Un oggetto AcxFactoryCircuit rappresenta un oggetto factory in grado di creare un oggetto ACXCIRCUIT su richiesta.

Un driver può registrare uno o più ACXFACTORYCIRCUIT con ACX. Questa azione informa ACX che il driver è in grado di creare ACXCIRCUIT di un tipo ben definito.

ACX richiama i callback di ACXFACTORYCIRCUIT quando rileva che un percorso audio richiede uno degli ACXCIRCUIT forniti dalla factory.

AcxFactoryCircuit ha una coda WDF dedicata. Per altre informazioni sulle code WDF, vedere Framework Queue Objects.

Esempio

Di seguito è riportato un esempio di utilizzo.

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

Requisiti di ACX

Versione minima di ACX: 1.0

Per altre informazioni sulle versioni ACX, vedere La panoramica della versione di ACX.

Requisiti

Requisito Valore
Intestazione acxcircuit.h
IRQL PASSIVE_LEVEL

Vedi anche