Determinazione del motivo per cui un driver UMDF usa una quantità eccessiva di memoria
Avviso
UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Nessuna nuova funzionalità viene aggiunta a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2.
Gli esempi di UMDF 1 archiviati sono disponibili nell'Windows 11, versione 22H2 - Aggiornamento degli esempi di driver di maggio 2022.
Per altre informazioni, vedere Introduzione con UMDF.
Questo argomento descrive come usare le estensioni del debugger Wudfext.dll in combinazione con un driver User-Mode Framework (UMDF) versione 1 per determinare perché un driver UMDF usa una quantità eccessiva di memoria.
A partire da UMDF versione 2, è consigliabile usare invece le estensioni del debugger Wdfkd.dll. Per altre informazioni, vedere Estensioni di Windows Driver Framework (Wdfkd.dll).
Per analizzare l'utilizzo della memoria, seguire questa procedura:
Visualizzare l'oggetto in sospeso nell'albero degli oggetti usando l'estensione del debugger UMDF !wudfext.wudfobject .
L'estensione !wudfext.wudfobject visualizza informazioni su un oggetto WDF, che include le relazioni padre e figlio. Se si imposta il bit 0 del parametro Flags su 1 (0x01), !wudfext.wudfobject esegue un dump ricorsivo dell'albero degli oggetti che è radicato nell'oggetto passato. Per visualizzare l'albero completo degli oggetti, usare il comando di esempio seguente:
!wudfext.wudfobject <IWDFDriver*> 1
Determinare se vengono visualizzati più oggetti in sospeso rispetto alle aspettative.
Il driver potrebbe eventualmente perdere questi oggetti (per altre informazioni sulla perdita di oggetti WDF, vedere Determinazione di se un oggetto Framework perdite driver).
Questi oggetti potrebbero trovarsi nell'albero degli oggetti e quindi essere liberati. Tuttavia, si stanno accumulando inutilmente. Questi oggetti potrebbero richiedere:
- Correzioni agli oggetti padre.
- Eliminazione esplicita usando il metodo IWDFObject::D eleteWdfObject .