Condividi tramite


Determinazione se un oggetto Framework di perdite di driver

Questo argomento descrive come trovare perdite di memoria driver causate da riferimenti non rilasciati. Si applica ai driver User-Mode Driver Framework (UMDF) versione 1 e 2.

UMDF 1

Nella versione 1 di UMDF uno stack di chiamate può causare una perdita di memoria se ogni chiamata a AddRef non ha una chiamata di versione corrispondente.

Per testare se gli oggetti framework UMDF versione 1 del driver perde, seguire questa procedura:

  1. Usare l'applicazione di controllo Del verificatore WDF per impostare le opzioni di verifica desiderate. Durante i test regolari, iniziare impostando TrackObjects e non TrackRefCounts.

    Quando il driver viene scaricato, il verificatore di codice del framework entra nel debugger se un oggetto framework non è stato eliminato e richiede di usare l'estensione del debugger !wudfdumpobjects . Questa estensione del debugger visualizza un elenco di oggetti non visualizzati.

  2. Se il verificatore di codice indica che il driver perde oggetti framework, usare l'applicazione di controllo per impostare l'opzione TrackRefCounts .

    Se questa opzione è impostata, il verificatore tiene traccia dei riferimenti agli oggetti framework durante l'esecuzione del driver. È possibile usare l'estensione del debugger !wudfrefhist per visualizzare ogni stack di chiamate di chiamata (set di chiamate di funzione) che incrementa o decrementa il conteggio dei riferimenti di un oggetto. Esaminando le chiamate AddRef e Release in questi stack di chiamate, è consigliabile trovare uno stack che non decresce il conteggio dei riferimenti dell'oggetto e quindi causa la perdita.

Per informazioni sulle opzioni aggiuntive del verificatore, vedere Uso di UMDF Verifier.

Per informazioni su quando eliminare gli oggetti framework, vedere Gestione della durata degli oggetti.

UMDF 2

Nella versione 2 di UMDF i riferimenti non rilasciati sono rari, ma possono verificarsi a causa di errori di chiamata quando si usa WdfObjectReference e WdfObjectDereference.

Per testare se gli oggetti framework di perdita driver versione 2 di UMDF, usare la procedura seguente:

  1. Seguire i passaggi descritti in Procedure consigliate per configurare il computer per il debug di UMDF.

  2. Per usare il rilevamento dei tag, abilitare sia il verificatore UMDF che il rilevamento dell'handle nel Registro di sistema. Entrambe queste impostazioni vengono archiviate nella sottochiave Parametri del driver\Wdf della chiave del nome> del driverHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<.

    Per abilitare il verificatore UMDF, impostare un valore diverso da zero per VerifierOn.

    Per abilitare il rilevamento handle, impostare il valore di TrackHandles sul nome di uno o più tipi di oggetto oppure specificare un asterisco (*) per tenere traccia di tutti i tipi di oggetto.

    È anche possibile modificare le impostazioni del verificatore UMDF usando l'applicazione WdfVerifier.exe .

  3. Riavviare, stabilire una connessione del debugger e quindi usare i comandi del debugger seguenti:

Se il verificatore UMDF è attivo, le perdite di memoria vengono rilevate durante il caricamento del driver, esattamente come in KMDF.

Per altre informazioni sull'uso dei conteggi dei riferimenti nei driver KMDF e UMDF versione 2, vedere Ciclo di vita dell'oggetto Framework.