Sdílet prostřednictvím


Mapování souborů ovladačů

Nahrazení souborů ovladačů může být obtížné. Často je nutné spustit do bezpečného sestavení systému Microsoft Windows, nahradit binární soubor ovladače a pak spustit znovu.

Existuje alternativní metoda pomocí souborů mapování. Tuto metodu mapování můžete použít k nahrazení jakéhokoli ovladače režimu jádra (včetně ovladačů zobrazení), jakéhokoli ovladače subsystému Windows nebo jakéhokoli jiného modulu režimu jádra. Pro zjednodušení se tyto soubory nazývají ovladače v tomto tématu, i když tuto metodu můžete použít pro jakýkoli modul v režimu jádra.

Tuto metodu můžete použít vždy, když je WinDbg nebo KD připojen jako ladicí program jádra. Tuto metodu můžete použít také u spouštěcího ovladače, ale je obtížnější. Další informace o tom, jak tuto metodu používat se spouštěcími ovladači, naleznete v tématu Nahrazení ovladačů spouštění.

Pokud chcete k nahrazení souborů ovladačů použít mapu nahrazení ovladače, postupujte takto:

  1. Vytvořte mapový soubor pro náhradu ovladače. Tento soubor je textový soubor, který uvádí ovladače v cílovém počítači a jejich náhradní ovladače na hostitelském počítači. Můžete nahradit libovolný počet ovladačů. Můžete například vytvořit soubor s názvem Mymap.ini v adresáři d:\Map_Files hostitelského počítače, který obsahuje následující informace.

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

    Další informace o syntaxi tohoto souboru naleznete v tématu Driver Replacement Map File Format.

  2. Nastavte připojení pro ladění jádra k cílovému počítači a spusťte ladicí program jádra (KD nebo WinDbg) na hostitelském počítači. (Nemusíte se opravdu nabourat do cílového počítače.)

  3. Jedním z následujících způsobů načtěte soubor mapy náhradních ovladačů:

    • Nastavte proměnnou prostředí _NT_KD_FILES před spuštěním ladicího programu jádra.

      D:\Debugging Tools for Windows> set _NT_KD_FILES=d:\Map_Files\mymap.ini
      D:\Debugging Tools for Windows> kd
      
    • Po spuštění ladicího programu jádra použijte příkaz .kdfiles (Set Driver Replacement Map).

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

      Pomocí příkazu .kdfiles můžete také zobrazit aktuální soubor mapování nahrazení ovladače nebo odstranit mapu nahrazení ovladače. Pokud tento příkaz nepoužíváte, mapa se zachová, dokud ladicí program neukončíte.

Po dokončení tohoto postupu začne platit mapa nahrazení ovladače.

Kdykoli se cílový počítač chystá načíst ovladač, dotazuje se, zda byl ovladač ladicím programem jádra namapován. Pokud byl ovladač namapován, náhradní soubor se odešle přes připojení jádra a zkopíruje se přes starý soubor ovladače. Nový ovladač se pak načte.

Formát souboru mapování nahrazení ovladače

Každá náhrada souboru ovladače je označena třemi řádky v souboru mapování nahrazení ovladače.

  • První řádek se skládá z slova "mapa".

  • Druhý řádek určuje cestu a název souboru starého ovladače v cílovém počítači.

  • Třetí řádek určuje úplnou cestu nového ovladače. Tento ovladač může být umístěn na hostitelském počítači nebo na jiném serveru.

Tento vzor informací můžete opakovat libovolný počet.

Ve jménech souborů a cest se nerozlišují velká a malá písmena, a skutečné názvy souborů ovladačů se mohou lišit. Soubor, který zadáte na třetím řádku, se zkopíruje přes soubor, který zadáte na druhém řádku, když se cílový počítač chystá načíst tento ovladač.

Kdfiles se pokusí porovnat s názvem souboru uloženým v databázi Správce řízení služeb (SCM). Název v databázi SCM je shodný s názvem, který byl předán mmLoadSystemImage.

Ve Windows 10 a novějších verzích nástrojů pro ladění funguje mapování ovladačů tak, aby dynamicky odpovídalo názvu ovladače a určilo správnou cestu. Úplná cesta nemusí být zadána a přípona souboru je volitelná. Ke shodě s ovladačem systému souborů NT můžete použít některou z těchto položek.

  • ntfs
  • NTFS
  • ntfs.sys
  • okna\system32\drivers\ntfs.sys

Ke shodě s ovladačem jádra NT můžete použít některou z těchto položek.

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

Soubor mapy může obsahovat prázdné řádky a může obsahovat řádky komentářů, které začínají znakem čísla (#). Po zobrazení "map" v souboru však musí být na dalších dvou řádcích nejdříve starý ovladač a poté nový ovladač. Prázdné řádky a řádky komentářů nemohou rozdělit bloky se třemi řádky mapy.

Následující příklad ukazuje mapový soubor pro nahrazení ovladače.

# 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

Náhradní soubor mapy ovladače musí být textový soubor, ale můžete použít libovolný název souboru a příponu názvu souboru (.ini, .txt, .map atd.).

Další poznámky

Když dojde k nahrazení ovladače, zobrazí se v ladicím programu jádra zpráva.

Pokud používáte kombinaci kláves CTRL+D (v KD) nebo CTRL+ALT+D (ve WinDbg), zobrazí se podrobné informace o žádosti o nahrazení. Tyto informace můžou být užitečné, pokud si nejste jistí, jestli název, který jste uvedli, odpovídá názvu v databázi SCM.

Pokud chcete zobrazit informace o předčasném spuštění, které jsou užitečné pro nahrazení jádra, hal nebo spouštěcích ovladačů, můžete povolit možnost bcdedit bootdebug.

bcdedit -bootdebug on

Další informace naleznete v tématu BCDEdit Options Reference.

Pokud ladicí program jádra ukončí, nedojde k žádné další výměně ovladače. Všechny ovladače, které již byly nahrazeny, se však nevrátí k jejich starým binárním souborům, protože soubory ovladačů jsou ve skutečnosti přepsány.

Tato funkce nahrazení ovladače automaticky obchází ochranu souborů systému Windows (WFP).

Cílový počítač nemusíte restartovat. K nahrazení ovladače dojde pokaždé, když cílový počítač načte ovladač bez ohledu na to, jestli byl restartován. Samozřejmě, většina ovladačů se načte během procesu spouštění, takže v praxi byste měli restartovat cílový počítač po načtení souboru mapy.

Pokud je definována proměnná _NT_KD_FILES, při spuštění ladicího programu jádra se přečte zadaný soubor map pro nahrazení ovladače. Pokud vydáte příkaz .kdfiles , zadaný soubor se přečte okamžitě. V tomto okamžiku ladicí program ověří, že soubor má základní formát mapy/řádku/řádku. Skutečné cesty a názvy souborů se ale neověřují, dokud nedojde k nahrazení.

Po přečtení souboru mapy uloží ladicí program jeho obsah. Pokud tento soubor od tohoto okamžiku změníte, změny nebudou mít žádný vliv (pokud znovu vyvoláte příkaz .kdfiles).