Zuordnungstreiberdateien

Das Ersetzen von Treiberdateien kann schwierig sein. Häufig müssen Sie mit dem sicheren Microsoft Windows-Build starten, die Treiberbinärdatei ersetzen und dann erneut starten.

Es gibt eine alternative Methode, die Zuordnungsdateien verwendet. Sie können diese Zuordnungsmethode verwenden, um jeden Kernelmodustreiber (einschließlich Anzeigetreiber), jeden Windows-Subsystemtreiber oder jedes andere Kernelmodusmodul zu ersetzen. Der Einfachheit halber werden diese Dateien in diesem Thema treiber genannt, obwohl 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 wird. Sie können diese Methode auch für einen Starttreiber verwenden, ist aber schwieriger. Weitere Informationen zur Verwendung dieser Methode mit Starttreibern finden Sie unter Ersetzen von Starttreibern.

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

  1. Erstellen Sie eine Treiberersatzzuordnungsdatei. Diese Datei ist eine Textdatei, in der die Treiber auf dem Zielcomputer und ihre Ersatztreiber auf dem Hostcomputer aufgelistet werden. 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 Ihres 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 Treiberersetzungszuordnungsdateiformat.

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

  3. Laden Sie die Treiberaustauschzuordnungsdatei, indem Sie eine der folgenden Aktionen ausführen:

    • Legen Sie die _NT_KD_FILES Umgebungsvariable 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 (Set Driver Replacement Map), 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 auch den Befehl .kdfiles verwenden, um die aktuelle Treiberersetzungszuordnungsdatei anzuzeigen oder die Treiberersetzungszuordnung zu löschen. Wenn Sie diesen Befehl nicht verwenden, wird die Zuordnung bis zum Beenden des Debuggers beibehalten.

Nachdem Sie dieses Verfahren abgeschlossen haben, wird die Treiberersetzungszuordnung wirksam.

Wenn der Zielcomputer einen Treiber lädt, fragt er den Kerneldebugger ab, um zu ermitteln, ob dieser Treiber zugeordnet wurde. Wenn der Treiber zugeordnet wurde, wird die Ersatzdatei über die Kernelverbindung gesendet und über die alte Treiberdatei kopiert. Der neue Treiber wird dann geladen.

Treiberaustauschzuordnungsdateiformat

Jede Treiberdateiersetzung wird durch drei Zeilen in der Treiberersetzungszuordnungsdatei angegeben.

  • Die erste Zeile besteht aus dem Wort "map".

  • Die zweite Zeile gibt den Pfad und 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 die Groß-/Kleinschreibung nicht beachtet, und die tatsächlichen Treiberdateinamen können unterschiedlich sein. 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 laden möchte.

Kdfiles versucht, dem Dateinamen zu entsprechen, der in der SCM-Datenbank (Service Control Manager) gespeichert ist. Der Name in der SCM-Datenbank ist identisch mit dem Namen, der an MmLoadSystemImage übergeben wurde.

In Windows 10 und höheren Versionen der Debugtools funktioniert die Treiberzuordnung, um dynamisch mit dem Treibernamen übereinzustimmen und den richtigen Pfad zu ermitteln. Der vollständige Pfad muss nicht angegeben werden, und die Dateierweiterung ist optional. Sie können einen dieser Einträge verwenden, um dem NT-Dateisystemtreiber zu entsprechen.

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

Sie können einen dieser Einträge verwenden, um dem NT-Kerneltreiber zu entsprechen.

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

Die Kartendatei kann Leerzeilen enthalten und Kommentarzeilen enthalten, die mit einem Zahlenzeichen (#) beginnen. Nachdem jedoch "map" in der Datei angezeigt wird, müssen die nächsten beiden Zeilen der alte Treiber und der neue Treiber sein. Die Leerzeilen und Kommentarzeilen können die dreizeiligen Zuordnungsblöcke nicht aufteilen.

Das folgende Beispiel zeigt eine Treiberersetzungszuordnungsdatei.

# 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 Treiberaustauschzuordnungsdatei muss eine Textdatei sein, Sie können jedoch einen beliebigen Dateinamen und eine beliebige Dateinamenerweiterung (.ini, .txt, .map usw.) verwenden.

Zusätzliche Hinweise

Wenn treiberersetzung erfolgt, wird eine Meldung im Kerneldebugger angezeigt.

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

Sie können die bcdedit-Option bootdebug aktivieren, um Informationen zum frühen Start anzuzeigen, die zum Ersetzen des Kernels, der Hal- oder Starttreiber nützlich sind.

bcdedit -bootdebug on

Weitere Informationen finden Sie unter Referenz zu BCDEdit-Optionen.

Wenn der Kerneldebugger beendet wird, wird kein Treiber mehr ersetzt. Alle Treiber, die bereits ersetzt wurden, rückgängig machen jedoch nicht in ihre alten Binärdateien, da die Treiberdateien tatsächlich überschrieben werden.

Dieses Treiberaustauschfeature umgeht automatisch den Windows-Dateischutz (WFP).

Sie müssen den Zielcomputer nicht neu starten. Der Treiberaustausch tritt immer dann auf, 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 Treiberersetzungszuordnungsdatei 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 grundlegende Karten-,Linien-/Linienformat aufweist. Die tatsächlichen Pfade und Dateinamen werden jedoch erst überprüft, wenn die Ersetzung erfolgt.

Nachdem die Kartendatei gelesen wurde, speichert der Debugger den 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).