Dela via


Kartläggning av drivrutinsfiler

Det kan vara svårt att ersätta drivrutinsfiler. Ofta måste du starta till Microsoft Windows safe build, ersätta drivrutinsbinärfilen och sedan starta igen.

Det finns en alternativ metod med mappningsfiler. Du kan använda den här mappningsmetoden för att ersätta valfri drivrutin i kernelläge (inklusive visningsdrivrutiner), valfri Windows-undersystemsdrivrutin eller någon annan modul i kernelläge. För enkelhetens skull kallas de här filerna drivrutiner i det här avsnittet, även om du kan använda den här metoden för valfri modul i kernelläge.

Du kan använda den här metoden när WinDbg eller KD är anslutna som ett kernelfelsökare. Du kan också använda den här metoden på en startdrivrutin, men det är svårare. Mer information om hur du använder den här metoden med startdrivrutiner finns i Ersätta startdrivrutiner.

Gör följande om du vill använda en mappning för ersättning av drivrutiner för att ersätta drivrutinsfiler:

  1. Skapa en mappningsfil för ersättning av drivrutiner. Den här filen är en textfil som visar drivrutinerna på måldatorn och deras ersättningsdrivrutiner på värddatorn. Du kan ersätta valfritt antal drivrutiner. Du kan till exempel skapa en fil med namnet Mymap.ini i katalogen d:\Map_Files på värddatorn som innehåller följande information.

    map
    \Systemroot\system32\drivers\videoprt.sys
    \\myserver\myshare\new_drivers\videoprt.sys
    

    Mer information om syntaxen för den här filen finns i Ersättningsdrivrutinernas kartfilformat.

  2. Konfigurera en kernel-felsökningsanslutning till måldatorn och starta kernelfelsökaren (KD eller WinDbg) på värddatorn. (Du behöver inte bryta dig in på måldatorn.)

  3. Ladda in kartfilen för drivrutinsersättning på något av följande sätt:

    • Ange _NT_KD_FILES miljövariabeln innan du startar kernelfelsökaren.

      D:\Debugging Tools for Windows> set _NT_KD_FILES=d:\Map_Files\mymap.ini
      D:\Debugging Tools for Windows> kd
      
    • Använd kommandot .kdfiles (Set Driver Replacement Map) när du har startat kernelfelsökaren.

      D:\Debugging Tools for Windows> kd
      kd> .kdfiles d:\Map_Files\mymap.ini
      KD file associations loaded from 'd:\Map_Files\mymap.ini'
      

      Du kan också använda kommandot .kdfiles för att visa den aktuella mappningsfilen för drivrutinsersättning eller för att ta bort drivrutinsersättningskartan. Om du inte använder det här kommandot bevaras kartan tills du avslutar felsökningsprogrammet.

När du har slutfört den här proceduren träder kartan för drivrutinsbyte i kraft.

När måldatorn är på väg att läsa in en drivrutin frågar den kernelfelsökaren för att avgöra om drivrutinen har mappats. Om drivrutinen har mappats skickas ersättningsfilen via kernelanslutningen och kopieras över den gamla drivrutinsfilen. Sedan läses den nya drivrutinen in.

Filformat för drivrutinsersättningskarta

Varje ersättning av drivrutinsfilen anges med tre rader i kartfilen för drivrutinsersättning.

  • Den första raden består av ordet "map".

  • Den andra raden anger sökvägen och filnamnet för den gamla drivrutinen på måldatorn.

  • Den tredje raden anger den fullständiga sökvägen för den nya drivrutinen. Den här drivrutinen kan finnas på värddatorn eller på någon annan server.

Du kan upprepa det här informationsmönstret valfritt antal gånger.

Sökvägar och filnamn är skiftlägesokänsliga och de faktiska drivrutinsfilnamnen kan vara olika. Filen som du anger på den tredje raden kopieras över den fil som du anger på den andra raden när måldatorn är på väg att läsa in drivrutinen.

Kdfiles försöker matcha filnamnet som lagras i SCM-databasen (Service Control Manager). Namnet i SCM-databasen är identiskt med namnet som skickades till MmLoadSystemImage.

I Windows 10 och senare versioner av felsökningsverktygen fungerar drivrutinsmappning för att matcha drivrutinsnamnet dynamiskt och fastställa rätt sökväg. Den fullständiga sökvägen behöver inte anges och filnamnstillägget är valfritt. Du kan använda vilken som helst av dessa poster för att matcha NT-drivrutinen för filsystem.

  • ntfs
  • NTFS
  • ntfs.sys
  • fönster\system32\drivers\ntfs.sys

Du kan använda någon av dessa poster för att matcha NT-kerneldrivrutinen.

  • ntoskrnl
  • NTOSKRNL
  • ntoskrnl.sys
  • windows\system32\drivers\ntoskrnl.sys

Kartfilen kan innehålla tomma rader och kan innehålla kommentarsrader som börjar med ett taltecken (#). Men när "karta" visas i filen måste nästa två rader vara den gamla drivrutinen och den nya drivrutinen. De tomma raderna och kommentarsraderna kan inte dela upp treradskartblocken.

I följande exempel visas en ersättningskarta för drivrutiner.

# Use the # for comments like this one
map
\Systemroot\system32\drivers\videoprt.sys
e:\MyNewDriver\binaries\videoprt.sys
map
\Systemroot\system32\mydriver.sys
\\myserver\myshare\new_drivers\mydriver0031.sys

# This is replacing a beep driver
map
\??\c:\windows\system32\beep.sys
\\myserver\myshare\new_drivers\new_beep.sys

Kartfilen för drivrutinsersättning måste vara en textfil, men du kan använda valfritt filnamn och filnamnstillägg (.ini, .txt, .map och så vidare).

Ytterligare anteckningar

När drivrutinsersättning inträffar visas ett meddelande i kernelfelsökaren.

Om du använder CTRL+D (i KD) eller CTRL+ALT+D (i WinDbg) visas utförlig information om ersättningsbegäran. Den här informationen kan vara användbar om du inte är säker på om namnet som du har listat matchar det i SCM-databasen.

Du kan aktivera alternativet bcdedit bootdebug för att visa information om tidig start som är användbar för att ersätta kerneln, hal- eller startdrivrutinerna.

bcdedit -bootdebug on

Mer information finns i REFERENS för BCDEdit-alternativ.

Om kernelfelsökaren avslutas sker ingen ytterligare ersättning av drivrutiner. Alla drivrutiner som redan har ersatts återgår dock inte till sina gamla binärfiler eftersom drivrutinsfilerna faktiskt skrivs över.

Den här drivrutinsersättningsfunktionen kringgår automatiskt Windows File Protection (WFP).

Du behöver inte starta om måldatorn. Drivrutinsbyte sker varje gång måldatorn läser in en drivrutin, oavsett om den har startats om. Naturligtvis läses de flesta drivrutiner in under startprocessen, så i praktiken bör du starta om måldatorn när kartfilen har lästs in.

Om den _NT_KD_FILES variabeln har definierats, läss den angivna mappningsfilen för drivrutinsersättning när kernelfelsökaren startas. Om du utfärdar kommandot .kdfiles läses den angivna filen omedelbart. I det här läget verifierar felsökningsprogrammet att filen har det grundläggande kart-/linje-/linjeformatet. Men de faktiska sökvägarna och filnamnen verifieras inte förrän ersättningen inträffar.

När kartfilen har lästs lagrar felsökningsprogrammet sitt innehåll. Om du ändrar den här filen efter den här punkten har ändringarna ingen effekt (såvida du inte publicerar kommandot .kdfiles igen).