Condividi tramite


Risoluzione dei problemi relativi agli arresti anomali 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 dell'arresto anomalo di un driver UMDF 2.0

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 tutto lo sviluppo e il 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 interrompe nel debugger in modalità kernel quando viene superata la soglia di timeout. Nell'output del debugger vengono visualizzati diversi suggerimenti su come iniziare, inclusi i collegamenti che è possibile selezionare. Ad 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 di verifica di UMDF o per le eccezioni non gestite di UMDF. È possibile usarlo per il debug del kernel attivo o per il debug dei file di dump di arresto anomalo dell'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 del thread (!thread Address) per determinare se è stato eseguito il timeout di un callback del driver. Esaminare il conteggio dei segni di graduazione 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. Selezionare quindi !wdfdevice. Questo comando visualizza informazioni dettagliate sullo stato di alimentazione, risparmio energia e Plug and Play (PnP).

  • Usare !wdfkd.wdfumirps per cercare i runtime di integrazione 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 . Per informazioni su come impostare il valore del Registro di sistema LogMinidumpType per specificare il tipo di informazioni archiviate nel file minidump, vedere Using WPP Software Tracing in UMDF Drivers .See Using WPP Software Tracing in UMDF Drivers for information on information how to set the LogMinidumpType registry value to specify the type of information stored in the minidump file.