Condividi tramite


Risoluzione dei problemi dei crash del driver UMDF 2.0

A partire da User-Mode Driver Framework (UMDF) versione 2, è possibile usare un subset dei comandi di estensione del debugger implementati in Wdfkd.dll per eseguire il debug di un driver UMDF. Questo articolo descrive i comandi che è possibile usare per risolvere i problemi del driver UMDF.

Determinazione del motivo per cui un driver UMDF 2.0 si è bloccato

Se il processo host del driver viene terminato, il driver potrebbe avere un problema in un callback che comporta il superamento della soglia di timeout dell'host . In questo caso, il riflettore termina il processo host del driver.

Per analizzare, configurare prima di tutto una sessione di debug in modalità kernel, come descritto in Come abilitare il debug di un driver UMDF. È consigliabile eseguire tutte le attività di sviluppo e test del driver UMDF con un debugger del kernel collegato al sistema di test e abilitare Application Verifier (AppVerif.exe) in WUDFHost.exe. Usare il comando seguente, collegare un debugger del kernel e quindi riavviare.

AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
  • Se HostFailKdDebugBreak è impostato, il riflettore si attiva nel debugger in modalità kernel quando la soglia di timeout è superata. Nell'output del debugger vengono visualizzati diversi suggerimenti su come iniziare, inclusi i collegamenti che è possibile selezionare. Per esempio:

    **** Problem detected in UMDF driver "WUDFOsrUsbFx2". !process 0xFFFFE0000495B080 0x1f, !devstack 0xFFFFE000032BFA10, Problem code 3 ****
    **** Dump UMDF driver image name and stack: !wdfkd.wdfumdevstack 0x000000BEBB49AE20
    **** Dump UM Irps for this stack: !wdfkd.wdfumirps 0x000000BEBB49AE20
    **** Dump UMDF trace log: !wmitrace.logdump WUDFTrace
    **** Helpful UMDF debugger extension commands: !wdfkd.wdfhelp
    **** Note that driver host process may get terminated if you go past this break, making it difficult to debug the problem!
    
  • Usare !analyze per visualizzare informazioni sull'errore e altri comandi di estensione UMDF che è possibile provare. Questo comando può essere utile per gli errori del verificatore UMDF o le eccezioni non gestite di UMDF. È possibile usarlo per il debugging del kernel in tempo reale o per il debugging dei file di dump di crash utente da %ProgramData%\Microsoft\WDF.

  • Usare !process 0 0x1f wudfhost.exe per elencare tutti i processi host del driver Wudfhost.exe, incluse le informazioni sullo stack di thread.

    È anche possibile usare !wdfkd.wdfumtriage e !wdfkd.wdfldr per visualizzare tutti i driver attualmente associati a WDF. Quando si seleziona il nome dell'immagine di un driver UMDF, il debugger visualizza l'indirizzo del processo di hosting. È quindi possibile selezionare l'indirizzo del processo per visualizzare informazioni specifiche del processo.

  • Se necessario, usare .process /r /p Process per passare il contesto del processo a quello del processo Wudfhost che ospita il driver. Usare .cache forcedecodeuser e lmu per verificare che il driver sia ospitato nel processo corrente.

  • Esaminare gli stack di chiamate di thread (!thread Address) per determinare se un callback del driver è andato in timeout. Controllare il conteggio dei tick per i thread. In Windows 8.1 si verifica il timeout del riflettore dopo un minuto.

  • Usare !wdfkd.wdfdriverinfo MyDriver.dll 0x10 per visualizzare l'albero dei dispositivi in forma dettagliata. Quindi selezionare !wdfdevice. Questo comando visualizza informazioni dettagliate sullo stato di alimentazione, risparmio energia e Plug and Play (PnP).

  • Usare !wdfkd.wdfumirps per cercare gli IRP in sospeso.

  • Usare !wdfkd.wdfdevicequeues per controllare lo stato delle code del driver.

  • In una sessione di debug in modalità kernel è possibile usare !wmitrace.logdump WudfTrace per visualizzare il log di traccia.

Visualizzazione del log UMDF 2.0 IFR

In una sessione di debug in modalità kernel, è possibile usare il comando di estensione !wdfkd.wdflogdump per visualizzare i record di log di Windows Driver Frameworks (WDF) In-Flight Recorder (IFR), se disponibili.

Ricerca di file di dump della memoria

Per informazioni sulla ricerca di file di dump in modalità utente, vedere Determinazione del motivo per cui il reflector ha terminato il processo host . Vedere Uso della traccia software WPP nei driver UMDF per informazioni su come impostare il valore del Registro di sistema LogMinidumpType per specificare il tipo di informazioni archiviate nel file minidump.