Använda drivrutinsverifierare för att identifiera problem med Windows-drivrutiner för avancerade användare

Verktyget Drivrutinsverifierare ingår i alla versioner av Windows sedan Windows 2000. Den används för att identifiera och felsöka många drivrutinsproblem som är kända för att orsaka systemfel, fel eller annat oförutsägbart beteende. Den här artikeln beskriver hur du använder drivrutinsverifierare för att isolera och felsöka en drivrutin i systemet.

Gäller för: Windows Server 2012 Foundation, Windows Server 2012 Essentials, Windows Server 2012 Standard, Windows Server 2012 Datacenter
Ursprungligt KB-nummer: 244617

Funktioner för drivrutinsverifierare

Om du vill använda drivrutinsverifieraren kör du Verifier.exe och startar sedan om datorn. Du behöver inte göra några andra ändringar för att börja analysera drivrutiner i systemet. Ditt användarkonto kräver administratörsbehörighet för att köra Verifier.exe.

Drivrutinsverifieraren kan kontrollera många olika aspekter av en drivrutins beteende. De här funktionerna är grupperade i alternativ eller inställningar som aktiveras med hjälp av flaggor. (Termerna alternativ, inställningar och flaggor är vanligtvis utbytbara i dokumentationen för drivrutinsverifierare. De representerar liknande begrepp.)

Detaljerad information om varje flagga finns i Alternativ för drivrutinsverifierare och regelklasser.

Standardalternativ

Följande alternativ representerar tillsammans de regler som alla drivrutiner i systemet inte ska bryta mot. Dessa alternativ aktiveras när du väljer att aktivera standardinställningar i gui för drivrutinsverifierare eller om du anger växeln /standard när du konfigurerar drivrutinsverifieraren med hjälp av kommandoraden.

Automatiska kontroller

Dessa kontroller görs alltid på en drivrutin som verifieras, oavsett vilka alternativ som har valts.

Exempel på automatiska kontroller:

  • IRQL-kontroller
    • En upphöjd IRQL (vilket innebär att aktuell IRQL är mindre än mål-IRQL).
    • En sänkt IRQL (vilket innebär att aktuell IRQL är mer än mål-IRQL).
  • SpinLocks:
    • Dubbel utgåva av ett rotationslås.
    • Spin lock-förvärv/utgåvor görs vid lämplig IRQL.
  • Minnesallokeringar:
    • Växlingsbara poolallokeringar/frees görs på rätt IRQL (APC_LEVEL eller nedan).
    • Icke-sidiga poolallokeringar/frees görs på rätt IRQL (DISPATCH_LEVEL eller nedan).
    • Inga slumpmässiga (oinitierade) värden anges för dessa API:er (Application Programming Interface).
    • Frigjorda allokeringar pekar inte på aktiva timerobjekt.
  • Kontroll av avlastning av drivrutin:
    • Verifierar att drivrutinen inte har väntande åtgärder vid avlastning, till exempel väntande DPC:er eller arbetstrådar.
  • Andra drivrutinsbeteenden:
    • Trådstackar växlas felaktigt.
    • Försöker anropa KeWaitXxx på IRQL >= DISPATCH_LEVEL.
    • Avreferencing ett objekt som redan har referensantalet 0.

Särskild pool

När det här alternativet är aktivt allokerar drivrutinsverifieraren de flesta av drivrutinens minnesbegäranden från en särskild pool. Den här särskilda poolen övervakas för minnesöverskridningar, minnesunderkörningar och minne som används när den har frigjorts.

Tvinga IRQL-kontroll

När det här alternativet är aktivt sätter drivrutinsverifieraren extremt minnesbelastning på drivrutinen genom att ogiltigförklara växlingsbar kod. Om drivrutinen försöker komma åt det sidiga minnet vid fel IRQL eller när han håller i ett rotationslås identifierar drivrutinsverifieraren det här beteendet.

Poolspårning

När det här alternativet är aktivt kontrollerar drivrutinsverifieraren om drivrutinen har frigjort alla minnesallokeringar när den tas bort. Det avslöjar minnesläckor.

I/O-verifiering

När det här alternativet är aktivt allokerar drivrutinsverifieraren drivrutins-IRP:er från en särskild pool och övervakar förarens I/O-hantering. Den identifierar olaglig eller inkonsekvent användning av I/O-rutiner.

När I/O-verifierare är aktiverat:

  • Alla IRP:er som allokeras via IoAllocateIrp allokeras från en särskild pool, om det är tillgängligt.
  • Kontroller görs i IoCallDriver, IoCompleteRequest och IoFreeIrp för att fånga drivrutinsfelmeddelanden.
  • Alla I/O-verifierare felkontroll med koden DRIVER_VERIFIER_IOMANAGER_VIOLATION (0xC9).

Obs!

I Windows 7 och senare versioner av Windows-operativsystemet ingår alla funktioner i Förbättrad I/O-verifiering som en del av I/O-verifiering och det är inte längre tillgängligt eller nödvändigt att välja alternativet Utökad I/O-verifiering i Drivrutinsverifierarhanteraren eller från kommandoraden.

Identifiering av dödläge

När det här alternativet är aktivt övervakar drivrutinsverifieraren förarens användning av rotationslås, mutexes och snabba mutex. Den identifierar om drivrutinskoden kan orsaka ett dödläge någon gång.

Förbättrad I/O-verifiering

När det här alternativet är aktivt övervakar drivrutinsverifieraren anropen från flera I/O Manager-rutiner och utför stresstestning av PnP-IP-adresser, power IRP:er och WMI-IRP:er.

Obs!

I Windows 7 och senare versioner ingår alla funktioner i Förbättrad I/O-verifiering som en del av I/O-verifiering. Det här alternativet är inte längre tillgängligt eller krävs i Driver Verifier Manager eller från en kommandorad.

DMA-verifiering

När det här alternativet är aktivt övervakar drivrutinsverifieraren förarens användning av DMA-rutiner. Den identifierar felaktig användning av DMA-buffertar, kort och kartregister.

Säkerhetskontroller

När det här alternativet är aktivt söker drivrutinsverifieraren efter vanliga fel som kan leda till säkerhetsproblem, till exempel en referens till användarlägesadresser med hjälp av rutiner för kernelläge.

Diverse kontroller

När det här alternativet är aktivt letar drivrutinsverifieraren efter vanliga orsaker till drivrutinskrascher, till exempel felaktig hantering av frigjort minne.

DDI-kompatibilitetskontroll

När det här alternativet är aktivt tillämpar drivrutinsverifieraren en uppsättning regler för enhetsdrivrutiner (DDI) som söker efter rätt interaktion mellan en drivrutin och kernelgränssnittet i operativsystemet.

Alternativet för DDI-kompatibilitetskontroll implementeras med hjälp av ett kernellägesbibliotek som kallas VerifierExt.sys. Om en överträdelse av en av reglerna för DDI-kompatibilitetskontroll hittas är VerifierExt.sys den modul som anropade för att systemfelkontrollen skulle ske.

Fler alternativ

De här alternativen är utformade för specifika scenarier eller är alternativ som matar in fel eller fördröjningar i vissa DDI-rutiner för att simulera extrema stressförhållanden.

Krav för drivrutinsverifierare

Det enda kravet är att du måste installera Windows Server 2012. Du kan aktivera drivrutinsverifierare i både fullversioner och kontrollerade versioner av Windows. Om Norton Antivirus är installerat ska du inte aktivera identifiering av drivrutinsverifierarens deadlock.

Aktivera drivrutinsverifierare

Du kan aktivera drivrutinsverifierare med hjälp av Verifier.exe. Verifier.exe ingår i varje kopia av Windows. Den installeras automatiskt i mappen System32. Verifier.exe har både gränssnitt för kommandoradsgränssnitt och grafiskt användargränssnitt (GUI), så att du kan ange drivrutiner och lämpliga verifieringsnivåer. Du kan också se statistik för drivrutinsverifierare i realtid. Mer information finns i avsnittet Driver Verifier Manager (Verifier.exe).

Felsöka överträdelser av drivrutinsverifierare

Om drivrutinsverifieraren upptäcker en överträdelse är standardbeteendet att felkontrollera systemet för att ge den mest information som är möjlig om felsökning av problemet. Ett system som är anslutet till ett felsökningsprogram stoppas när en felkontroll har utförts.

Alla överträdelser av drivrutinsverifieraren resulterar i buggkontroller, men de vanligaste (men inte nödvändigtvis alla) är:

  • 0xC1: SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
  • 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION
  • 0xC6: DRIVER_CAUGHT_MODIFYING_FREED_POOL
  • 0xC9: DRIVER_VERIFIER_IOMANAGER_VIOLATION
  • 0xD6: DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION
  • 0xE6: DRIVER_VERIFIER_DMA_VIOLATION

!analyze -v är det bästa kommandot att använda när du startar en ny felsökningssession. Det här kommandot returnerar användbar information och försöker hitta den felande drivrutinen.

Felsökningstillägg som är specifika för drivrutinsverifierare:

  • !verifier dumpar insamlad statistik för drivrutinsverifierare. !verifier -? visar alla tillgängliga alternativ.
  • !deadlock dumpar information som rör lås eller objekt som spåras av deadlockidentifieringen. !deadlock -? visar alla tillgängliga alternativ.
  • !iovirp [address] dumpar information relaterad till en IRP som spåras av I/O-verifieraren.
  • !ruleinfo [RuleID] dumpar information som är relaterad till regeln för DDI-efterlevnadskontroll som har brutits (RuleID är alltid det första argumentet för felkontrollen, alla DDI-regel-ID:t för efterlevnadskontroll är i formatet 0x200nn).

Drivrutinsverifierare och grafikdrivrutiner

Windows-grafikdrivrutiner i kernelläge, till exempel skrivar- och visningsdrivrutins-DLL:er, är begränsade från att anropa poolens startpunkt direkt. Poolallokeringar utförs indirekt med hjälp av återanrop från DDI (Graphics Device Driver Interface) till Win32k.sys. EngAllocMem är till exempel återanropet som en grafikdrivrutin anropar för att uttryckligen allokera poolminne. Andra specialiserade återanrop, till exempel EngCreatePalette och EngCreateBitmap, returnerar också poolminne.

För att tillhandahålla samma automatiserade testning för grafikdrivrutinerna ingår stöd för vissa av funktionerna för drivrutinsverifierare i Win32k.sys. Eftersom grafikdrivrutiner är mer begränsade än andra drivrutiner i kernelläge behöver de bara en delmängd av funktionen Drivrutinsverifierare. Mer specifikt behövs inte IRQL-kontroll och I/O-verifiering. De andra funktionerna, nämligen att använda en särskild pool, slumpmässigt fel i poolallokeringar och poolspårning, stöds i varierande grad i de olika grafiska DDI-återanropen.

Slumpmässiga fel stöds för följande återanropsfunktioner för grafik-DDI:

  • EngAllocMem
  • EngAllocUserMem
  • EngCreateBitmap
  • EngCreateDeviceSurface
  • EngCreateDeviceBitmap
  • EngCreatePalette
  • EngCreateClip
  • EngCreatePath
  • EngCreateWnd
  • EngCreateDriverObj
  • BRUSHOBJ_pvAllocRbrush
  • CLIPOBJ_ppoGetPath

Dessutom stöds användningen av särskild pool- och poolspårning för EngAllocMem.

Aktivering av drivrutinsverifierare för grafikdrivrutinerna är identiskt med de andra drivrutinerna. Mer information finns i avsnittet Aktivera drivrutinsverifierare . Flaggor som inte stöds, till exempel IRQL-kontroll, ignoreras. Dessutom kan du använda !gdikdx.verifier kommandot kernel-debugger för att undersöka aktuellt drivrutinsverifierartillstånd och poolspårningar för grafikdrivrutiner.

Obs!

Du bör bara använda inställningen för slumpmässiga allokeringsfel för robusthetstestning. Användning av den här inställningen kan orsaka återgivning av felmeddelanden, så du bör inte använda den här inställningen med verifieringstester för att kontrollera om grafikdrivrutinens implementering är korrekt (till exempel genom att jämföra grafikdrivrutinens utdata med en referensbild).

Driver Verifier Manager (Verifier.exe)

Verktyget Driver Verifier Manager (Verifier.exe) är det bästa sättet att skapa och ändra inställningar för drivrutinsverifierare och samla in statistik från drivrutinsverifieraren. Verifier.exe finns i mappen %WinDir%\System32 för varje Windows-installation.

Driver Verifier Manager är det GUI som ingår i Windows för att konfigurera drivrutinsverifieraren. Starta Driver Verifier Manager med hjälp av verifier.exe utan några andra kommandoradsväxlar. När växlar ingår används den kommandoradsbaserade versionen av verktyget.

Om du vill ha hjälp med att konfigurera drivrutinsverifieraren kör verifier.exe /? du från ett cmd-fönster för administratör.

Drivrutinsstatus

På egenskapssidan Drivrutinsstatus får du en bild av den aktuella statusen för drivrutinsverifieraren. Du kan se vilka drivrutiner verifieraren identifierar. Statusen kan vara något av följande värden:

  • Inläst: Drivrutinen är för närvarande inläst och verifierad.
  • Borttagen: Drivrutinen är inte inläst för tillfället, men den har lästs in minst en gång sedan du startade om datorn.
  • Aldrig inläst: Drivrutinen lästes aldrig in. Den här statusen kan indikera att drivrutinens avbildningsfil är skadad eller att du har angett ett drivrutinsnamn som saknas i systemet.

Välj listrubriken för att sortera listan efter drivrutinsnamn eller status. I det övre högra området i dialogrutan kan du visa de aktuella typerna av verifiering som gäller. Statusen för drivrutinerna uppdateras automatiskt om du inte växlar till manuellt uppdateringsläge. Du kan ändra uppdateringshastigheten med hjälp av alternativknapparna i det nedre vänstra området i dialogrutan. Om du vill framtvinga en uppdatering av statusen väljer du Uppdatera nu.

Om du aktiverar flaggan Specialpool och mindre än 95 procent av poolallokeringarna gick till den särskilda poolen visas ett varningsmeddelande på den här sidan. Det innebär att du måste välja en mindre uppsättning drivrutiner för att verifiera, eller lägga till mer fysiskt minne på datorn för att få bättre täckning av verifieringen av poolallokering.

Globala räknare

Den här egenskapssidan visar det aktuella värdet för vissa räknare som underhålls av drivrutinsverifieraren. Ett nollvärde för en räknare kan indikera att den associerade drivrutinsverifierarflaggan inte är aktiverad. Till exempel anger värdet 0 för räknaren Övrigt/Fel att flaggan för simulering med låg resurs inte är aktiverad. Du kan övervaka verifierarens aktivitet eftersom värdena för räknarna uppdateras automatiskt som standard. Du kan ändra uppdateringshastigheten, växla till manuell uppdatering eller tvinga fram en uppdatering med hjälp av gruppen med kontroller i det nedre vänstra området i dialogrutan.

Poolspårning

På den här egenskapssidan visas mer statistik som samlats in från drivrutinsverifieraren. Alla räknare som visas på den här sidan är relaterade till kontrollantens flagga för poolspårning. De flesta av dem är räknare per drivrutin, till exempel aktuella allokeringar, aktuella allokerade byte och så vidare. Du måste välja ett drivrutinsnamn i den översta kombinationsrutan för att visa räknarna för den specifika drivrutinen.

Inställningar

Du kan använda den här sidan för att skapa och ändra inställningar för drivrutinsverifierare. Inställningarna sparas i registret och du måste starta om datorn för att inställningarna ska börja gälla. Du kan använda listan för att visa de installerade drivrutinerna. Varje drivrutin kan ha något av följande tillstånd:

  • Verifiera aktiverad: Drivrutinen är verifierad.
  • Verifiera inaktiverad: Drivrutinen är inte verifierad för närvarande.
  • Verifiera aktiverad (omstart krävs): Drivrutinen verifieras först efter nästa omstart.
  • Verifiera inaktiverad (omstart krävs): Drivrutinen är verifierad men har inte verifierats efter nästa omstart.

Du kan välja en eller flera drivrutiner i listan och växla status med hjälp av de två knapparna under listan. Du kan också högerklicka på ett drivrutinsnamn för att visa snabbmenyn, som gör att du kan utföra tillståndsväxling.

Längst ned i dialogrutan kan du ange fler drivrutiner (avgränsade med blanksteg) som du vill verifiera efter nästa omstart. Du använder vanligtvis den här redigeringskontrollen när du vill installera en ny drivrutin som inte redan har lästs in.

Om alternativknappsgruppen överst i listan är inställd på Verifiera alla drivrutiner är knapparna Verifiera och Verifiera inte och redigeringskontrollen inte tillgängliga. Det innebär att efter nästa omstart verifieras alla drivrutiner i systemet.

Du kan ange verifieringstypen med kryssrutorna i det övre högra området i dialogrutan. Du kan aktivera I/O-verifiering på nivå 1 eller på nivå 2. Nivå 2-verifiering är starkare än nivå 1.

Spara alla ändringar i inställningarna genom att välja Använd. Det finns ytterligare två knappar på den här sidan:

  • Önskade inställningar: Den väljer några vanliga inställningar (med alla verifierade drivrutiner).
  • Återställ alla: Alla inställningar för drivrutinsverifieraren rensas så att inga drivrutiner verifieras.

När du har valt Använd måste du starta om datorn för att ändringarna ska börja gälla.

Beständiga inställningar

Du kan använda den här egenskapssidan om du vill ändra flaggorna för drivrutinsverifieraren omedelbart. Du kan bara växla status för vissa av flaggorna för drivrutinsverifierare. Och du kan inte ändra listan över de drivrutiner som verifieras. När du har ändrat status för vissa kryssrutor väljer du Använd för att ändringarna ska börja gälla. Ändringarna börjar gälla omedelbart. Och de varar tills du gör ytterligare ändringar, eller tills du startar om datorn.

Kommandoradsgränssnittet

Du kan också köra Verifier.exe från en kommandorad (om du vill ha mer information skriver duverifier.exe /? i en kommandotolk). Flera växlar kan användas på kommandoraden, till exempel:

Verifier.exe /flags 0x209BB /driver MyDriver1.sys MyFilterDriver1.sys

I följande lista visas de vanligaste kommandoradsflaggorna:

Konfigurera alternativ (flaggor)

  • verifier.exe / flags-värde

    Värdet är ett hextal (ett 0x-prefix krävs) som representerar det kollektiva värdet för flaggor som ska aktiveras. Värdet för varje flagga visas i verifier /? utdata.

    Standardflaggor:

    0x00000000: Automatiska kontroller
    0x00000001: Särskild pool
    0x00000002: Tvinga IRQL-kontroll
    0x00000008: Poolspårning
    0x00000010: I/O-verifiering
    0x00000020: Identifiering av dödlägen
    0x00000080: DMA-kontroll
    0x00000100: Säkerhetskontroller
    0x00000800: Diverse kontroller
    0x00020000: DDI-kompatibilitetskontroll

    Fler flaggor:

    0x00000004: Simulering av slumpmässiga lågresurser
    0x00000040: Förbättrad I/O-verifiering (endast Vista)
    0x00000200: Framtvinga väntande I/O-begäranden
    0x00000400: IRP-loggning
    0x00002000: Invariant MDL söker efter stack
    0x00004000: Invariant MDL-kontroll för driver0x00008000: Fördröjning av Power Framework

    Om du till exempel bara vill aktivera den särskilda poolen, I/O-verifiering och diverse kontroller:

    verifier.exe /flags 0x811
    

    Så här aktiverar du alla standardinställningar (något av exemplen fungerar):

    verifier.exe /standard
    
    verifier.exe /flags 0x209BB
    
  • Konfigurera drivrutiner för att verifiera

    verifier.exe /driver driver1.sys [driver2.sys driver3.sys ...]
    

    Det här kommandot anger den specifika drivrutin eller de drivrutiner som ska verifieras. Ange ytterligare drivrutiner i en blankstegsavgränsad lista.

    verifier.exe /all
    

    Det här kommandot verifierar alla drivrutiner i systemet.

  • Konfigurera med volatile-läge

    verifier.exe /volatile /flags *value /adddriver MyDriver1.sys*
    

    Det här kommandot ändrar kontrollantflaggor omedelbart och lägger till MyDriver1.sys för verifiering.

  • Fråga aktuell kontrollantstatistik

    verifier /query
    

    Dumpa den aktuella drivrutinsverifierarens status och räknar med standardutdata.

  • Fråga aktuella kontrollantinställningar

    verifier /querysettings
    

    Dumpa de aktuella inställningarna för drivrutinsverifierare till standardutdata.

  • Rensa inställningar för verifierare

    verifier.exe /reset
    

    Det här kommandot raderar alla aktuella inställningar för drivrutinsverifierare.

Ytterligare information för drivrutinsutvecklare

Avsnitten som följer beskriver mer information om inställningar för drivrutinsverifierare som kan vara av intresse för drivrutinsutvecklare. De här inställningarna krävs vanligtvis inte av IT-proffs.

Viktigt

Det här avsnittet, metoden eller uppgiften innehåller steg som beskriver hur du ändrar registret. Det kan uppstå allvarliga problem om du gör detta felaktigt. Följ därför instruktionerna noga, och säkerhetskopiera registret innan du gör några ändringar i det. Då kan du återställa registret om det uppstår problem. Mer information om hur du säkerhetskopierar och återställer registret finns i Hur du säkerhetskopierar och återställer registret i Windows.

Följ dessa steg om du vill aktivera drivrutinsverifierare genom att redigera registret:

  1. Starta registry Editor (Regedt32).

  2. Leta upp följande registernyckel:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers

  3. REG_SZ Redigera nyckeln.

REG_SZ Ange nyckeln till skiftlägesokänsliga namn på de drivrutiner som du vill testa. Du kan ange flera drivrutiner, men bara använda en drivrutin. På så sätt kan du se till att tillgängliga systemresurser inte är för tidigt uttömda. För tidig uttömning av resurser orsakar inga problem med systemets tillförlitlighet, men det kan leda till att vissa drivrutinskontroller kringgås.

I följande lista visas exempel på värden för REG_SZ nyckeln:

  • Ntfs.sys
  • Win32k.sys ftdisk.sys
  • *.sys

Du kan ange nivån för drivrutinsverifiering i följande registernyckel:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel

Värdet för nyckeln är ett DWORD som representerar samlingen med alla aktiverade flaggor.