Condividi tramite


Estensioni per il debug di driver Plug and Play

Quando si esegue il debug di driver Plug and Play, è possibile che siano utili le estensioni del debugger seguenti.

!Arbitro
Visualizza gli arbitri delle risorse di sistema correnti. Un arbitro è un frammento di codice esposto dal driver del bus che arbitra le richieste di risorse e tenta di risolvere i conflitti di risorse tra i dispositivi connessi al bus.

!cmreslist
Visualizza il CM_RESOURCE_LIST per l'oggetto dispositivo specificato.

È necessario conoscere l'indirizzo dell'elenco di risorse cm.

Esempio:

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

Ciò mostra che il dispositivo con questo elenco di risorse CM usa l'intervallo di I/O 3F8-3FF e IRQ 4.

!Dcs
Questa estensione è obsoleta: la sua funzionalità è stata sottosumata da !pci. Vedere l'esempio !pci 100 più avanti in questa sezione.

!devext
Visualizza informazioni sull'estensione del dispositivo specifiche del bus per un'ampia gamma di dispositivi.

!Devnode
Visualizza informazioni su un nodo nell'albero dei dispositivi.

Il nodo dispositivo 0 (zero) è la radice dell'albero dei dispositivi.

Esempio:

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
Visualizza informazioni dettagliate su un DEVICE_OBJECT.

Esempio:

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.

!Driver
Il comando !drivers non è più supportato. Usare invece il comando lm t n .

!drvobj
Visualizza informazioni dettagliate su un DRIVER_OBJECT.

Elenca tutti gli oggetti dispositivo creati dal driver specificato.

Esempio:

kd> !drvobj serial

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

Device Object list:
ffba3040  ff0b4040  ff0b59e0  ff0b5040

!bce, !ecd, !ecw
(solo computer di destinazione x86) Scrive una sequenza di valori nello spazio di configurazione PCI.

ib, iw, id
Legge i dati da una porta di I/O.

Questi tre comandi sono utili per determinare se un determinato intervallo di I/O è richiesto da un dispositivo diverso dal driver sottoposto a debug. Un valore di byte di 0xFF in una porta indica che la porta non è in uso.

!ioreslist
Visualizza il IO_RESOURCE_REQUIREMENTS_LIST specificato.

!Irp
Visualizza informazioni su un IRP.

!irpfind
Visualizza informazioni su tutti i provider di integrazione attualmente allocati nel sistema di destinazione o informazioni su tali provider di integrazione i cui campi corrispondono ai criteri di ricerca specificati.

!Pci
(solo computer di destinazione x86) Visualizza lo stato corrente dei bus PCI e di tutti i dispositivi collegati. Può anche visualizzare lo spazio di configurazione PCI.

Nell'esempio seguente vengono visualizzati i dispositivi nel bus primario:

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

Nell'esempio seguente viene visualizzato lo spazio di configurazione PCI per il controller SCSI (bus 1, dispositivo 9, funzione 0):

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
Visualizza informazioni sugli oggetti dispositivo PCI, inclusi bus PCI figlio e bus CardBus, nonché i dispositivi collegati.

!pnpevent
Visualizza la coda di eventi del dispositivo PnP.

!rellist
Visualizza un elenco di relazioni PnP e tutte le strutture correlate CM_RESOURCE_LIST e IO_RESOURCE_LIST.