Översikt över kodanalys för drivrutiner

Windows Driver Kit tillhandahåller ett drivrutinsspecifikt tillägg till verktyget Kodanalys i Microsoft Visual Studio. Kodanalys för drivrutiner innehåller regler som endast gäller för drivrutiner, särskilt drivrutiner i kernelläge. Kodanalys för drivrutiner kan identifiera potentiella fel i koden så snart koden kan kompileras.

Viktigt!

Kodanalys för drivrutiner är tillgängligt i Windows 24H2 WDK och EWDK, men observera att den är inställd på att dras tillbaka vid ett framtida datum.
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. För mer information om hur du använder CodeQL, se CodeQL och logotestet för verktyg för statisk analys.

Så här fungerar kodanalysverktyget

Verktyget Kodanalys fångar upp byggverktygets anrop till standardkompilatorn Cl.exe och kör i stället en CL-skärningskompilator som analyserar drivrutins källkoden och skapar en loggfil med fel- och varningsmeddelanden. Du kan köra verktyget Kodanalys på egen hand, eller så kan du konfigurera kodanalysverktyget så att det körs när du skapar drivrutinen. När du kör verktyget Kodanalys på egen hand (Analysera > körningskodanalys på lösning) visas resultaten i fönstret Kodanalysrapport. När du kör verktyget Kodanalys som en del av bygget skapar CL-kompilatorn en loggfil med fel- och varningsmeddelanden och anropar sedan standardversionen av Cl.exe för att skapa byggutdata. De resulterande objektfilerna är desamma som de som skapas av ett standardversionskommando.

När kompilatorn för avlyssning körs undersöker Kodanalys för drivrutiner varje funktion i koden oberoende av varandra och simulerar sedan körningen av alla möjliga sökvägar genom koden, och letar efter vanliga drivrutinsfel och oklolande kodningsmetoder. Kodanalysverktyget körs relativt snabbt, även på större drivrutiner, och rapporten som genereras identifierar exakt raden med drivrutinskoden med det misstänkta felet.

De typer av fel som kodanalys kan identifiera

Kodanalys kan identifiera flera typer av fel, inklusive fel i följande kategorier:

  • Minne: Potentiella minnesläckor, derefererade NULL-pekare , åtkomst till oinitierat minne, överdriven användning av kernellägesstacken och felaktig användning av pooltaggar.

  • Resurser: Det gick inte att frigöra resurser, till exempel lås, resurser som ska lagras när vissa funktioner anropas och resurser som inte ska sparas när andra funktioner anropas.

  • Funktionsanvändning: Potentiellt felaktig användning av vissa funktioner, funktionsargument som verkar felaktiga, möjliga felmatchningar av argumenttyp för funktioner som inte strikt kontrollerar typer, eventuell användning av vissa föråldrade funktioner och funktionsanrop vid en potentiellt felaktig IRQL.

  • Flyttalstillstånd: Det gick inte att skydda maskinvarutillståndet för flyttalsen i en drivrutin och försöker återställa flyttalstillståndet när det har sparats på en annan IRQL.

  • Prioritetsregler: Kod som kanske inte fungerar som programmeraren avsett på grund av prioritetsreglerna för C-programmering.

  • Kodningsmetoder i kernelläge: Kodningsmetoder som kan orsaka fel, till exempel att ändra en Ogenomskinlig MDL-struktur (Memory Descriptor List), misslyckas med att undersöka värdet för en variabel som anges av en anropad funktion och använda C/C++-strängmanipuleringsfunktioner i stället för de säkra strängfunktioner som definieras i Ntstrsafe.h.

  • Drivrutinsspecifika kodningsmetoder: Specifika åtgärder som ofta är en källa till fel i kernellägesdrivrutiner. Till exempel kopierar du ett helt I/O-begärandepaket (IRP) utan att ändra medlemmar och spara en pekare till ett sträng- eller strukturargument i stället för att kopiera ett argument i en DriverEntry-rutin .

Kodanalysvarningar

Verktyget Kodanalys använder en regelbaserad modell för att identifiera fel i programmet eller drivrutinskoden. Varje regel är associerad med en varning som rapporteras om kodanalysverktyget identifierar en överträdelse av regeln. Detaljerad information om de drivrutinsspecifika varningarna finns i Kodanalys för drivrutiner varningar. Information om den grundläggande uppsättningen varningar som kodanalysverktyget i Visual Studio rapporterar finns i Kodanalysvarningar.

Anteckningar

En av de viktiga funktionerna som verktyget Kodanalys ger är möjligheten att kommentera funktionsbeskrivningar och vissa andra entiteter i drivrutinens källkod. Kodanalysverktyget har ett intrafunktionellt omfång. Det innebär att den analyserar interaktionerna mellan funktioner. Syftet med anteckningarna är att tillhandahålla ett mer fullständigt uttryck för kontraktet mellan de anropade och anropande funktionerna, så att kodanalysverktyget kan kontrollera att kontraktet är uppfyllt. Ett annat mål med anteckningarna är att de informerar den som läser koden om hur funktionen ska användas och vilka resultat som kan förväntas. Anteckningarna deklarerar gränssnittets kontrakt och försöker inte beskriva hur kontraktet uppnås. I många fall återspeglar resultaten från körningen av kodanalysverktyget frånvaron av en lämplig anteckning, och genom att lägga till anteckningen ignoreras både varningen om den saknade anteckningen och ytterligare kontroller aktiveras. Mer information finns i SAL 2.0-anteckningar för Windows-drivrutiner. Mer information om SAL 2.0 finns i Använda SAL-anteckningar för att minska C/C++-kodfel. SAL 2.0 ersätter SAL 1.0. SAL 2.0 ska användas med WDK för Windows 8. Om du behöver information om SAL 1.0 för drivrutiner kan du läsa dokumentationen PREfast for Drivers Annotations som levererades med WDK för Windows 7.

Tolka resultatet

Kodanalys för drivrutiner är lätt att köra och den körs snabbt, även på mycket stora drivrutiner och program. Utvecklarens arbete är att undersöka utdata, analysera felen som kodanalysverktyget identifierade och skilja verkliga kodfel från giltig kod som kodanalysverktyget misstolkade.

En omfattande referens som beskriver varje varning som kodanalysverktyget kan identifiera finns i Kodanalys för drivrutiner varningar. Information om den grundläggande uppsättningen varningar som kodanalysverktyget i Visual Studio rapporterar finns i Kodanalysvarningar.

När du löser en kodanalysvarning kan du antingen uppdatera källkoden när det är lämpligt eller lägga till en anteckning för att förtydliga funktionskontraktet. Genom att lägga till en anteckning kan analysatorn framtvinga kontraktet för alla framtida anropare, och det förbättrar även läsbarheten.

Om kodanalysresultatet visar fel som du efter noggrann undersökning bedömer är ogiltiga och inte kan undvikas även med hjälp av anteckningar, kan du välja att exkludera eller utelämna dessa varningar. Mer information finns i Köra kodanalys för drivrutiner.

Så här kör du kodanalys för drivrutiner

Kodanalysverktyg i Visual Studio

Kodanalys för förarvarningar

Kodanalysvarningar

SAL 2.0-anteckningar för Windows-drivrutiner