Udostępnij przez


Rozwiązywanie problemów z awariami sterowników UMDF 2.0

Począwszy od User-Mode Driver Framework (UMDF) w wersji 2, można użyć podzbioru poleceń rozszerzenia debugera zaimplementowanych w Wdfkd.dll do debugowania sterownika UMDF. W tym artykule opisano polecenia, których można użyć do rozwiązywania problemów ze sterownikiem UMDF.

Określanie, dlaczego sterownik UMDF 2.0 uległ awarii

Jeśli proces hosta sterownika zostanie zakończony, sterownik może mieć problem w wywołaniu zwrotnym, co powoduje przekroczenie progu limitu czasu hosta . W takim przypadku reflektor kończy proces hosta sterownika.

Aby zbadać, najpierw skonfiguruj sesję debugowania trybu jądra zgodnie z opisem w Jak włączyć debugowanie sterownika UMDF. Zdecydowanie zalecamy, aby cała praca programistyczna i testowa nad sterownikiem UMDF była wykonywana z debugerem jądra podłączonym do systemu testowego oraz z włączonym Application Verifier (AppVerif.exe) na WUDFHost.exe. Użyj następującego polecenia, dołącz debuger jądra, a następnie uruchom ponownie.

AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
  • Jeśli HostFailKdDebugBreak jest ustawiona, refleksor włamuje się do debugera trybu jądra po przekroczeniu progu czasu. W danych wyjściowych debugera zobaczysz kilka sugestii dotyczących rozpoczęcia, w tym linków, które można wybrać. Na przykład:

    **** 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!
    
  • Użyj !analyze, aby wyświetlić informacje o awarii oraz inne polecenia rozszerzenia UMDF, które możesz wypróbować. To polecenie może pomóc w przypadku błędów weryfikatora UMDF lub nieobsługiwanych wyjątków UMDF. Można go użyć do debugowania jądra na żywo lub debugowania plików zrzutu awaryjnego użytkownika z %ProgramData%\Microsoft\WDF.

  • Użyj !proces 0 0x1f wudfhost.exe, aby wyświetlić listę wszystkich procesów hostujących sterowniki Wudfhost.exe, w tym informacje o stosie wątku.

    Można również użyć !wdfkd.wdfumtriage i !wdfkd.wdfldr, aby wyświetlić wszystkie sterowniki, które są obecnie powiązane z WDF. Po wybraniu nazwy obrazu sterownika UMDF debuger wyświetla adres procesu hostingu. Następnie możesz wybrać adres procesu, aby wyświetlić informacje specyficzne dla tego procesu.

  • W razie potrzeby użyj .process /r /p Process, aby przełączyć kontekst procesu na proces Wudfhost hostujący sterownik. Użyj .cache forcedecodeuser i lmu, aby sprawdzić, czy sterownik jest hostowany w bieżącym procesie.

  • Sprawdź stosy wywołań wątków (!wątek Adres), aby ustalić, czy limit czasu wywołania zwrotnego sterownika został przekroczony. Sprawdź liczbę tyknięć wątków. W systemie Windows 8.1 reflektor przekracza limit czasu po minucie.

  • Użyj !wdfkd.wdfdriverinfo MyDriver.dll 0x10, aby wyświetlić drzewo urządzeń w trybie szczegółowym. Następnie wybierz pozycję !wdfdevice. To polecenie wyświetla szczegółowe informacje o zasilaniu, zasadach zasilania i stanie Plug and Play (PnP).

  • Użyj !wdfkd.wdfumirps, aby wyszukać oczekujące IRP-y.

  • Użyj !wdfkd.wdfdevicequeues, aby sprawdzić stan kolejek sterownika.

  • W sesji debugowania trybu jądra można użyć !wmitrace.logdump WudfTrace, aby wyświetlić dziennik śledzenia.

Wyświetlanie dziennika IFR UMDF 2.0

W sesji debugowania w trybie jądra można użyć rozszerzenia !wdfkd.wdflogdump, aby wyświetlić rekordy dziennika Windows Driver Frameworks (WDF) In-flight Recorder (IFR), jeśli są dostępne.

Znajdowanie plików zrzutu pamięci

Zobacz sekcję "Określanie, dlaczego reflektor zakończył proces hosta", aby uzyskać informacje na temat znajdowania zrzutów pamięci trybu użytkownika. Zobacz Using WPP Software Tracing in UMDF Drivers (Używanie funkcji śledzenia oprogramowania WPP w sterownikach UMDF), aby uzyskać informacje na temat ustawiania wartości rejestru LogMinidumpType w celu określenia typu informacji przechowywanych w pliku minidump.