Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
För att SDV ska kunna verifiera en drivrutin måste den kunna tolka drivrutinskoden, särskilt förarens startpunkter och koden i funktioner och rutiner som stöder nödvändiga drivrutinsfunktioner.
I följande avsnitt beskrivs de grundläggande kraven för drivrutiner och den specifika syntax som SDV förväntar sig av de drivrutiner som verifieras. SDV verifierar inte att drivrutinerna uppfyller dessa krav, men om drivrutinen inte uppfyller kraven kan SDV inte köras och i sällsynta fall rapporterar den falska positiva eller falska negativa resultat på grund av feltolkning.
Viktigt!
SDV stöds inte längre och SDV är inte tillgängligt i Windows 24H2 WDK- eller EWDK-versioner. Den är inte tillgänglig i WDK:er som är nyare än version 26017 och ingår inte i Windows 24H2 RTM WDK.
SDV kan fortfarande användas genom att ladda ner Windows 11, version 22H2 EWDK (släppt den 24 oktober 2023) med Visual Studio build tools 17.1.5 från Ladda ned Windows Driver Kit (WDK). Endast användning av Enterprise WDK för att köra SDV rekommenderas. Användning av äldre versioner av standard-WDK tillsammans med de senaste versionerna av Visual Studio rekommenderas inte, eftersom detta sannolikt resulterar i analysfel.
Framöver är CodeQL det primära statiska analysverktyget för drivrutiner. CodeQL tillhandahåller ett kraftfullt frågespråk som behandlar kod som en databas som ska frågas, vilket gör det enkelt att skriva frågor för specifika beteenden, mönster med mera.
Mer information om hur du använder CodeQL finns i CodeQL och logotestet för statiska verktyg.
Grundläggande drivrutinskaraktäristik
SDV kan bara verifiera drivrutiner med följande egenskaper:
SDV verifierar drivrutiner och bibliotek som är skrivna i C och C++.
SDV utför endast fullständig verifiering på KMDF-kompatibla och WDM-kompatibla enhetsdrivrutiner (funktionsdrivrutiner, filterdrivrutiner och bussdrivrutiner), NDIS-drivrutiner (filter-, miniport- och protokolldrivrutiner) och Storport-drivrutiner.
SDV försöker begränsa verifieringen av generiska egenskaper (till exempel NullCheck) för drivrutiner som inte passar in i kategorierna ovan.
SDV kan verifiera WDM-drivrutiner som deklarerar sina callbackfunktioner genom att använda WDM-funktionernas rolltyper. Information om hur du deklarerar funktioner finns i Deklarera funktioner med funktionsrolltyper för WDM-drivrutiner.
SDV kan verifiera drivrutiner som skapas från Kernel-Mode Driver Framework, förutsatt att du deklarerar varje återanropsfunktion med hjälp av en SDV-KMDF rolltyp för återanropsfunktionen. Mer information finns i Deklarera funktioner med hjälp av funktionsrolltyper för KMDF-drivrutiner.
SDV kan verifiera NDIS-drivrutiner, förutsatt att du kommenterar varje återanropsfunktion med funktionsdeklarationen med hjälp av en SDV-NDIS återanropsfunktionstyp. Mer information finns i Deklarera funktioner med hjälp av funktionsrolltyper för NDIS-drivrutiner.
SDV kan verifiera Storport-drivrutiner, förutsatt att du kommenterar varje återanropsfunktion med funktionsdeklarationen. Så här gör du genom att använda en SDV-Storport-återanropsfunktionstyp. Mer information finns i Deklarera funktioner med hjälp av funktionsrolltyper för Storport-drivrutiner.
Grundläggande drivrutinskrav
För att SDV ska kunna verifiera en WDM-drivrutin måste drivrutinen:
Inkludera Wdm.h eller Ntddk.h (Wdm.h är en delmängd av Ntddk.h).
Skapa enhetsobjekt med hjälp av metoder som beskrivs i Introduktion till enhetsobjekt och följande.
Ha en Avlastningsrutin som är skriven enligt rekommendationerna i Skriva en avlastningsrutin.
Deklarera varje sändningsfunktion med hjälp av en deklaration av funktionsrolltyp, som beskrivs i Använda deklarationer av funktionsrolltyp. Information om WDM-rolltyperna och _Dispatch_type_ (typ) anteckningar finns i Deklarera funktioner med funktionsrolltyper för WDM-drivrutiner.
För att SDV ska kunna verifiera en KMDF-drivrutin måste den:
Inkludera Wdf.h och Ntddk.h.
Skapa DE KMDF-objekt som beskrivs i Använda ramverket för att utveckla en drivrutin.
Kommentera varje återanropsfunktion med hjälp av en SDV-KMDF rolltyp för återanropsfunktionen, som beskrivs i Använda deklarationer av funktionsrolltyp. En lista över de rolltyper som stöds finns i KMDF-funktionsdeklarationer för statisk drivrutinsverifierare.
För att SDV ska kunna verifiera en NDIS-drivrutin måste drivrutinen:
Inkludera Ndis.h och Ntddk.h.
Följ riktlinjerna i guiden Nätverksdesign) för att skapa NDIS-drivrutiner.
Kommentera varje återanropsfunktion med hjälp av en SDV-NDIS rolltyp för återanropsfunktionen enligt beskrivningen i Använda deklarationer av funktionsrolltyp. En lista över de rolltyper som stöds finns i NDIS-funktionsdeklarationer för statisk drivrutinsverifierare.
Dessutom kan SDV verifiera drivrutiner som stöder:
Namn på reserverade funktioner
SDV-verifieringsmotorn fungerar inte korrekt när drivrutinen eller bibliotekskoden använder samma funktionsnamnmönster som SDV använder internt.
Mer specifikt tolkar SDV inte kod korrekt om:
Koden innehåller funktionsnamn som börjar med __init och följs av ett eller flera heltal, till exempel __init123.
Koden innehåller funktionsnamn som börjar med sdv_, till exempel sdv_Func, eller innehåller strängen _sdv_, till exempel Func_sdv_ eller Func_sdv_foo.
Biblioteket använder en
.deffil för att byta namn på en exporterad funktion och det externa namnet är detsamma som namnet på en annan statisk funktion i biblioteket.
Om drivrutinskoden eller bibliotekskoden innehåller dessa element försöker SDV verifiera drivrutinen eller bearbeta biblioteket, men resultatet stöds inte av funktionen (NSF).. Mer information om SDV-resultat finns i Tolka resultat för statisk drivrutinsverifierare.