EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT função de retorno de chamada (acxcircuit.h)
O retorno de chamada EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT é invocado pelo ACX quando o driver deve criar um objeto ACXCIRCUIT com a configuração especificada.
Sintaxe
EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT EvtAcxFactoryCircuitCreateCircuit;
NTSTATUS EvtAcxFactoryCircuitCreateCircuit(
WDFDEVICE Parent,
WDFDEVICE Device,
ACXFACTORYCIRCUIT Factory,
PACX_FACTORY_CIRCUIT_ADD_CIRCUIT Config,
PACXCIRCUIT_INIT CircuitInit
)
{...}
Parâmetros
Parent
Um objeto WDFDEVICE (descrito em Resumo de Objetos framework) que é o pai do WDFDEVICE referenciado no objeto Device.
Device
Um objeto WDFDEVICE (descrito em Resumo de Objetos framework) criado no EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE retorno de chamada. Este dispositivo será associado ao novo ACXCIRCUIT.
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.
CircuitInit
ACXCIRCUIT_INIT é um objeto opaco usado para inicialização de circuito. Use AcxCircuitInitAllocate para inicializar a estrutura ACXCIRCUIT_INIT.
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.
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.
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;
}
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 |