Udostępnij przez


Narzędzia do weryfikowania sterowników

Zestaw Sterowników systemu Windows (WDK) udostępnia narzędzia do weryfikacji sterowników, które ułatwiają wykrywanie i poprawianie błędów podczas programowania. Te narzędzia obejmują narzędzia do analizy statycznej, takie jak CodeQL i narzędzia dynamiczne, takie jak Weryfikator sterowników, które mogą znajdować krytyczne usterki przed wdrożeniem. Korzystanie z tych narzędzi weryfikacji na wczesnym etapie programowania pozwala zaoszczędzić czas i zapobiega poważnym problemom ze sterownikiem w środowisku produkcyjnym.

W dokumentacji zestawu WDK opisano te narzędzia weryfikacji i zaleca się ich użycie, ponieważ każde narzędzie wykrywa różne typy błędów sterowników na różne sposoby. Te narzędzia są znacznie bardziej wydajne niż kontrole ręczne. Mogą wykrywać błędy, które nie są zwykle spotykane w standardowych testach sterowników, i uosabiają wiedzę doświadczonych deweloperów sterowników i projektantów interfejsów sterowników systemu Windows.

Aby uzyskać najlepsze wyniki, użyj wszystkich narzędzi, które mogą być uruchamiane na sterowniku. Jeśli pominięto dowolne z tych narzędzi, możesz przegapić poważną usterkę w sterowniku.

Narzędzia do weryfikacji statycznej i dynamicznej

Istnieją dwa podstawowe typy narzędzi weryfikacji:

  • Statyczne narzędzia weryfikacji sprawdzają kod sterownika bez uruchamiania sterownika. Ponieważ te narzędzia nie polegają na testach, które wykonują kod, mogą być bardzo dokładne. Teoretycznie statyczne narzędzia weryfikacji mogą badać cały kod sterownika, w tym ścieżki kodu, które rzadko są wykonywane w praktyce. Jednak ze względu na to, że sterownik nie jest w rzeczywistości uruchomiony, te narzędzia mogą generować wyniki fałszywie dodatnie. Oznacza to, że mogą zgłaszać błąd w ścieżce kodu, która nie występuje w praktyce.

    CodeQL to podstawowe narzędzie do analizy statycznej dla sterowników. Język CodeQL udostępnia zaawansowany język zapytań, który traktuje kod jako bazę danych do odpytywania, co ułatwia pisanie zapytań dotyczących określonych zachowań i wzorców. Program zgodności sprzętu systemu Windows wymaga języka CodeQL dla testów logo narzędzia statycznego (STL) w naszych systemach operacyjnych klienta i serwera. Więcej informacji można znaleźć w CodeQL i Teście Logo Narzędzi Statycznych.

  • Dynamiczne narzędzia weryfikacji sprawdzają kod sterownika, gdy sterownik jest uruchomiony, zazwyczaj przechwytując wywołania często używanych procedur obsługi sterowników i podstawiając wywołania do własnych wersji sprawdzania błędów tych samych procedur. Ponieważ sterownik jest rzeczywiście uruchomiony, podczas gdy narzędzia dynamiczne wykonują weryfikację, wyniki fałszywie dodatnie są rzadkie. Jednak ze względu na to, że narzędzia dynamiczne wykrywają tylko akcje, które występują podczas monitorowania sterownika, narzędzia mogą przegapić niektóre wady sterownika, jeśli pokrycie testowe sterownika nie jest odpowiednie. Jednocześnie, korzystając z informacji dostępnych w czasie wykonywania — na przykład informacji, które trudniej jest statycznie wyodrębnić z kodu źródłowego — dynamiczne narzędzia do weryfikacji mogą wykrywać niektóre klasy błędów sterowników, które trudniej wykryć za pomocą narzędzi do analizy statycznej.

Użyj kombinacji statycznych i dynamicznych narzędzi weryfikacji. Narzędzia statyczne umożliwiają sprawdzanie ścieżek kodu, które są trudne do wykonania w praktyce, podczas gdy narzędzia dynamiczne znajdują poważne błędy występujące w sterowniku.

Omówienie narzędzi weryfikacji

Ważne

Narzędzie Static Driver Verifier (SDV) nie jest już obsługiwane. Jest niedostępna w zestawach WDK nowszych niż kompilacja 26017, w tym Windows 24H2 RTM WDK. Używanie SDV do analizy nie jest zalecane.

Zestaw WDK opisuje następujące narzędzia weryfikacji i zaleca ich użycie przez deweloperów sterowników i testerów. Są one wymienione w kolejności, w której zwykle ich używasz.

Po skompilowaniu kodu

  • CodeQL to zaawansowany aparat analizy kodu semantycznego. Połączenie rozbudowanego zestawu zapytań zabezpieczeń o wysokiej wartości i niezawodnej platformy sprawia, że jest to bezcenne narzędzie do zabezpieczania kodu sterownika. Więcej informacji można znaleźć w CodeQL i Teście Logo Narzędzi Statycznych.

Po uruchomieniu sterownika

Użyj następujących narzędzi weryfikacji dynamicznej, gdy tylko sterownik jest skompilowany i działa bez oczywistych błędów.

  • Weryfikator sterowników to dynamiczne narzędzie weryfikacji napisane specjalnie dla sterowników systemu Windows. Obejmuje wiele testów, które można uruchomić na kilku sterownikach jednocześnie. Weryfikator sterowników jest tak skuteczny w wykrywaniu poważnych błędów w sterownikach, że doświadczeni deweloperzy i testerzy sterowników konfigurują go do uruchamiania za każdym razem, gdy ich sterownik działa w środowisku programistycznym lub testowym. Weryfikator sterowników jest dołączony do systemu Windows. Po włączeniu weryfikatora sterowników należy również uruchomić wiele testów na sterowniku. Weryfikator sterowników może wykrywać niektóre błędy sterowników, które są trudne do wykrycia przy użyciu narzędzi weryfikacji statycznej. Przykłady tych typów usterek obejmują następujące elementy:

    • Przepełnienia buforów puli jądra. Gdy zweryfikowany sterownik przydziela bufory pamięci puli, Weryfikator Sterowników chroni je przy użyciu strony pamięci, która nie jest dostępna. Jeśli sterownik spróbuje użyć pamięci poza końcem buforu, weryfikator sterownika inicjuje sprawdzanie usterek.

    • Użycie pamięci po jej uwolnieniu. Specjalne bloki pamięci puli używają własnych stron pamięci i nie dzielą stron pamięci z innymi alokacjami. Gdy sterownik zwalnia blok pamięci puli, odpowiadająca strona pamięci staje się niedostępna. Jeśli sterownik próbuje użyć tej pamięci po jego uwolnieniu, sterownik ulegnie natychmiastowej awarii.

    • Używanie pamięci stronicowalnej podczas działania na podwyższonym poziomie IRQL. Gdy zweryfikowany sterownik podnosi IRQL na DISPATCH_LEVEL lub wyższym, weryfikator sterowników usuwa całą pamięć stronicowaną z zestawu roboczego systemu, symulując działanie systemu pod presją pamięci. Sterownik ulega awarii, jeśli próbuje użyć jednego z tych adresów wirtualnych z możliwością stronicowania.

    • Symulacja niskich zasobów. Aby zasymulować system w warunkach niskich zasobów, weryfikator sterowników może powodować awarie różnych interfejsów API jądra systemu operacyjnego wywoływanych przez sterowniki.

    • Przecieki pamięci. Weryfikator sterowników śledzi alokacje pamięci przez sterownik i upewnia się, że sterownik zwalnia pamięć przed jego wyładowaniem.

    • Operacje we/wy, które zajmują zbyt dużo czasu na ukończenie lub zostają anulowane. Weryfikator sterownika może przetestować logikę sterownika pod kątem reagowania na STATUS_PENDING zwracane wartości z usługi IoCallDriver.

    • Sprawdzanie zgodności DDI. (Dostępne od systemu Windows 8) Weryfikator sterownika stosuje zestaw reguł interfejsu sterownika urządzenia (DDI), które sprawdzają poprawną interakcję między sterownikiem a interfejsem jądra systemu operacyjnego.

  • Sanitizer adresów jądra (KASAN) to technologia wykrywania błędów obsługiwana w sterownikach systemu Windows, która umożliwia wykrywanie kilku klas nielegalnego dostępu do pamięci, takich jak przepełnienie buforu i zdarzenia bez użycia po awarii.

  • Application Verifier to dynamiczne narzędzie weryfikacji dla aplikacji i sterowników trybu użytkownika napisanych w języku C lub C++. Nie weryfikuje kodu zarządzanego.