플러그 앤 플레이 드라이버 디버깅을 위한 확장
플러그 앤 플레이 드라이버를 디버그할 때 다음 디버거 확장이 유용할 수 있습니다.
!중재
현재 시스템 리소스 중재자를 표시합니다. 중재자는 버스 드라이버가 리소스에 대한 요청을 중재하고 해당 버스에 연결된 디바이스 간의 리소스 충돌을 해결하려고 시도하는 코드 조각입니다.
!cmreslist
지정된 디바이스 개체의 CM_RESOURCE_LIST 표시합니다.
CM 리소스 목록의 주소를 알고 있어야 합니다.
예를 들면 다음과 같습니다.
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
이 CM 리소스 목록이 있는 디바이스가 I/O 범위 3F8-3FF 및 IRQ 4를 사용하고 있음을 보여줍니다.
!Dc
이 확장은 더 이상 사용되지 않습니다. ! pci에서 해당 기능을 구독했습니다. 이 섹션의 뒷부분에 있는 !pci 100 예제를 참조하세요.
!devext
다양한 디바이스에 대한 버스별 디바이스 확장 정보를 표시합니다.
!devnode
디바이스 트리의 노드에 대한 정보를 표시합니다.
디바이스 노드 0(0)은 디바이스 트리의 루트입니다.
예를 들면 다음과 같습니다.
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
DEVICE_OBJECT 대한 자세한 정보를 표시합니다.
예를 들면 다음과 같습니다.
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.
!드라이버
!drivers 명령은 더 이상 지원되지 않습니다. 대신 lm t n 명령을 사용합니다.
!drvobj
DRIVER_OBJECT 대한 자세한 정보를 표시합니다.
지정된 드라이버에서 만든 모든 디바이스 개체를 나열합니다.
예를 들면 다음과 같습니다.
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
(x86 대상 컴퓨터만 해당) PCI 구성 공간에 값 시퀀스를 씁니다.
ib, iw, id
I/O 포트에서 데이터를 읽습니다.
이러한 세 가지 명령은 디버그 중인 드라이버가 아닌 다른 디바이스에서 특정 I/O 범위를 클레임하는지 여부를 결정하는 데 유용합니다. 포트에서 0xFF 바이트 값은 포트가 사용되고 있지 않음을 나타냅니다.
!ioreslist
지정된 IO_RESOURCE_REQUIREMENTS_LIST 표시합니다.
!Irp
IRP에 대한 정보를 표시합니다.
!irpfind
대상 시스템에 현재 할당된 모든 IRP에 대한 정보 또는 필드가 지정된 검색 조건과 일치하는 IRP에 대한 정보를 표시합니다.
!Pci
(x86 대상 컴퓨터만 해당) PCI 버스 및 연결된 모든 디바이스의 현재 상태 표시합니다. PCI 구성 공간을 표시할 수도 있습니다.
다음 예제에서는 기본 버스에 디바이스를 표시합니다.
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
다음 예제에서는 SCSI 컨트롤러(버스 1, 디바이스 9, 함수 0)에 대한 PCI 구성 공간을 표시합니다.
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
자식 PCI 버스 및 CardBus 버스와 연결된 디바이스를 포함하여 PCI 디바이스 개체에 대한 정보를 표시합니다.
!pnpevent
PnP 디바이스 이벤트 큐를 표시합니다.
!rellist
PnP 관계 목록과 관련된 CM_RESOURCE_LIST 및 IO_RESOURCE_LIST 구조를 표시합니다.