Freigeben über


Einrichten des 2PF-Kernelmodus-Debuggings mit KDNET

Das Debuggen von Tools für Windows unterstützt das Kerneldebugging über ein Netzwerkkabel mithilfe mehrerer physischer Funktionen (PFs) auf den unterstützten NICs, indem der PCI-Konfigurationsraum partitioniert wird.

Beim 2PF-Debugging kann jedes PF mit einem einzelnen Netzwerkport verbunden werden, sodass die Kernel-Debugging-Funktionalität mit einem PF verbunden werden kann, während der Standard-Netzwerkstapel mit dem anderen PF kommuniziert. Aus diesem Grund muss KDNIC den Windows-Netzwerkdatenverkehr nicht über KDNET weiterleiten, und KDNET ist nur für das Routing des Host-Kerneldebugger-Datenverkehrs verantwortlich. Dies führt zu einer dramatischen Leistungssteigerung.

In diesem Thema wird beschrieben, wie Sie das 2PF-Debugging mit dem Dienstprogramm kdnet.exe einrichten.

Netzwerkkartenanbieter werden aufgefordert, die Unterstützung für diese Funktion zu aktivieren. Weitere Informationen finden Sie unter Debugger 2PF KDNET Miniport Network Driver Support.

Zwei Treiber werden über den partitionierten PCI-Konfigurationsraum ausgeführt.

  • Der Windows-Posteingangstreiber wird über den primären Netzwerkport bei der bus.dev.fun0.0 PCI-Location ausgeführt.

  • Das KDNET-EXT-Modul hat zu wenige PF bei bus.dev.fun0.1. Diese Technik stellt sicher, dass der Windows-Posteingangs-NIC-Treiber nicht durch die gemeinsame Nutzung der NIC mit KDNET beeinträchtigt wird.

Der Computer, auf dem der Debugger ausgeführt wird, wird als Hostcomputer bezeichnet, und der Computer, der debugged wird, wird als Zielcomputer bezeichnet.

Anforderungen für Kernelmodus 2PF-Computer

Das Folgende ist erforderlich:

  • Auf dem Zielcomputer befindet sich eine unterstützte 2PF-Netzwerkkarte.

  • Auf dem Hostcomputer eine Netzwerkkarte.

  • Eine Netzwerkverbindung zwischen Ziel und Host.

  • Windows 10, Version 21313 und höher

Unterstützte 2PF-Netzwerkkarten

Anbieter wie NVIDIA Mellanox und Cisco bieten NICs, die das 2PF-Netzwerkdebugging unterstützen. Wenden Sie sich an den Netzwerkkartenanbieter, um festzustellen, welche Modelle der Netzwerkkarte unterstützt werden. Beachten Sie, dass einige Anbieter 2PF für eine Teilmenge von Netzwerk-Karte unterstützen, die dieselbe PnP-ID verwenden.

Verwenden Sie kdnet.exe, um die Geräteunterstützung zu bestätigen und den busparams-Wert anzuzeigen

Verwenden Sie das Hilfsprogramm kdnet.exe, um die Parameterinformationen für Controller anzuzeigen, die das KDNET 2PF-Transportdebugging unterstützen.

  1. Vergewissern Sie sich, dass die Windows-Debugging-Tools für Windows auf dem Hostsystem installiert sind. Informationen zum Herunterladen und Installieren der Debugging-Tools finden Sie unter Debugging-Tools für Windows.

  2. Suchen Sie die Dateien kdnet.exe und VerifiedNICList.xml. Standardmäßig befinden sie sich hier.

    C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

  3. Kopieren Sie auf dem Hostcomputer die beiden Dateien in eine Netzwerkfreigabe oder ein Minilaufwerk, sodass sie auf dem Zielcomputer verfügbar sind.

  4. Erstellen Sie auf dem Zielcomputer ein C:\KDNET Verzeichnis, und kopieren Sie die Dateien kdnet.exe und VerifiedNICList.xml in dieses Verzeichnis.

  5. Öffnen Sie auf dem Zielcomputer ein Eingabeaufforderungsfenster als Administrator. Geben Sie diesen Befehl ein, um zu überprüfen, ob der Zielcomputer über einen unterstützten Netzwerkadapter verfügt, und um den busparams-Wert anzuzeigen.

    
    C:\KDNET>kdnet.exe
    
    Network debugging is supported on the following NICs:
    busparams=141.0.0, Mellanox ConnectX-4 Lx Ethernet Adapter #2, Plugged in, Primary function, multiple physical functions are supported.
    
    Network debugging is supported on the following USB controllers:
    busparams=128.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    busparams=0.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    busparams=128.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    busparams=0.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
    

    Da die oben gezeigte Ausgabe nicht KDNET is running on this NIC. enthält, weist dies darauf hin, dass das herkömmliche KDNET-Debugging auf keinem der Adapter aktiviert ist.

    Wenn die NIC das Feature für mehrere PF nicht unterstützt, wird die PF-Statusbenachrichtigung "mehrere physische Funktionen werden unterstützt" aus den angezeigten Informationen ausgelassen (leer).

    Wenn die NIC mehrere PF unterstützt, hängen die tatsächlich angezeigten Informationen von der Kombination aus Netzwerkport (Root-Port/PF-hinzugefügter Port) sowie dem Status „Kabel verbunden/getrennt“ zum/vom physischen NIC-Port ab.

    In dieser Tabelle werden verschiedene PF-Benachrichtigungen für die primäre NIC zusammengefasst.

    NIC-Adapter bus.dev.fun entspricht Kabelstatus PF-Status
    Original (primär) PF-Kabel angeschlossen Primäre Funktion, mehrere physische Funktionen sind aktiviert
    Original (primär) PF-Kabel getrennt Primäre Funktion, mehrere physische Funktionen werden unterstützt

    In dieser Tabelle werden verschiedene PF-Benachrichtigungen für die sekundäre NIC zusammengefasst.

    NIC-Adapter bus.dev.fun entspricht Kabelstatus PF-Status
    neuer (sekundärer) PF-Port Kdnet wird ausgeführt Sekundäre Funktion
    neuer (sekundärer) PF-Port Kabel getrennt oder unbekannter Status Primäre Funktion, mehrere physische Funktionen sind aktiviert, sekundäre Funktion wird jedoch nicht verwendet
  6. Wenn die Ausgabe von kdnet.exe angibt, dass ein unterstützter NIC-Controller verfügbar ist, können wir fortfahren.

Einrichten des Zielcomputers für 2PF

Verwenden Sie das Dienstprogramm kdnet.exe, um die Debuggereinstellungen auf dem Ziel-PC für 2PF zu konfigurieren, indem Sie die folgenden Schritte ausführen.

Wichtig

Bevor Sie bcdedit zum Ändern der Startinformationen verwenden, müssen Sie möglicherweise vorübergehend Windows-Sicherheitsfunktionen wie BitLocker und Secure Boot auf dem Test-PC aussetzen. Sie können Bit Locker und den sicheren Start erneut aktivieren, nachdem Sie BCDEdit zum Aktualisieren der Startinformationen verwendet haben. Verwalten Sie den Test-PC entsprechend, wenn die Sicherheitsfeatures deaktiviert sind.

Dieser Prozess fügt der NIC eine neue physische Funktion (PF) hinzu, die angegeben wird durch bus.device.function. Der neue PF kann nur von KDNET verwendet werden, da der Windows-Posteingangstreiber so eingerichtet ist, dass er nicht auf einem hinzugefügten, sekundären PF ausgeführt wird. Führen Sie die folgenden Schritte aus, um einen neuen PF hinzuzufügen, der vom Debugger-Computer verwendet wird.

Vergewissern Sie sich, dass das Debuggen deaktiviert ist, bevor Sie die neue physische Funktion hinzufügen.

  1. Verwenden Sie den Befehl BCDEdit, um zu bestätigen, dass die KD für das Ziel deaktiviert ist, bevor Sie eine neue PF-Datei für die NIC hinzufügen. Dies ist erforderlich, um sicherzustellen, dass der Standardanbieter-NIC-Treiber geladen wird, damit er zum Hinzufügen des neuen PF verwendet werden kann.
C:\> bcdedit /enum 
...

debug           No

Verwenden Sie alternativ kdnet.exe ohne Parameter, um festzustellen, ob das Debuggen aktiviert ist. Die folgende Ausgabe zeigt KDNET, das auf einem System ausgeführt wird, wobei das Debuggen auf einer NIC aktiviert ist. Dies ist das veraltete Setup mit niedrigerer Leistung.


c:\Debuggers>kdnet

Network debugging is supported on the following NICs:
busparams=141.0.0, Mellanox ConnectX-4 Lx Ethernet Adapter #2, KDNET is running on this NIC.

Network debugging is supported on the following USB controllers:
busparams=128.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=128.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
  1. Wenn der Debugwert auf Ja festgelegt ist, verwenden Sie den set-Befehl, um das Debuggen zu deaktivieren.
C:\> bcdedit.exe /debug off
C:\> bcdedit.exe /set {default} bootdebug off
C:\> bcdedit.exe /set {bootmgr} bootdebug off
  1. Verwenden Sie zum Neustart den Befehl shutdown -r -t 0 von einer Eingabeaufforderung eines Administrators.

Nachdem der Ziel-PC neu gestartet und das Debuggen deaktiviert wurde, können wir die neue physische Funktion hinzufügen.

Hinzufügen der neuen physischen Funktion

  1. Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten und führen Sie den folgenden Befehl aus, um einen zweiten PF hinzuzufügen. Alle Werte werden mit Dezimalwerten bereitgestellt.
C:\KDNET> kdnet -addpf 141.0.0 198.51.100.1 50001

Succeeded adding a Pci PF on :141.0.1. Please power off or reboot the machine.

Enabling network debugging on Mellanox ConnectX-4 Lx Ethernet Adapter #2.
Manage-bde.exe not present.  Bitlocker presumed disabled.

To debug this machine, run the following command on your debugger host machine.
windbg -k net:port=50001,key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

Then reboot this machine by running shutdown -r -t 0 from this command prompt.

bus.dev.fun ist der PCI-Positionsport des NIC-Adapters, der die mehrfache PF-Funktion unterstützt, sodass der neue PF diesem Netzwerkgerät hinzugefügt/angeschlossen wird.

Die -addpf Option aktiviert das automatische Kerneldebugging über den KDNET-Transport für den hinzugefügten PF-Port.

[host name/host ip address] ist die TCP/IP-Adresse des Host-Computers. Verwenden Sie den ipconfig-Befehl auf dem Host-Computer, um diese Adresse zu ermitteln.

[port number] ist die TCP/IP-Portnummer. Sie können eine beliebige Pot-Nummer zwischen 49152 und 65535 auswählen. Der empfohlene Bereich liegt zwischen 50000 und 50039. Der von Ihnen ausgewählte Port wird für den exklusiven Zugriff durch den Debugger geöffnet, der auf dem Host-Computer ausgeführt wird. Wählen Sie eine eindeutige Portadresse für jedes Ziel-/Hostpaar aus, mit dem Sie arbeiten, innerhalb des empfohlenen Bereichs von 50000-50039. Im Beispiel wird 50005 angezeigt.

Beachten Sie, dass -addpf auch das Attribut NO_KDNIC zu den {Standard}-Ladeoptionen der Betriebssysteminstallation hinzufügt. Dies liegt daran, dass KDNIC nicht mehr auf KDNET ausgeführt werden muss.

Die Ladeoptionen = NO_KDNIC werden dem {Standard}-Betriebssystemtag hinzugefügt, um sicherzustellen, dass kdnic.sys nicht aus der neu hinzugefügten PF (141.0.1) ausgeführt wird.

Verwenden Sie den Befehl bcdedit, um zu bestätigen, dass NO_KDNIC festgelegt wurde.

C:\KDNET> bcdedit /enum {default}

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Windows Server
locale                  en-US
loadoptions             NO_KDNIC
inherit                 {bootloadersettings}
recoverysequence        {c23c4005d-12ae-11eb-9399-ac9840c152e7}
displaymessageoverride  Recovery
recoveryenabled         Yes
bootdebug               No
testsigning             Yes
isolatedcontext         Yes
flightsigning           Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \Windows
resumeobject            {c23c4005d-12ae-11eb-9399-ac9840c152e7}
nx                      OptOut
debug                   Yes
hypervisordebug         No

2. Run the bcdedit /enum command to display the generated key.

```console
C:\KDNET> bcdedit /dbgsettings
busparams               141.0.1
key                     2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
debugtype               NET
hostip                  198.51.100.1
port                    50001
dhcp                    Yes
The operation completed successfully.
   
  1. Kopieren Sie die zurückgegebene Taste in eine Notepad-.txt Datei. Im gezeigten Beispiel hat der generierte Schlüssel einen Wert von:

    2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

  2. Verwenden Sie optional kdnet.exe, um zu bestätigen, dass die verschiedenen physischen Funktionen aktiviert sind.

C:\KDNET> kdnet.exe

Network debugging is supported on the following NICs:
busparams=141.0.0, Mellanox ConnectX-4 Lx Ethernet Adapter #2, Plugged in, Primary function, multiple physical functions are enabled.
busparams=141.0.1, Mellanox ConnectX-4 Lx Ethernet Adapter, KDNET is running on this NIC, Secondary function.

Network debugging is supported on the following USB controllers:
busparams=128.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.0, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=128.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)
busparams=0.15.1, Standard USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)

Deaktivieren der Firewall auf dem Host

Deaktivieren Sie auf dem Host die Firewall für den Debugger-Port.

Verbinden WinDbg zum Ziel für das Kerneldebugging

Öffnen Sie auf dem Hostcomputer WinDbg. Wählen Sie im Menü Datei die Option Kerneldebugging. Öffnen Sie im Dialogfeld Kerneldebugging die Registerkarte Net. Fügen Sie die Portnummer und den Schlüssel ein, den Sie zuvor im Notepad.txt Datei gespeichert haben. Klickan Sie auf OK.

Sie können eine WinDbg-Sitzung auch starten, indem Sie ein Eingabeaufforderungsfenster öffnen und den folgenden Befehl eingeben. Dabei handelt es sich um den Port, den Sie oben ausgewählt haben, und um den Schlüssel, der oben von kdnet.exe zurückgegeben wurde. Fügen Sie den Schlüssel ein, den Sie zuvor im Noepad.txt Datei gespeichert haben.

windbg -k -d net:port=<YourDebugPort>,key=<YourKey>

Starten Sie den Zielcomputer neu.

Sobald der Debugger verbunden ist, starten Sie den Zielcomputer neu. Eine Möglichkeit, den PC neu zu starten, besteht darin, den Befehl über die shutdown -r -t 0 Eingabeaufforderung eines Administrators zu verwenden.

Nach dem Neustart des Ziel-PCs sollte der Debugger automatisch eine Verbindung herstellen.

Sobald der Computer neu gestartet wird, weist die NIC-Firmware der neu hinzugefügten KDNET PF eine neue MAC-Adresse zu, und dbgsettings::busparams verweist auf die neu hinzugefügte PF.

Suchen der MAC-Adresse für den 2PF-Adapter

Da der neu hinzugefügte PF ein PCI-Bus konfiguriert ist, wird ein neuer MAC-Adresswert der neu hinzugefügten PF durch die NIC-Firmware zugewiesen. Das kdnet.exe Tool unterstützt derzeit die Anzeige der MAC-Adresse für die hinzugefügte 2PF nicht.

Es gibt zwei Möglichkeiten, die neue MAC-Adresse zu finden:

Verwenden von WinDbg/KD mit einer lokalen KD-Sitzung

Führen Sie den lokalen Kerneldebugger windbg.exe -kl auf dem Ziel aus.

Stellen Sie sicher, dass Sie Zugriff auf die Symboldatei kdnet.pdb haben, indem Sie .reload /f kdnet.dll ausführen

Führen Sie den Befehl .kdtargetmac aus, um die MAC-Adresse abzurufen.

kd> .kdtargetmac
Force unload of kdnet.dll
ModLoad: fffff800`18510000 fffff800`18557000   kdnet.dll
Loading symbols for fffff800`18510000        kdnet.dll ->   kdnet.dll

The target machine MAC address in open-device format is: DC9840C151E8

Führen Sie die vom Anbieter bereitgestellten Firmware-Tools aus.

Eine Möglichkeit, die MAC-Adresse zu finden, besteht darin, die vom Hersteller bereitgestellten Firmware-Tools auszuführen. Informationen zum Herunterladen, Installieren und Verwenden der Tools des Herstellers finden Sie beim NIC-Anbieter.

... 
Base MAC:              98039baa757c           4

Suchen Sie das MAC-Adressfeld. Berechnen Sie den KDNET 2PF-MAC-Adresswert, indem Sie nacheinander eins zur letzten Ziffer des Root-MAC-Geräts hinzufügen. Für das Stammgerät mit einer Adresse von 98039baa757c würde das KDNET 2PF-Gerät also eine Adresse von 98039baa757d haben.

Wiederherstellen des vorherigen Konfigurationszustands – Entfernen des zweiten PCI-PF

Sie können die zuvor hinzugefügte PF von einem Gerät entfernen, indem Sie die kdnet -removepf Option und den ursprünglichen Bus.device.function-Wert verwenden. Die PF wird von der NIC getrennt, und die PF-zugewiesene Ressource wird von der NIC-Firmware freigegeben.

Um die KDNET PF vom Gerät zu entfernen, öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten, und führen Sie den folgenden Befehl aus.

kdnet -removepf [bus.dev.fun] [host name/host ip address] [port number]

Dabei ist bus.dev.fun der PCI-Standort-Port des NIC-Adapters, an dem der PF ursprünglich angeschlossen war. Dies ist derselbe PCI-Speicherort, der ursprünglich an kdnet -addpf übergeben wurde.

Mit der Option -removepf können Sie auch das Kerneldebugging über KDNET auf dem ursprünglichen bus.dev.fun erneut aktivieren.

C:\KDNET> kdnet -removepf 141.0.0 198.51.100.1 50001

Succeeded removing a Pci PF on :141.0.0. Please power off or reboot the machine.

Enabling network debugging on Mellanox ConnectX-4 Lx Ethernet Adapter #2.
Manage-bde.exe not present.  Bitlocker presumed disabled.

Der Befehl kdnet.exe -removepf entfernt auch das NO_KDNIC-Attribut aus den {default}-Ladeoptionen der Betriebssysteminstallation, da KDNET auf der ursprünglichen bus.dev.fun aktiviert wird, d. h. dbgsettings::busparams zeigt auf den ursprünglichen Netzwerkport . Dies führt dazu, dass KDNIC erneut verwendet wird und eine Netzwerkverbindung über KDNET erneut bereitgestellt wird.

Nachdem die PF entfernt wurde, muss der Computer neu gestartet werden, damit die BCD-Änderungen angewendet werden.

shutdown -r -t 0

Problembehandlung bei der Hostadapterkonfiguration

Überprüfen Sie, ob der 2PF-Adapter im Geräte-Manager vorhanden ist

Sie können überprüfen, ob das KDNET PF erfolgreich hinzugefügt wurde, indem Sie überprüfen, ob der neue NIC-Adapter einen neuen bus.dev.fun-Port in der Adapterliste des Windows-Geräte-Managers hat.

Dieses Diagramm zeigt drei verschiedene Adapter, wobei Adapter Nr. 2 für die Verwendung durch den Kerneldebugger reserviert ist.

device manager showing the network node with a node for Windows KDNET 2PF supported network adapter.

Häufige Fehlermeldungen – Hinzufügen eines neuen PF

C:\KDNET> kdnet -addpf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

Der PCI PF ist bereits auf diesem Port konfiguriert: Error=(0x80004004) Failed PF operation on the debug device. The debug device is not configured for KDNET (PF-Vorgang auf dem Debug-Gerät fehlgeschlagen. Das Debug-Gerät ist nicht für KDNET konfiguriert.).

  • Fügen Sie keine PF am Root-Port hinzu bzw. entfernen Sie sie nicht, wenn sie bereits als PF hinzugefügt wurde.

Häufige Fehlermeldungen – Entfernen eines PF

C:\KDNET> kdnet -removepf 28.0.1 192.168.137.1 50005

Adapter is not active: Error=(0x80070002)

Device Name:\\.\Mlx5Util

Pci Bus:28.0.1

Adapter ist nicht aktiv: Fehler=(0x80070002) Failed PF operation on the debug device. The debug device is not configured for KDNET (Fehlgeschlagener PF-Vorgang auf dem Debuggerät. Das Debuggerät ist nicht für KDNET konfiguriert).

  • Verwenden Sie keinen hinzugefügten PF-Port mit dem Befehlszeilenparameter "-removepf/-addpf", da alle Vorgänge am hinzugefügten PF-Port zu einem Fehler führen (Fehler: Adapter ist nicht am Port aktiv), da der Anbieter-NIC-Posteingangstreiber so eingerichtet ist, dass er ausdrücklich nicht auf einem hinzugefügten PF ausgeführt wird.
  • Beide Befehlszeilenoptionen (-addpf/-removepf) dürfen nur auf dem PCI-Stammgerät verwendet werden.
C:\KDNET> kdnet -removepf 28.0.0 192.168.137.1 50005

Device Name:\\.\Mlx5Util

Pci Bus:28.0.0

Auf diesem Port ist kein PCI-PF zu entfernen: Error=(0x80004005) Failed PF operation on the debug device. The debug device is not configured for KDNET (PF-Vorgang auf dem Debug-Gerät fehlgeschlagen. Das Debug-Gerät ist nicht für KDNET konfiguriert)

  • Wenn Sie einen neuen PF hinzufügen und ihn dann ohne Neustart entfernen, führt dies zu einem Fehler, da die NIC-Firmware des Anbieters einen Neustart/Zurücksetzen der NIC-HW erfordert, bevor sie den neu hinzugefügten PF erkennen kann.

Häufige Fehlermeldungen – BCDEdit

NO_KDNIC ist nicht ist in der {Standard}-Installation des BCD-Betriebssystems vorhanden.

  • Es wird nicht empfohlen, bcdedit.exe zum Modifizieren/Ändern des Debug-Geräts (dbgsettings) nach dem Hinzufügen eines neuen PF zu verwenden. Die kdnet -addpf/removepf-Befehlszeilenoptionen konfigurieren das Debug-Gerät und fügen auch automatisch das NO_KDNIC Token zu/von {default}::loadoptionshinzu bzw. entfernen es automatisch..

Siehe auch

Automatisches Einrichten des KDNET-Netzwerkkernel-Debuggings

Manuelles Debuggen des KDNET-Netzwerkkerns einrichten

Manuelles Debugging im Kernel-Modus über ein USB 3.0-Kabel einrichten

Manuelles Einrichten des Debuggens im Kernelmodus