Bagikan melalui


Ekstensi untuk Debugging Plug and Play Driver

Saat Anda men-debug driver Plug and Play, Ekstensi debugger berikut mungkin berguna.

!arbiter
Menampilkan arbiter sumber daya sistem saat ini. Arbiter adalah sepotong kode yang diekspos oleh pengemudi bus yang melakukan arbitrase permintaan sumber daya, dan mencoba menyelesaikan konflik sumber daya di antara perangkat yang terhubung di bus tersebut.

!cmreslist
Menampilkan CM_RESOURCE_LIST untuk objek perangkat yang ditentukan.

Anda harus mengetahui alamat Daftar Sumber Daya CM.

Ini contohnya:

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

Ini menunjukkan bahwa perangkat dengan daftar sumber daya CM ini menggunakan Rentang I/O 3F8-3FF dan IRQ 4.

!Dcs
Ekstensi ini usang -- fungsionalitasnya telah dijumlahkan oleh !pci. Lihat contoh !pci 100 nanti di bagian ini.

!devext
Menampilkan informasi ekstensi perangkat khusus bus untuk berbagai perangkat.

!devnode
Menampilkan informasi tentang simpul di pohon perangkat.

Simpul perangkat 0 (nol) adalah akar pohon perangkat.

Ini contohnya:

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
Menampilkan informasi terperinci tentang DEVICE_OBJECT.

Ini contohnya:

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
Perintah !drivers tidak lagi didukung. Gunakan perintah lm t n sebagai gantinya.

!drvobj
Menampilkan informasi terperinci tentang DRIVER_OBJECT.

Mencantumkan semua objek perangkat yang dibuat oleh pengandar yang ditentukan.

Ini contohnya:

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
(hanya komputer target x86) Menulis urutan nilai ke dalam ruang konfigurasi PCI.

ib, iw, id
Membaca data dari port I/O.

Ketiga perintah ini berguna untuk menentukan apakah rentang I/O tertentu diklaim oleh perangkat selain driver yang sedang di-debug. Nilai byte 0xFF pada port menunjukkan bahwa port tidak digunakan.

!ioreslist
Menampilkan IO_RESOURCE_REQUIREMENTS_LIST yang ditentukan.

!irp
Menampilkan informasi tentang IRP.

!irpfind
Menampilkan informasi tentang semua RUNP yang saat ini dialokasikan dalam sistem target, atau informasi tentang IRP yang bidangnya cocok dengan kriteria pencarian yang ditentukan.

!Pci
(hanya komputer target x86) Menampilkan status bus PCI saat ini dan perangkat apa pun yang melekat padanya. Ini juga dapat menampilkan ruang konfigurasi PCI.

Contoh berikut menampilkan perangkat di bus utama:

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

Contoh berikut menampilkan ruang konfigurasi PCI untuk pengontrol SCSI (bus 1, perangkat 9, fungsi 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
Menampilkan informasi tentang objek perangkat PCI, termasuk bus PCI anak dan bus CardBus, serta perangkat yang terpasang padanya.

!pnpevent
Menampilkan antrean peristiwa perangkat PnP.

!rellist
Menampilkan daftar relasi PnP dan struktur CM_RESOURCE_LIST dan IO_RESOURCE_LIST terkait.