Condividi tramite


Gestione della durata del driver WDF ACX

In questo argomento viene fornito un riepilogo della gestione della durata del driver WDF ACX e della pulizia della memoria appropriata. Per una panoramica generale di ACX, vedere Panoramica delle estensioni della classe audio ACX.

Nota

Le intestazioni e le librerie ACX non sono incluse in WDK 10.0.22621.2428 (rilasciate il 24 ottobre 2023), ma sono disponibili nelle versioni precedenti, nonché nella versione più recente (build della serie 25000) Insider Preview di WDK. Per altre informazioni sulle versioni di anteprima di WDK, vedere Installazione di versioni di anteprima di Windows Driver Kit (WDK).

Inizializzazione e avvio di ACX WDF

L'inizializzazione ACX corretta, deve verificarsi, per consentire una corretta pulizia delle risorse ACX, WDF e memoria. Altri dettagli sulle fasi principali dell'enumerazione del dispositivo riepilogate qui sono disponibili nell'enumerazione dei dispositivi ACX.

  • Voce del driver WDM
  • Aggiunta dispositivo WDF
  • WDF Prepare Hardware
  • Voce D0 dispositivo WDF
  • Processo di creazione del circuito ACX (gli oggetti ACX Pin e Jacks sono associati al circuito)
  • Processo di creazione del flusso ACX

Pulizia degli oggetti WDF ACX

In questo argomento viene descritta la pulizia degli oggetti WDF ACX in questo ordine.

  • Processo di chiusura del flusso ACX
  • Processo di rimozione del circuito ACX
  • Hardware per la versione del dispositivo WDF
  • Scaricamento del driver WDF

Esistono diversi approcci validi per la creazione e la pulizia di oggetti WDF e ACX, in questo argomento vengono illustrati alcuni elementi chiave della gestione della durata degli oggetti ACX/WDF.

Eventi di Power PnP e distruzione di oggetti

Gli eventi di Power PnP possono causare la creazione e la distruzione di oggetti. Per altre informazioni sugli eventi di alimentazione PnP, vedere Power Management ACX e WDF PnP e Power Management Callback Sequences.

Gestione della durata dei riferimenti a oggetti WDF

WDF usa i conteggi dei riferimenti per tenere traccia della durata degli oggetti. Può essere appropriato in una funzione di callback di pulizia per dereferenziare i riferimenti agli oggetti. Il framework chiama questa funzione di callback di pulizia, in modo che il driver possa chiamare WdfObjectDereference se in precedenza aveva chiamato WdfObjectReference per l'oggetto che viene eliminato. Per altre informazioni, vedere WdfObjectReference e WdfObjectDereference.

Procedure consigliate per lo sviluppo di driver di Surface Team

Per una descrizione degli errori comuni che vengono eseguiti nel codice del driver con la gestione della memoria e della durata degli oggetti, vedere le sezioni in Procedure consigliate per lo sviluppo di driver di Surface Team.

Processo di chiusura del flusso ACX

Quando il client chiude il flusso, il driver deve lavorare per chiudere e pulire le risorse associate al flusso. Per altre informazioni, vedere AcX Streaming - Flusso close process (Flusso ACX - Processo di chiusura di Stream). È importante che il driver non pulisca le risorse che supportano il flusso e che il processo di pulizia sia consapevole degli effetti sul client.

Processo di rimozione del circuito ACX

ACX può creare un circuito dinamico su richiesta. A tale scopo, il driver alloca una struttura WDFDEVICE_INIT chiamando WdfPdoInitAllocate. Il driver specifica quindi qualsiasi callback di alimentazione/PnP che vuole ricevere e crea il dispositivo. Il driver richiama AcxDeviceRemoveCircuitDevice per rimuovere il dispositivo audio dall'elenco dei dispositivi.

Per altre informazioni, vedere Rimozione dinamica del circuito ACX nei circuiti ACX.

Hardware per la versione del dispositivo WDF

La funzione di callback EVT_WDF_DEVICE_RELEA edizione Standard_HARDWARE viene usata nella funzione di callback dell'evento EvtDeviceReleaseHardware di un driver per eseguire operazioni necessarie quando un dispositivo non è più accessibile.

Pulizia del contesto di dispositivo WDF

Questo codice dell'esempio AudioCodec mostra l'uso di una struttura WDF_OBJECT_ATTRIBUTES per impostare evtCleanupCallback.

    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, CODEC_DEVICE_CONTEXT);
    attributes.EvtCleanupCallback = Codec_EvtDeviceContextCleanup;

Questo callback di esempio dato un WdfDevice pulisce il contesto del dispositivo.

VOID
Codec_EvtDeviceContextCleanup(
    _In_ WDFOBJECT      WdfDevice
)

{
    WDFDEVICE               device;
    PCODEC_DEVICE_CONTEXT   devCtx;

    device = (WDFDEVICE)WdfDevice;
    devCtx = GetCodecDeviceContext(device);
    ASSERT(devCtx != nullptr);

    if (devCtx->Capture)
    {
        CodecC_CircuitCleanup(devCtx->Capture);
    }
}

Scaricamento del driver WDF

Quando il driver viene scaricato, deve rilasciare tutte le risorse rimanenti. Per altre informazioni, vedere Rilascio delle risorse allocate dal driver.

Un driver registra una funzione di callback EvtDriverUnload quando chiama WdfDriverCreate. La funzione di callback EvtDriverUnload deve deallocare tutte le risorse di sistema non specifiche del dispositivo allocate dalla routine DriverEntry del driver. Per altre informazioni, vedere EVT_WDF_DRIVER_UNLOAD funzione di callback.

Questo codice dell'esempio AudioCodec mostra la struttura di un callback di scaricamento del driver.

EVT_WDF_DRIVER_UNLOAD               AudioCodecDriverUnload;

void AudioCodecDriverUnload(
    _In_ WDFDRIVER Driver
)
{
    PAGED_CODE();

    if (!Driver)
    {
        ASSERT(FALSE);
        return;
    }

    WPP_CLEANUP(WdfDriverWdmGetDriverObject(Driver));

// Here is where you would cleanup any allocated resources associated with the driver.

    return;
}

Vedi anche

Enumerazione del dispositivo ACX

Risparmio energia ACX

Sequenze di callback per PnP e Risparmio energia

Riepilogo degli oggetti ACX

Panoramica delle estensioni della classe audio ACX

Documentazione di riferimento su ACX