EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE funzione di callback (acxcircuit.h)
Il callback EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE viene richiamato da ACX quando il driver deve creare un WDFDEVICE per un nuovo oggetto ACXCIRCUIT.
Sintassi
EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE EvtAcxFactoryCircuitCreateCircuitdevice;
NTSTATUS EvtAcxFactoryCircuitCreateCircuitdevice(
WDFDEVICE Parent,
ACXFACTORYCIRCUIT Factory,
PACX_FACTORY_CIRCUIT_ADD_CIRCUIT Config,
WDFDEVICE *Device
)
{...}
Parametri
Parent
Oggetto WDFDEVICE (descritto in Riepilogo degli oggetti framework) padre di WDFDEVICE a cui si fa riferimento nell'oggetto Device.
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.
Device
Puntatore a una posizione che riceve un handle per il nuovo oggetto framework WDFDEVICE (descritto in Riepilogo degli oggetti framework).
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.
L'oggetto ACXFACTORYCIRCUIT supporta ACXCIRCUITs dinamico, pertanto ogni ACXCIRCUIT creato dalla factory è associato a un WDFDEVICE e questi due oggetti hanno la stessa durata.
AcxFactoryCircuit ha una coda WDF dedicata. Per altre informazioni sulle code WDF, vedere Framework Queue Objects.
Esempio
Di seguito è riportato un esempio di utilizzo.
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;
}
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 |