Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Weryfikator sterowników statycznych (SDV) używa zestawu reguł interfejsu i modelu systemu operacyjnego w celu określenia, czy sterownik prawidłowo współdziała z systemem operacyjnym Windows. SdV znajduje wady w kodzie sterownika, które mogą wskazywać na potencjalne błędy w sterownikach.
SdV może analizować sterowniki trybu jądra zgodne z jednym z następujących modeli sterowników: WDM, KMDF, NDIS lub Storport. Aby uzyskać więcej informacji, zobacz Obsługiwane sterowniki i Określanie, czy statyczny weryfikator sterowników obsługuje sterownik lub bibliotekę. Ponadto SDV zapewnia ograniczoną obsługę (poważnie ograniczony zestaw reguł koncentrujący się na ogólnych błędach, takich jak dereferencje wartości null) dla sterowników, które nie są zgodne z powyższymi modelami sterowników.
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 po pobraniu Windows 11 w wersji 22H2 EWDK (wydanego 24 października 2023 r.) wraz z narzędziami kompilacyjnymi programu Visual Studio 17.1.5 z #B0 Pobierz zestaw sterowników systemu Windows (WDK) #A1. 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.
Przygotowywanie kodu źródłowego
Wykonaj poniższe kroki, aby przygotować kod do analizy.
Deklarowanie funkcji dostarczanych przez sterownik przy użyciu typów ról funkcji
SdV wymaga zadeklarowania funkcji przy użyciu deklaracji typów ról funkcji. Na przykład procedura DriverEntry musi być zadeklarowana za pomocą typu roli funkcji DRIVER_INITIALIZE:
DRIVER_INITIALIZE DriverEntry;Po deklaracji należy zaimplementować (lub zdefiniować) procedurę wywołania zwrotnego w następujący sposób:
/ // Driver initialization routine // NTSTATUS DriverEntry( _In_ struct _DRIVER_OBJECT *DriverObject, _In_ PUNICODE_STRING RegistryPath ) { // Function body }Każdy obsługiwany model sterownika ma zestaw ról funkcji dla funkcji wywołań zwrotnych sterownika i procedur dyspozycji. Typy ról funkcji są deklarowane w plikach nagłówkowych WDK. Na przykład poniżej przedstawiono prototyp funkcji dla typu roli DRIVER_INITIALIZE, który pojawia się w pliku Wdm.h.
/ // Define driver initialization routine type. // _Function_class_(DRIVER_INITIALIZE) _IRQL_requires_same_ typedef NTSTATUS DRIVER_INITIALIZE ( _In_ struct _DRIVER_OBJECT *DriverObject, _In_ PUNICODE_STRING RegistryPath ); typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE;Ponieważ typy ról funkcji są już zdefiniowane w plikach nagłówkowych WDK, wystarczy zadeklarować swoje funkcje wywołania zwrotnego jako odpowiedni typ. W takim przypadku należy zadeklarować, że driverEntry ma być typu DRIVER_INITIALIZE. Aby uzyskać pełną listę typów ról funkcji dla modeli sterowników, zobacz Używanie deklaracji typów ról funkcji.
Uruchamianie analizy kodu dla języka C/C++
Aby ułatwić określenie, czy kod źródłowy jest przygotowany, uruchom narzędzie Analiza kodu w programie Visual Studio. Narzędzie do analizy kodu sprawdza deklaracje typów ról funkcji wymaganych przez SDV. Narzędzie analiza kodu może pomóc zidentyfikować wszelkie deklaracje funkcji, które mogły zostać pominięte lub ostrzegać, gdy parametry definicji funkcji nie pasują do tych w typie roli funkcji.
- Otwórz projekt sterownika w programie Visual Studio.
- W menu Kompilacja kliknij pozycję Uruchom analizę kodu w rozwiązaniu.
Wyniki są wyświetlane w oknie Analiza kodu . Napraw wszelkie deklaracje funkcji, które mogły zostać pominięte. Możesz również skonfigurować narzędzie do analizy kodu, tak aby było uruchamiane przy każdej kompilacji rozwiązania.
W poniższej tabeli przedstawiono niektóre ostrzeżenia, które narzędzie analizy kodu może znaleźć w kodzie sterownika. Aby uruchomić statyczny weryfikator sterowników, sterownik musi być wolny od tych wad.
Analiza kodu ostrzeżeń C/C++ Opis C28101 Moduł Sterowniki wywnioskował, że bieżąca funkcja jest funkcją <typu> C28022 Klasa(es) funkcji w tej funkcji nie jest zgodna z klasami funkcji (es) w definicji typów użytej do jej zdefiniowania. C28023 Przypisana lub przekazana funkcja powinna mieć adnotację _Function_class_ dla co najmniej jednej z klas(es) C28024 Wskaźnik funkcji, do którego jest przypisywany, jest adnotacjami z klasą funkcji, która nie znajduje się na liście klas funkcji. C28169 Funkcja <> dispatch nie ma żadnych adnotacji _Dispatch_type_ C28208 Podpis funkcji nie jest zgodny z deklaracjami funkcji
Uruchamianie weryfikatora sterowników statycznych
Otwórz plik projektu sterownika (vcxProj) w programie Visual Studio. W menu sterowników kliknij Uruchom Weryfikator Sterowników Statycznych….
Spowoduje to otwarcie aplikacji Static Driver Verifier, w której można kontrolować, konfigurować i planować, gdy weryfikator sterowników statycznych wykonuje analizę.
Jeśli sterownik zawiera bibliotekę, kliknij kartę Biblioteki i kliknij pozycję Dodaj bibliotekę , aby dodać bibliotekę.
Przejdź do katalogu kodu źródłowego biblioteki i wybierz plik projektu (vcxProj). Dodaj wszystkie biblioteki, które zawiera sterownik. Biblioteki muszą być dodane przed analizą sterownika przez SDV. Po rozpoczęciu analizy sterownika, SDV również analizuje biblioteki, które nie zostały przetworzone. Po przetworzeniu biblioteki jest ona przechowywana w globalnej pamięci podręcznej SDV. Aby uzyskać więcej informacji, zobacz Przetwarzanie biblioteki w weryfikatorze sterowników statycznych
Sprawdź ustawienia konfiguracji weryfikatora sterowników statycznych. Kliknij kartę Konfiguruj .
Konfiguracja projektu Konfiguracja projektu przedstawia konfigurację i ustawienia platformy wybrane w programie Visual Studio.
Zasoby W większości przypadków można użyć ustawień domyślnych. Jeśli SDV zgłasza Timeout, GiveUp lub Spaceout, możesz spróbować dostosować te ustawienia. Aby uzyskać więcej informacji, zobacz Zalecenia dotyczące rozwiązywania problemów ze statycznym weryfikatorem sterowników.
Harmonogram Wybierz godzinę rozpoczęcia weryfikacji. Ustawieniem domyślnym jest rozpoczęcie analizy natychmiast po kliknięciu przycisku Start na karcie Główne . W zależności od rozmiaru sterownika i jego złożoności analiza statyczna może zająć dużo czasu. Możesz zaplanować analizę, aby rozpocząć, gdy jest ona dla Ciebie najbardziej wygodna; na przykład na koniec dnia.
Uwaga
Pamiętaj, aby sprawdzić plan zarządzania energią komputera, aby upewnić się, że komputer nie przejdzie w stan uśpienia podczas analizy.
Kliknij kartę Reguły , aby wybrać reguły użycia interfejsu API sterowników, które mają być weryfikowane po rozpoczęciu analizy.
Statyczny weryfikator sterowników wykrywa typ analizowanego sterownika (WDF, WDM, NDIS lub Storport) i wybiera domyślny zestaw reguł dla typu sterownika. Jeśli jest to pierwszy raz, gdy uruchamiasz SDV na swoim sterowniku, powinieneś użyć domyślnego zestawu reguł.
Aby uzyskać informacje o regułach, zobacz Reguły zgodności DDI.
Uruchom analizę statyczną. Kliknij kartę Main (Główne ), a następnie kliknij przycisk Start. Po kliknięciu przycisku Start zostanie wyświetlony komunikat informujący, że analiza statyczna jest zaplanowana i że uruchomienie analizy może zająć dużo czasu. Kliknij przycisk OK, aby kontynuować. Analiza rozpoczyna się w zaplanowanym czasie.
Wyświetlanie i analizowanie wyników
W miarę postępu analizy statycznej sdV raportuje stan analizy. Po zakończeniu analizy sdV raportuje wyniki i statystyki. Jeśli sterownik nie spełnia reguły użycia interfejsu API, wynik jest zgłaszany jako usterka.
Jeśli napotkano jakiekolwiek problemy, sdV wyświetla je na stronach Ostrzeżenia i Błędy . Na stronie Właściwości sterownika są wyświetlane wyniki testów dla niektórych właściwości sterownika. Testy właściwości sterowników służą do identyfikowania funkcji sterowników w celu dalszej kwalifikacji analizy. Możesz użyć wyników Właściwości sterownika , aby potwierdzić oczekiwane właściwości i obsługiwane możliwości sterownika.
Aby wyświetlić określone wady w raporcie statycznego weryfikatora sterowników, kliknij wadę w okienku Wyniki . Spowoduje to otwarcie przeglądarki śledzenia, która wyświetla ślad ścieżki kodu do naruszenia reguły. Aby uzyskać więcej informacji, zobacz Interpretowanie wyników weryfikatora sterowników statycznych.
Uwaga
Weryfikator sterowników statycznych zachowuje wyniki i ustawienia z analizy. Aby wyczyścić wyniki, kliknij pozycję Wyczyść.
Rozwiązywanie problemów z wynikami statycznego weryfikatora sterowników
Jeśli SDV zgłasza, że nie znaleziono wad, sprawdź zakładkę Główne, aby upewnić się, że punkty wejścia zostały wykryte. Jeśli sterownik nie deklaruje funkcji przy użyciu typów ról funkcji, sdV nie będzie w stanie przeanalizować i znaleźć wad w kodzie sterownika. Aby uzyskać więcej informacji, zobacz Używanie Deklaracji Typu Roli Funkcji.
Jeśli zestaw SDV zgłasza przekroczenia limitu czasu lub nie zwraca przydatnych wyników, może być konieczne zmiana kilku opcji konfiguracji SDV. Aby uzyskać więcej informacji na temat rozwiązywania problemów z zestawem SDV, zobacz Zalecenia dotyczące rozwiązywania problemów ze statycznym weryfikatorem sterowników.
Tematy pokrewne
Określanie, czy weryfikator sterowników statycznych obsługuje sterownik lub bibliotekę
Używanie deklaracji typów ról funkcji