EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT Rückruffunktion (acxcircuit.h)
Der EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT Rückruf wird von ACX aufgerufen, wenn der Treiber ein ACXCIRCUIT-Objekt mit der angegebenen Konfiguration erstellen muss.
Syntax
EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT EvtAcxFactoryCircuitCreateCircuit;
NTSTATUS EvtAcxFactoryCircuitCreateCircuit(
WDFDEVICE Parent,
WDFDEVICE Device,
ACXFACTORYCIRCUIT Factory,
PACX_FACTORY_CIRCUIT_ADD_CIRCUIT Config,
PACXCIRCUIT_INIT CircuitInit
)
{...}
Parameter
Parent
Ein WDFDEVICE-Objekt (in Summary of Framework Objects) beschrieben, das das übergeordnete Element des WDFDEVICE-Objekts ist, auf das im Device-Objekt verwiesen wird.
Device
Ein WDFDEVICE-Objekt (das in Summary of Framework Objects) beschrieben wird, das im EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE Rückruf erstellt wurde. Dieses Gerät wird dem neuen ACXCIRCUIT zugeordnet.
Factory
Das vorhandene Schaltkreiswerk ACXFACTORYCIRCUIT-Objekt. Weitere Informationen zu ACX-Objekten finden Sie unter Summary of ACX Objects.
Config
Eine ACX_FACTORY_CIRCUIT_ADD_CIRCUIT Struktur, die die Konfiguration für den neuen ACXCIRCUIT definiert.
CircuitInit
ACXCIRCUIT_INIT ist ein undurchsichtiges Objekt, das für die Schaltkreisinitialisierung verwendet wird. Verwenden Sie AcxCircuitInitAllocate, um die ACXCIRCUIT_INIT Struktur zu initialisieren.
Rückgabewert
Gibt STATUS_SUCCESS
zurück, wenn der Anruf erfolgreich war. Andernfalls wird ein entsprechender Fehlercode zurückgegeben. Weitere Informationen finden Sie unter Verwenden von NTSTATUS-Werten.
Bemerkungen
Ein AcxFactoryCircuit stellt ein Factoryobjekt dar, das eine ACXCIRCUIT bei Bedarf erstellen kann.
Ein Treiber kann einen oder mehrere ACXFACTORYCIRCUIT bei ACX registrieren. Diese Aktion informiert ACX darüber, dass der Treiber ACXCIRCUITs eines gut definierten Typs erstellen kann.
ACX ruft die Rückrufe von ACXFACTORYCIRCUIT auf, wenn erkannt wird, dass für einen Audiopfad eine der vom Hersteller bereitgestellten ACXCIRCUITs erforderlich ist.
Ein AcxFactoryCircuit verfügt über eine dedizierte WDF-Warteschlange. Weitere Informationen zu WDF-Warteschlangen finden Sie unter Framework Queue Objects.
Beispiel
Die Beispielverwendung wird unten gezeigt.
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;
}
ACX-Anforderungen
Mindestens ACX-Version: 1.0
Weitere Informationen zu ACX-Versionen finden Sie unter ACX-Versionsübersicht.
Anforderungen
Anforderung | Wert |
---|---|
Header- | acxcircuit.h |
IRQL- | PASSIVE_LEVEL |