EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE fonction de rappel (acxcircuit.h)
Le rappel EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE est appelé par ACX lorsque le pilote doit créer un WDFDEVICE pour un nouvel objet ACXCIRCUIT.
Syntaxe
EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE EvtAcxFactoryCircuitCreateCircuitdevice;
NTSTATUS EvtAcxFactoryCircuitCreateCircuitdevice(
WDFDEVICE Parent,
ACXFACTORYCIRCUIT Factory,
PACX_FACTORY_CIRCUIT_ADD_CIRCUIT Config,
WDFDEVICE *Device
)
{...}
Paramètres
Parent
Objet WDFDEVICE (décrit dans Summary of Framework Objects) qui est le parent du WDFDEVICE référencé dans l’objet Device.
Factory
Objet ACXFACTORYCIRCUIT de la fabrique de circuits existante. Pour plus d’informations sur les objets ACX, consultez Résumé des objets ACX.
Config
Une structure ACX_FACTORY_CIRCUIT_ADD_CIRCUIT qui définit la configuration du nouvel ACXCIRCUIT.
Device
Pointeur vers un emplacement qui reçoit un handle vers le nouvel objet d’infrastructure WDFDEVICE (décrit dans Résumé des objets Framework).
Valeur retournée
Retourne STATUS_SUCCESS
si l’appel a réussi. Sinon, il retourne un code d’erreur approprié. Pour plus d’informations, consultez Utilisation de valeurs NTSTATUS.
Remarques
Un AcxFactoryCircuit représente un objet de fabrique capable de créer un ACXCIRCUIT à la demande.
Un pilote peut inscrire un ou plusieurs ACXFACTORYCIRCUIT avec ACX. Cette action permet à ACX de savoir que le pilote est capable de créer des ACXCIRCUIT d’un type bien défini.
ACX appelle les rappels d’ACXFACTORYCIRCUIT lorsqu’il détecte qu’un chemin d’accès audio nécessite l’un des ACXCIRCUIT fournis par l’usine.
L’objet ACXFACTORYCIRCUIT prend en charge les ACXCIRCUIT dynamiques, ce qui signifie que chaque ACXCIRCUIT créé par la fabrique est associé à un objet WDFDEVICE et que ces deux objets ont la même durée de vie.
Un AcxFactoryCircuit a une file d’attente WDF dédiée. Pour plus d’informations sur les files d’attente WDF, consultez Framework Queue Objects.
Exemple
L’exemple d’utilisation est illustré ci-dessous.
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;
}
Configuration requise d’ACX
Version minimale d’ACX : 1.0
Pour plus d’informations sur les versions d’ACX, consultez Vue d’ensemble des versions d’ACX.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | acxcircuit.h |
IRQL | PASSIVE_LEVEL |