Freigeben über


Erweiterungen für das Debuggen von Plug & Play Treibern

Beim Debuggen Plug & Play Treibern finden Sie möglicherweise die folgenden Debuggererweiterungen nützlich.

!Schiedsrichter
Zeigt die aktuellen Systemressourcen-Arbiter an. Ein Arbiter ist ein Codeteil, der vom Bustreiber verfügbar gemacht wird, der Ressourcenanforderungen ausgibt und versucht, die Ressourcenkonflikte zwischen den mit diesem Bus verbundenen Geräten zu lösen.

!cmreslist
Zeigt die CM_RESOURCE_LIST für das angegebene Geräteobjekt an.

Sie müssen die Adresse der CM-Ressourcenliste kennen.

Beispiel:

kd> !cmreslist 0xe12576e8

CmResourceList at 0xe12576e8  Version 0.0  Interface 0x1  Bus #0
  Entry 0 - Port (0x1) Device Exclusive (0x1)
    Flags (0x01) - PORT_MEMORY PORT_IO
    Range starts at 0x3f8 for 0x8 bytes
  Entry 1 - Interrupt (0x2) Shared (0x3)
    Flags (0x01) - LATCHED
    Level 0x4, Vector 0x4, Affinity 0xffffffff

Dies zeigt, dass das Gerät mit dieser CM-Ressourcenliste den E/A-Bereich 3F8-3FF und IRQ 4 verwendet.

!Dcs
Diese Erweiterung ist veraltet– ihre Funktionalität wurde von !pci subsumiert. Sehen Sie sich das Beispiel !pci 100 weiter unten in diesem Abschnitt an.

!devext
Zeigt busspezifische Geräteerweiterungsinformationen für eine Vielzahl von Geräten an.

!devnode
Zeigt Informationen zu einem Knoten in der Gerätestruktur an.

Geräteknoten 0 (null) ist der Stamm der Gerätestruktur.

Beispiel:

0: kd> !devnode 0xfffffa8003634af0
DevNode 0xfffffa8003634af0 for PDO 0xfffffa8003658590
  Parent 0xfffffa8003604010   Sibling 0xfffffa80036508e0   Child 0000000000
  InstancePath is "ROOT\SYSTEM\0000"
  ServiceName is "swenum"
  State = DeviceNodeStarted (0x308)
  Previous State = DeviceNodeEnumerateCompletion (0x30d)
  StateHistory[09] = DeviceNodeEnumerateCompletion (0x30d)
  StateHistory[08] = DeviceNodeEnumeratePending (0x30c)
  StateHistory[07] = DeviceNodeStarted (0x308)
  StateHistory[06] = DeviceNodeStartPostWork (0x307)
  StateHistory[05] = DeviceNodeStartCompletion (0x306)
  StateHistory[04] = DeviceNodeStartPending (0x305)
  ...
  Flags (0x6c000131)  DNF_MADEUP, DNF_ENUMERATED, 
                      DNF_IDS_QUERIED, DNF_NO_RESOURCE_REQUIRED, 
                      DNF_NO_LOWER_DEVICE_FILTERS, DNF_NO_LOWER_CLASS_FILTERS, 
                      DNF_NO_UPPER_DEVICE_FILTERS, DNF_NO_UPPER_CLASS_FILTERS
  UserFlags (0x00000008)  DNUF_NOT_DISABLEABLE
  DisableableDepends = 1 (including self)

!devobj
Zeigt detaillierte Informationen zu einem DEVICE_OBJECT an.

Beispiel:

kd> !devobj 0xff0d4af0

Device object (ff0d4af0) is for:
 00252d \Driver\PnpManager DriverObject ff0d9030
Current Irp 00000000 RefCount 0 Type 00000004 Flags 00001040AttachedDev ff0b59e0

DevExt ff0d4ba8 DevNode ff0d4a08
Device queue is not busy.

!Treiber
Der Befehl !drivers wird nicht mehr unterstützt. Verwenden Sie stattdessen den Befehl lm t n .

!drvobj
Zeigt detaillierte Informationen zu einem DRIVER_OBJECT an.

Listet alle Geräteobjekte auf, die vom angegebenen Treiber erstellt wurden.

Beispiel:

kd> !drvobj serial

Driver object (ff0ba630) is for:
 \Driver\Serial
Driver Extension List: (id , addr)

Device Object list:
ffba3040  ff0b4040  ff0b59e0  ff0b5040

!ecb, !ecd, !ecw
(nur x86-Zielcomputer) Schreibt eine Sequenz von Werten in den PCI-Konfigurationsbereich.

ib, iw, id
Liest Daten von einem E/A-Port.

Diese drei Befehle sind nützlich, um zu bestimmen, ob ein bestimmter E/A-Bereich von einem anderen Gerät als dem zu debuggenden Treiber beansprucht wird. Der Bytewert 0xFF an einem Port gibt an, dass der Port nicht verwendet wird.

!ioreslist
Zeigt die angegebene IO_RESOURCE_REQUIREMENTS_LIST an.

!Irp
Zeigt Informationen zu einem IRP an.

!irpfind
Zeigt Informationen zu allen irPs an, die derzeit im Zielsystem zugeordnet sind, oder Informationen zu den IRPs, deren Felder den angegebenen Suchkriterien entsprechen.

!Pci
(nur x86-Zielcomputer) Zeigt die aktuelle status der PCI-Busse und aller angeschlossenen Geräte an. Außerdem kann der PCI-Konfigurationsbereich angezeigt werden.

Im folgenden Beispiel werden die Geräte im primären Bus angezeigt:

kd> !pci
PCI Bus 0
00:0  8086:1237.02  Cmd[0106:.mb..s]  Sts[2280:.....]  Device  Host bridge
0d:0  8086:7000.01  Cmd[0007:imb...]  Sts[0280:.....]  Device  ISA bridge
0d:1  8086:7010.00  Cmd[0005:i.b...]  Sts[0280:.....]  Device  IDE controller
0e:0  1011:0021.01  Cmd[0107:imb..s]  Sts[0280:.....]  PciBridge 0->1-1  PCI-PCI
 bridge
10:0  5333:8811.43  Cmd[0023:im.v..]  Sts[0200:.....]  Device  VGA compatible controller



The following example displays the devices for the secondary bus, with verbose output:

kd> !pci 1 1

PCI Bus 1
08:0  10b7:5900.00  Cmd[0107:imb..s]  Sts[0200:.....]  Device  Ethernet
      cf8:80014000  IntPin:1  IntLine:f  Rom:fa000000  cis:0  cap:0
      IO[0]:fce1

09:0  9004:8178.00  Cmd[0117:imb..s]  Sts[0280:.....]  Device  SCSI controller
      cf8:80014800  IntPin:1  IntLine:f  Rom:fa000000  cis:0  cap:0
      IO[0]:f801       MEM[1]:f9fff000

0b:0  9004:5800.10  Cmd[0116:.mb..s]  Sts[0200:.....]  Device  SubID:9004:8940
1394 host controller
      cf8:80015800  IntPin:1  IntLine:e  Rom:fa000000  cis:0  cap:0
      MEM[0]:f9ffec00

Im folgenden Beispiel wird der PCI-Konfigurationsbereich für den SCSI-Controller (Bus 1, Gerät 9, Funktion 0) angezeigt:

kd> !pci 100 1 9 0 
00: 9004    ;VendorID=9004
02: 8178    ;DeviceID=8178
04: 0117    ;Command=SERREnable,MemWriteEnable,BusInitiate,MemSpaceEnable,IOSpac
eEnable
06: 0280    ;Status=FB2BCapable,DEVSELTiming:1
08: 00      ;RevisionID=00
09: 00      ;ProgIF=00 (SCSI bus controller)
0a: 00      ;SubClass=00
0b: 01      ;BaseClass=01 (Mass storage controller)
0c: 08      ;CacheLineSize=Burst8DW
0d: 20      ;LatencyTimer=20
0e: 00      ;HeaderType=00
0f: 00      ;BIST=00
10: 0000f801;BAR0=0000f801
14: f9fff000;BAR1=f9fff000
18: 00000000;BAR2=00000000
1c: 00000000;BAR3=00000000
20: 00000000;BAR4=00000000
24: 00000000;BAR5=00000000
28: 00000000;CBCISPtr=00000000
2c: 0000    ;SubSysVenID=0000
2e: 0000    ;SubSysID=0000
30: fa000000;ROMBAR=fa000000
34: 00000000;Reserved=00000000
38: 00000000;Reserved=00000000
3c: 0f      ;IntLine=0f
3d: 01      ;IntPin=01
3e: 08      ;MinGnt=08
3f: 08      ;MaxLat=08
40: 00001580,00001580,00000000,00000000,00000000,00000000,00000000,00000000
60: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000
80: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000
a0: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000
c0: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000
e0: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000

!pcitree
Zeigt Informationen zu PCI-Geräteobjekten an, einschließlich untergeordneter PCI-Busse und CardBus-Busse sowie der angeschlossenen Geräte.

!pnpevent
Zeigt die PnP-Geräteereigniswarteschlange an.

!rellist
Zeigt eine PnP-Beziehungsliste und alle zugehörigen CM_RESOURCE_LIST- und IO_RESOURCE_LIST-Strukturen an.