Freigeben über


Zuordnen von Treiberdateien

Es kann schwierig sein, Treiberdateien zu ersetzen. Häufig müssen Sie zum sicheren Build von Microsoft Windows starten, die Treiberbinärdatei ersetzen und dann erneut starten.

Es gibt jedoch eine alternative Methode, die Zuordnungsdateien verwendet. Sie können über diese Methode, die Zuordnungen verwendet, Kernelmodustreiber (einschließlich Anzeigetreibern), Windows-Subsystemtreiber oder andere Kernelmodusmodule ersetzen. Aus Gründen der Einfachheit werden diese Dateien in diesem Thema als Treiber bezeichnet, auch wenn Sie diese Methode für jedes Kernelmodusmodul verwenden können.

Sie können diese Methode immer dann verwenden, wenn WinDbg oder KD als Kerneldebugger angefügt ist. Sie können diese Methode auch für einen Starttreiber verwenden. Dies ist jedoch schwieriger. Weitere Informationen zur Verwendung dieser Methode mit Starttreibern finden Sie unter „Ersetzen von Starttreibern“.

Gehen Sie wie folgt vor, um eine Treiberersetzungszuordnung zum Ersetzen von Treiberdateien zu verwenden:

  1. Erstellen Sie eine Datei für die Treiberersetzungszuordnung. Diese Datei ist eine Textdatei, die die Treiber auf dem Zielcomputer und die Ersetzungstreiber auf dem Hostcomputer auflistet. Sie können eine beliebige Anzahl von Treibern ersetzen. Sie können beispielsweise eine Datei mit dem Namen „Mymap.ini“ im Verzeichnis „d:\Map_Files“ des Hostcomputers erstellen, die die folgenden Informationen enthält.

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

    Weitere Informationen zur Syntax dieser Datei finden Sie unter Treiberersetzungszuordnung, Dateiformat.

  2. Richten Sie eine Kerneldebuggingverbindung zum Zielcomputer ein, und starten Sie den Kerneldebugger (KD oder WinDbg) auf dem Hostcomputer. (Sie müssen nicht tatsächlich etwas auf dem Zielcomputer ausführen.)

  3. Laden Sie die Datei für die Treiberersetzungszuordnung, indem Sie eine der folgenden Aktionen ausführen:

    • Legen Sie die Umgebungsvariable _NT_KD_FILES fest, bevor Sie den Kerneldebugger starten.

      D:\Debugging Tools for Windows> set _NT_KD_FILES=d:\Map_Files\mymap.ini
      D:\Debugging Tools for Windows> kd
      
    • Verwenden Sie den Befehl .kdfiles (Treiberersetzungszuordnung festlegen), nachdem Sie den Kerneldebugger gestartet haben.

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

      Sie können den Befehl .kdfiles auch verwenden, um die aktuelle Datei für die Treiberersetzungszuordnung anzuzeigen oder die Treiberersetzungszuordnung zu löschen. Wenn Sie diesen Befehl nicht verwenden, wird die Zuordnung beibehalten, bis Sie den Debugger beenden.

Nach dem Abschluss dieses Verfahrens wird die Treiberersetzungszuordnung wirksam.

Wenn der Zielcomputer im Begriff ist, einen Treiber zu laden, fragt er den Kerneldebugger ab, um festzustellen, ob dieser Treiber zugeordnet wurde. Wenn der Treiber zugeordnet wurde, wird die Ersetzungsdatei über die Kernelverbindung gesendet und über die alte Treiberdatei kopiert. Anschließend wird der neue Treiber geladen.

Format der Datei für die Treiberersetzungszuordnung

Jede Treiberdateiersetzung wird durch drei Zeilen in der Datei für die Treiberersetzungszuordnung angegeben.

  • Die erste Zeile besteht aus dem Wort „map“ (Zuordnung).

  • Die zweite Zeile gibt den Pfad und den Dateinamen des alten Treibers auf dem Zielcomputer an.

  • Die dritte Zeile gibt den vollständigen Pfad des neuen Treibers an. Dieser Treiber kann sich auf dem Hostcomputer oder auf einem anderen Server befinden.

Sie können dieses Informationsmuster beliebig oft wiederholen.

Bei Pfaden und Dateinamen wird nicht zwischen Groß- und Kleinschreibung unterschieden. Die tatsächlichen Treiberdateinamen können abweichen. Die Datei, die Sie in der dritten Zeile angeben, wird über die Datei kopiert, die Sie in der zweiten Zeile angeben, wenn der Zielcomputer diesen Treiber lädt.

Kdfiles versucht, eine Übereinstimmung für den Dateinamen zu finden, der in der Service Control Manager (SCM)-Datenbank gespeichert ist. Der Name in der SCM-Datenbank ist mit dem Namen identisch, der an MmLoadSystemImage übergeben wurde.

In Windows 10 und höheren Versionen der Debuggingtools gleicht die Treiberzuordnung den Treibernamen dynamisch ab und ermittelt den richtigen Pfad. Es muss nicht der vollständige Pfad angegeben werden. Die Dateierweiterung ist optional. Sie können jeden dieser Einträge verwenden, um eine Übereinstimmung mit dem NT-Dateisystemtreiber zu finden.

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

Sie können jeden dieser Einträge verwenden, um eine Übereinstimmung mit dem NT-Kerneltreiber zu finden.

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

Die Zuordnungsdatei kann Leer- und Kommentarzeilen enthalten, die mit einem Nummernzeichen (#) beginnen. Wenn jedoch „map“ in der Datei erscheint, müssen die nächsten beiden Zeilen der alte Treiber und der neue Treiber sein. Die dreizeiligen Zuordnungsblöcke dürfen nicht von Leer- und Kommentarzeilen unterbrochen werden.

Das folgende Beispiel zeigt eine Datei für die Treiberersetzungszuordnung.

# 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

Die Datei für die Treiberersetzungszuordnung muss eine Textdatei sein. Sie können jedoch beliebige Dateinamen und Dateinamenerweiterungen verwenden (.ini, .txt, .map usw.).

Weitere Hinweise

Wenn die Treiberersetzung erfolgt, wird im Kerneldebugger eine Meldung angezeigt.

Wenn Sie STRG+D (in KD) oder STRG+ALT+D (in WinDbg) verwenden, werden Ihnen Informationen zur Ersetzungsanforderung angezeigt. Diese Informationen können nützlich sein, wenn Sie sich nicht sicher sind, ob der von Ihnen aufgelistete Name mit dem Namen in der SCM-Datenbank übereinstimmt.

Sie können die Option „bcdedit bootdebug“ aktivieren, um frühzeitig Startinformationen anzuzeigen, die bei der Ersetzung von Kernel-, HAL- oder Starttreibern nützlich sind.

bcdedit -bootdebug on

Weitere Informationen finden Sie unter BCDEdit-Optionsreferenz.

Wenn der Kerneldebugger beendet wird, wird keine weitere Treiberersetzung ausgeführt. Alle Treiber, die bereits ersetzt wurden, werden jedoch nicht auf ihre alten Binärdateien zurückgesetzt, da die Treiberdateien tatsächlich überschrieben werden.

Diese Funktion für die Treiberersetzung umgeht automatisch Windows File Protection (WFP).

Sie müssen den Zielcomputer nicht neu starten. Die Treiberersetzung erfolgt immer dann, wenn der Zielcomputer einen Treiber lädt, unabhängig davon, ob er neu gestartet wurde. Natürlich werden die meisten Treiber während des Startvorgangs geladen. Daher sollten Sie in der Praxis den Zielcomputer neu starten, nachdem die Zuordnungsdatei geladen wurde.

Wenn die _NT_KD_FILES-Variable definiert ist, wird die angegebene Datei für die Treiberersetzungszuordnung gelesen, wenn der Kerneldebugger gestartet wird. Wenn Sie den Befehl .kdfiles ausgeben, wird die angegebene Datei sofort gelesen. An diesem Punkt überprüft der Debugger, ob die Datei das Basisformat map/line/line besitzt. Die tatsächlichen Pfade und Dateinamen werden jedoch erst überprüft, wenn die Ersetzung erfolgt.

Nach dem Lesen der Zuordnungsdatei speichert der Debugger ihren Inhalt. Wenn Sie diese Datei nach diesem Punkt ändern, haben die Änderungen keine Auswirkungen (es sei denn, Sie führen den Befehl .kdfiles erneut aus).