Udostępnij przez


Korzystanie z weryfikatora KMDF

Platforma udostępnia wbudowane funkcje weryfikacji, których można użyć do testowania uruchomionego sterownika KMDF. Ta funkcja, nazywana weryfikatorem KMDF, w szerokim zakresie weryfikuje stan sterownika i argumenty, które sterownik przekazuje do metod obiektów struktury. Weryfikator struktury można użyć samodzielnie lub razem z narzędziem weryfikatora sterowników ogólnego przeznaczenia (Verifier.exe).

Jeśli weryfikator KMDF jest włączony, framework sprawdza nabywanie blokad i hierarchie, zapewnia, że wywołania do frameworka występują na prawidłowym poziomie IRQL, weryfikuje prawidłowe anulowanie operacji we/wy i użycie kolejek oraz zapewnia zgodność sterownika i frameworka z udokumentowanymi kontraktami. Może również symulować sytuacje braku pamięci, aby programista sterownika mógł sprawdzić, czy sterownik reaguje prawidłowo bez awarii, zawieszenia lub niepowodzenia przy wyładowaniu.

Gdy weryfikator KMDF jest włączony, framework zatrzymuje się na debugerze, jeśli domyślny 60-sekundowy limit czasu wygaśnie, zanim zakończą się niektóre z wcześniej opisanych zdarzeń. Teraz możesz debugować problem lub wpisać "g" w debugerze, aby zrestartować odliczanie czasu. Domyślny okres limitu czasu można zmienić przy użyciu wartości rejestru DbgWaitForSignalTimeoutInSecopisanej w temacie Kontrolowanie zachowania weryfikatora.

Zalecamy uruchomienie weryfikatora sterowników (Verifier.exe) podczas testowania oraz dodanie własnego sterownika i wdf01000.sys do listy weryfikacji.

Uwaga

Weryfikator KMDF jest automatycznie włączany przy użyciu ustawień Weryfikatora sterownika /standard. Jeśli używasz /flags zamiast ustawienia weryfikatora sterowników /standard, pamiętaj, że w systemie Windows 10, wersja 1803 lub w nowszych kompilacjach, /flags jest oznaczone jako przestarzałe na rzecz /ruleclasses. Klasa reguł dla WDF to 34. Aby włączyć weryfikatora WDF, jeśli /standard nie jest używany, użyj polecenia /ruleclasses 34.

Możesz również użyć aplikacji kontroli WDF (WdfVerifier.exe), aby włączyć i wyłączyć weryfikator KMDF.

Włączanie i wyłączanie wbudowanej weryfikacji frameworku

Weryfikator KMDF można włączyć ręcznie, korzystając z tej procedury:

  1. Jeśli sterownik został już załadowany, użyj Menedżera urządzeń, aby wyłączyć urządzenie. Wyłączenie urządzenia powoduje odinstalowanie sterownika.

  2. Użyj RegEdit, aby ustawić VerifierOn na wartość niezerową w podkluczu Parameters\Wdf sterownika HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services w rejestrze systemu Windows. Wartość niezerowa wskazuje, że weryfikator KMDF jest włączony.

    Może być konieczne ręczne dodanie VerifierOn do podklucza, jeśli jeszcze nie istnieje.

  3. Użyj Menedżera urządzeń, aby ponownie włączyć urządzenie, a tym samym załadować sterownik.

  4. Gdy sterownik wywołuje funkcję WdfDriverCreate, platforma sprawdza rejestr i włącza weryfikatora platformy, jeśli VerifierOn ma wartość niezerową.

Aby wyłączyć weryfikatora ramy, wykonaj te same kroki, ale ustaw wartość VerifierOn na zero.

Aby określić, czy weryfikator środowiska jest włączony, ustaw punkt przerwania w lokalizacji po wywołaniu funkcji WdfDriverCreate i użyj polecenia rozszerzenia debugera o nazwie !wdfdriverinfo.

!wdfkd.wdfdriverinfo<twoja nazwa sterownika> **** 0x1

Aby uzyskać więcej informacji na temat poleceń rozszerzenia debugera, zobacz Debugger Extensions for Framework-based Drivers (Rozszerzenia debugera dla sterowników opartych na strukturze).

Kontrolowanie zachowania weryfikatora

Zalecamy użycie aplikacji kontrolnej weryfikatora WDF do kontrolowania poniższych opcji. Można jednak bezpośrednio zmodyfikować następujące wartości w rejestrze.

Odpowiednie wartości znajdują się w podkluczu Parameters\Wdf klucza HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services .

VerifyOn (REG_DWORD)
Ustaw tę wartość na wartość niezerową, aby włączyć makro WDFVERIFY .

DbgBreakOnError (REG_DWORD)
Jeśli ta wartość jest ustawiona na wartość niezerową, struktura wejdzie w tryb debugowania w debugerze (jeśli jest dostępny) za każdym razem, gdy sterownik wywołuje WdfVerifierDbgBreakPoint.

DbgWaitForSignalTimeoutInSec (REG_DWORD)
Począwszy od systemu Windows 8, gdy parametr VerifierOn i DbgBreakOnError są ustawione na wartości inne niżzerowe, sterownik może zmienić domyślny limit czasu, ustawiając wartość DbgWaitForSignalTimeoutInSec.

VerifierAllocateFailCount (REG_DWORD)
Jeśli ta wartość jest ustawiona na n, wszystkie próby przydzielenia pamięci dla obiektów sterownika po n-tej alokacji nie powiodą się.

TrackHandles (REG_MULTI_SZ)
Jeśli ta wartość jest ustawiona na listę co najmniej jednej nazwy typów uchwytów obiektów struktury, struktura śledzi odwołania do wszystkich uchwytów obiektów, które pasują do określonych typów uchwytów.

EnhancedVerifierOptions (REG_DWORD)
Tylko KMDF

Zawiera mapę bitową, której można użyć do włączenia opcjonalnych funkcji weryfikatora platformy.

VerifyDownLevel (REG_DWORD)
Jeśli ustawiono wartość niezerową, a jeśli sterownik został skompilowany z wersją struktury starszej niż bieżąca wersja, weryfikator platformy zawiera testy, które zostały dodane po skompilowania sterownika.

Ogólnie rzecz biorąc, jeśli ustawisz powyższe wartości rejestru, usuń je, gdy nie są już potrzebne.

Aby uzyskać pełne opisy tych wartości rejestru, zobacz Wartości rejestru dla debugowania sterowników opartych na strukturze.