Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
In questo argomento viene descritto come trovare perdite di memoria del driver causate da riferimenti non rilasciati. Si applica ai driver User-Mode Driver Framework (UMDF) versione 1 e 2.
UMDF 1
Nella UMDF versione 1, uno stack di chiamate può causare una perdita di memoria se ogni chiamata a AddRef non dispone di una chiamata Release corrispondente.
Per testare se il driver UMDF versione 1 presenta perdite di oggetti del framework, utilizzare la seguente procedura:
Usare l'applicazione di controllo WDF Verifier per impostare le opzioni di verifica desiderate. Durante i test regolari, iniziare impostando TrackObjects e non TrackRefCounts.
Quando il driver viene scaricato, il verificatore del codice del framework entra nel debugger se un oggetto del framework non è stato eliminato e ti invita a usare l'estensione del debugger !wudfdumpobjects. Questa estensione del debugger visualizza un elenco di oggetti non eliminati.
Se il verificatore di codice indica che il driver perde oggetti del 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 (insieme di chiamate di funzione) che incrementa o decrementa il conteggio di riferimenti di un oggetto. Esaminando le chiamate AddRef e Release negli stack di chiamate, dovresti essere in grado di trovare uno stack che non decrementa il conteggio dei riferimenti dell'oggetto e quindi causa la fuga.
Per informazioni sulle opzioni aggiuntive del verificatore, vedere Using UMDF Verifier.
Per informazioni su quando eliminare 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 una mancata corrispondenza delle chiamate quando si usano WdfObjectReference e WdfObjectDereference.
Per verificare se il driver UMDF versione 2 presenta perdite di oggetti del framework, utilizzare la seguente procedura:
Seguire i passaggi descritti in procedure consigliate per configurare il computer per il debug di UMDF.
Per usare il rilevamento dei tag, abilitare sia il Verifier UMDF che il tracciamento degli handle nel Registro di sistema. Entrambe queste impostazioni vengono archiviate nella sottochiave Parameters\Wdf della chiave del driver HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<>.
Per abilitare UMDF Verifier, impostare un valore diverso da zero per VerifierOn.
Per abilitare il rilevamento dell'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 di Verifier di UMDF usando l'applicazione WdfVerifier.exe.
Riavviare, stabilire una connessione al debugger e quindi usare i comandi del debugger seguenti:
- !wdfkd.wdfdriverinfo 0x10 per visualizzare la gerarchia di handle
- !wdfkd.wdftagtracker per visualizzare le informazioni sui tag
Se UMDF Verifier è attivo, le perdite di memoria vengono rilevate allo scaricamento 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 degli oggetti framework.