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 |