EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT fungsi panggilan balik (acxcircuit.h)
Panggilan balik EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUIT dipanggil oleh ACX ketika driver harus membuat objek ACXCIRCUIT dengan konfigurasi yang ditentukan.
Sintaks
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
Objek WDFDEVICE (dijelaskan dalam Ringkasan Objek Kerangka Kerja) yang merupakan induk dari WDFDEVICE yang dirujuk dalam objek Perangkat.
Device
Objek WDFDEVICE (dijelaskan dalam Ringkasan Objek Kerangka Kerja) yang dibuat dalam panggilan balik EVT_ACX_FACTORY_CIRCUIT_CREATE_CIRCUITDEVICE. Perangkat ini akan dikaitkan dengan ACXCIRCUIT baru.
Factory
Pabrik sirkuit yang ada ACXFACTORYCIRCUIT Object. Untuk informasi selengkapnya tentang objek ACX, lihat Ringkasan Objek ACX.
Config
Struktur ACX_FACTORY_CIRCUIT_ADD_CIRCUIT yang menentukan konfigurasi untuk ACXCIRCUIT baru.
CircuitInit
ACXCIRCUIT_INIT adalah objek buram yang digunakan untuk inisialisasi sirkuit. Gunakan AcxCircuitInitAllocate untuk menginisialisasi struktur ACXCIRCUIT_INIT.
Menampilkan nilai
Mengembalikan STATUS_SUCCESS
jika panggilan berhasil. Jika tidak, ia mengembalikan kode kesalahan yang sesuai. Untuk informasi selengkapnya, lihat Menggunakan Nilai NTSTATUS.
Keterangan
AcxFactoryCircuit mewakili objek pabrik yang mampu membuat ACXCIRCUIT sesuai permintaan.
Driver dapat mendaftarkan satu atau beberapa ACXFACTORYCIRCUIT dengan ACX, tindakan ini akan memberi tahu ACX bahwa driver mampu membuat ACXCIRCUITs dengan jenis yang terdefinisi dengan baik.
ACX memanggil panggilan balik ACXFACTORYCIRCUIT ketika mendeteksi bahwa jalur audio memerlukan salah satu pabrik yang disediakan ACXCIRCUITs.
AcxFactoryCircuit memiliki antrean WDF khusus. Untuk informasi selengkapnya tentang antrean WDF, lihat Objek Antrean Kerangka Kerja.
Contoh
Contoh penggunaan ditunjukkan di bawah ini.
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;
}
Persyaratan ACX
Versi ACX minimum: 1.0
Untuk informasi selengkapnya tentang versi ACX, lihat Gambaran umum versi ACX.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | acxcircuit.h |
IRQL | PASSIVE_LEVEL |