プラグ アンド プレイ ドライバーをデバッグするための拡張機能

プラグ アンド プレイ ドライバーをデバッグする場合、次のデバッガー拡張機能が役立つ場合があります。

!arbiter
現在のシステム リソース アービターを表示します。 アービターとは、リソースの要求を解決し、そのバスに接続されているデバイス間のリソースの競合を解決しようとするバス ドライバーによって公開されるコードの一部です。

!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 を使用していることを示しています。

!dcs
この拡張機能は廃止されました。この機能は !pci に包含されています。 このセクションで後述する !pci 100 の例を参照してください。

!devext
さまざまなデバイスのバス固有のデバイス拡張機能情報を表示します。

!devnode
デバイス ツリー内のノードに関する情報を表示します。

デバイス ノード 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
!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 ポートからデータを読み取ります。

これらの 3 つのコマンドは、デバッグ対象のドライバー以外のデバイスが特定の 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 構造体を表示します。