Bagikan melalui


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

Lihat juga