Udostępnij przez


Obsługiwane sterowniki

Aby sdV zweryfikować sterownik, musi być w stanie zinterpretować kod sterownika, w szczególności punkty wejścia sterownika i kod w funkcjach i procedurach, które obsługują wymagane funkcje sterownika.

W poniższych sekcjach opisano podstawowe wymagania dotyczące sterowników oraz określoną składnię sterowników, którą oczekuje SDV i które weryfikuje. SdV nie sprawdza, czy sterowniki spełniają te wymagania, ale jeśli sterownik nie jest zgodny, SDV może nie działać, a w rzadkich sytuacjach zgłasza fałszywie dodatnie lub fałszywie ujemne wyniki z powodu błędnej interpretacji.

Ważne

SdV nie jest już obsługiwane i SDV nie jest dostępny w wersjach zestawu WDK lub EWDK systemu Windows 24H2. Nie jest on dostępny w zestawach WDK nowszych niż kompilacja 26017 i nie jest uwzględniony w zestawie WDK systemu Windows 24H2 RTM. SDV może być nadal używany przez pobranie pakietu EWDK dla systemu Windows 11 w wersji 22H2 (wydanego 24 października 2023 r.) z narzędziami kompilacji Visual Studio 17.1.5, z linku 'Pobierz zestaw sterowników systemu Windows (WDK)'. Zaleca się używanie Enterprise WDK do uruchamiania SDV. Używanie starszych wersji standardowego zestawu WDK w połączeniu z najnowszymi wersjami programu Visual Studio nie jest zalecane, ponieważ prawdopodobnie spowoduje to błędy analizy.
W przyszłości kodQL będzie podstawowym narzędziem do analizy statycznej 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ń, wzorców i nie tylko. Aby uzyskać więcej informacji na temat korzystania z CodeQL, zobacz CodeQL i Static Tools Logo Test.

Podstawowe cechy sterownika

SdV jest w stanie zweryfikować tylko sterowniki o następujących cechach:

  • SdV weryfikuje sterowniki i biblioteki napisane w języku C i C++.

  • SdV przeprowadza pełną weryfikację tylko na sterownikach urządzeń zgodnych z kmDF i WDM (sterowników funkcji, sterowników filtrów i sterowników magistrali), sterownikach NDIS (sterowników filtrów, miniportów i protokołów) i sterownikach Storport.

  • SdV próbuje ograniczyć weryfikację właściwości ogólnych (takich jak NullCheck) dla sterowników, które nie mieszczą się w powyższych kategoriach.

  • SDV może zweryfikować sterowniki WDM, które deklarują swoje funkcje wywołania zwrotnego, używając typów ról funkcji WDM. Aby uzyskać informacje na temat deklarowania funkcji, zobacz Deklarowanie funkcji przy użyciu typów ról funkcji dla sterowników WDM.

  • SDV może sprawdzić sterowniki, które są tworzone z Kernel-Mode Driver Framework, pod warunkiem, że zadeklarujesz każdą funkcję wywołania zwrotnego przy użyciu SDV-KMDF rodzaju roli funkcji wywołania zwrotnego. Aby uzyskać więcej informacji, zobacz Deklarowanie funkcji przy użyciu typów ról funkcji dla sterowników KMDF.

  • SDV może zweryfikować sterowniki NDIS, pod warunkiem że każda funkcja wywołania zwrotnego jest opisana deklaracją funkcji przy użyciu typu funkcji wywołania zwrotnego SDV-NDIS. Aby uzyskać więcej informacji, zobacz Deklarowanie funkcji przy użyciu typów ról funkcji dla sterowników NDIS.

  • SDV może zweryfikować sterowniki Storport, pod warunkiem, że dodasz adnotację do każdej funkcji wywołania zwrotnego z deklaracją funkcji. W tym celu należy użyć funkcji zwrotnej typu SDV-Storport. Aby uzyskać więcej informacji, zobacz Deklarowanie funkcji przy użyciu typów ról funkcji dla sterowników Storport.

Podstawowe wymagania dotyczące sterowników

Aby sdV zweryfikować sterownik WDM, sterownik musi:

Aby SDV zweryfikować sterownik KMDF, sterownik musi:

Aby SDV zweryfikował sterownik NDIS, musi on:

Ponadto sdV może zweryfikować sterowniki, które obsługują:

Nazwy funkcji zarezerwowanych

Aparat weryfikacji SDV nie działa prawidłowo, gdy sterownik lub kod biblioteki używa tych samych wzorców nazw funkcji, które sdV używa wewnętrznie.

W szczególności sdV nie interpretuje poprawnie kodu, jeśli:

  • Kod zawiera nazwy funkcji rozpoczynające się od __init, po których następuje co najmniej jedna liczba całkowita, taka jak __init123.

  • Kod zawiera nazwy funkcji rozpoczynające się od sdv_, takich jak sdv_Func, lub zawierają ciąg _sdv_, taki jak Func_sdv_ lub Func_sdv_foo.

  • Biblioteka używa .def pliku do zmiany nazwy wyeksportowanej funkcji, a nazwa zewnętrzna jest taka sama jak nazwa innej funkcji statycznej w bibliotece.

Jeśli kod sterownika lub kod biblioteki zawiera te elementy, sdV próbuje zweryfikować sterownik lub przetworzyć bibliotekę, ale wynikiem jest nieobsługiwana funkcja (NSF). Aby uzyskać więcej informacji na temat wyników SDV, zobacz Interpretowanie wyników weryfikatora sterowników statycznych.