Compartilhar via


função de retorno de chamada EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE (acxcircuit.h)

O retorno de chamada EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE é invocado pelo ACX quando o driver deve criar um WDFDEVICE para um novo objeto ACXCIRCUIT.

Sintaxe

EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE EvtAcxFactoryCircuitCreateCircuitdevice;

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

Parâmetros

Parent

Um objeto WDFDEVICE (descrito em Resumo de Objetos framework) que é o pai do WDFDEVICE referenciado no objeto Device.

Factory

O objeto ACXFACTORYCIRCUIT da fábrica de circuitos existente. Para obter mais informações sobre objetos ACX, consulte Resumo de objetos ACX.

Config

Uma estrutura ACX_FACTORY_CIRCUIT_ADD_CIRCUIT que define a configuração do novo ACXCIRCUIT.

Device

Um ponteiro para um local que recebe um identificador para o novo objeto de estrutura WDFDEVICE (descrito em Resumo de Objetos framework).

Retornar valor

Retorna STATUS_SUCCESS se a chamada foi bem-sucedida. Caso contrário, ele retornará um código de erro apropriado. Para obter mais informações, consulte Usando valores NTSTATUS.

Comentários

Um AcxFactoryCircuit representa um objeto de fábrica capaz de criar um ACXCIRCUIT sob demanda.

Um driver pode registrar um ou mais ACXFACTORYCIRCUIT com ACX, essa ação permitirá que o ACX saiba que o driver é capaz de criar ACXCIRCUITs de um tipo bem definido.

O ACX invoca os retornos de chamada do ACXFACTORYCIRCUIT quando detecta que um caminho de áudio requer um dos ACXCIRCUITs fornecidos pela fábrica.

O objeto ACXFACTORYCIRCUIT dá suporte a ACXCIRCUITs dinâmicos, isso significa que cada ACXCIRCUIT criado pela fábrica está associado a um WDFDEVICE e esses dois objetos têm o mesmo tempo de vida.

Um AcxFactoryCircuit tem uma fila WDF dedicada. Para obter mais informações sobre filas do WDF, consulte Objetos de Fila da Estrutura.

Exemplo

O uso de exemplo é mostrado abaixo.

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

Requisitos do ACX

Versão mínima do ACX: 1.0

Para obter mais informações sobre as versões do ACX, consulte Visão geral da versão do ACX.

Requisitos

Requisito Valor
Cabeçalho acxcircuit.h
IRQL PASSIVE_LEVEL

Confira também