デバイスマネージャーの [表示] を [デバイス (接続別)] に切り替える


切り分けのために、接続したデバイスと PC のバスとの間でどんなドライバーが動いているか知りたいと思ったことはありますか?

 

皆さん、こんにちは。Windows Driver Kit サポートチームの津田です。今回は、そんな皆様に、デバイス マネージャーの [表示] を、デフォルトの [デバイス (種類別)] から [デバイス (接続別)] に切り替え、各デバイス ノードからドライバーを確認できるところをお見せしたいと思います。また、同じドライバー構成をカーネルデバッガーでデバイス ノードをたどって確認する方法もご紹介します。

 

今回、例として Windows 10 (1607) x86 を使います。

 

1. [スタート] メニューを右クリックして、[デバイス マネージャー] をクリックして、デバイス マネージャーを起動します。

2. 任意のデバイスをクリックします。今回は例として、[ディスクドライブ] にある [Virtual HD ATA Device] をクリックします。

 

clip_image002

 

3. 上図のように、[表示] をクリックすると、[デバイス (種類別)] となっているので、[デバイス (接続別)] をクリックします。

 

clip_image004

 

4. 上図の通り、対象デバイスが接続されている場所がツリー状に表示されます。上記の例では、以下のツリーになっています。

 

ACPI x86-based PC

Microsoft ACPI-Compliant System

   PCI バス

     Intel(R) 82371AB/EB PCI Bus Master IDE Controller

         ATA Channel 0

            Virtual HD ATA Device

 

5. 各ノードを右クリックして [プロパティ] をクリックし、[ドライバー] タブを開いて [ドライバーの詳細] をクリックします。

 

5-1. まずは、Virtual HD ATA Device を見てみます。以下のように disk.sys, EhStorClass.sys, partmgr.sys, vmstorfl.sys が入っていて、各ファイルをクリックすると弊社製であることがわかります。

 

clip_image006

 

5-2. 次に、一つ上のノードである ATA Channel 0 を見てみます。Atapi.sys, ataport.sys があることがわかります。

 

clip_image008

 

5-3. 次に、Intel(R) 82371AB/EB PCI Bus Master IDE Controller を見てみます。Atapi.sys, ataport.sys, intelide.sys, pciidex.sys があるのがわかります。

 

clip_image010

 

5-4. 次に PCI バスを見てみます。その名の通り、pci.sys があります。

 

clip_image012

 

 

6. 上記をカーネルデバッガ―で見てみます。

 

6-1. まずは、disk.sys のデバイスオブジェクトを探します。

 

kd> !drvobj disk

Driver object (8ebe86f8) is for:

\Driver\disk

Driver Extension List: (id , addr)

(8a657bd0 8ebeee20) 

Device Object list:

8d700a80 

 

6-2. 最後に表示されたデバイスオブジェクトのアドレスを使って、デバイススタックを見てみます。5-1 で確認した disk.sys の上に partmgr.sys があることがわかります。またこのデバイスノードでは、atapi.sys のデバイスオブジェクトが PDO であることがわかります。デバイスオブジェクトやデバイススタックについては K 里さんのエントリ (Device Object と Device Stack) をご参照ください。

 

kd> !devstack 8d700a80

  !DevObj   !DrvObj            !DevExt   ObjectName

  8d7006e0  \Driver\partmgr    8d700798 

> 8d700a80  \Driver\disk       8d700b38  DR0

  8d6c1790  \Driver\storflt    8d6c1f10 

  8ebd9920  \Driver\ACPI       8eb0b568 

  8ebd7878  \Driver\atapi      8ebd7930  IdeDeviceP0T0L0-0

!DevNode 8ebdd008 :

  DeviceInst is "IDE\DiskVirtual_HD______________________________1.1.0___\5&35dc7040&0&0.0.0"

  ServiceName is "disk"

 

6-3. !DevNode として表示されたデバイスノードを見てみます。PDO が上記 atapi.sys のデバイスオブジェクトと同じ (0x8ebd7878) であることがわかります。このデバイスノードが末端なので Child のアドレスが NULL (0) です。親ノードである Parent のアドレス (0x8ebd3e30) が確認できます。

 

kd> !DevNode 8ebdd008

DevNode 0x8ebdd008 for PDO 0x8ebd7878

  Parent 0x8ebd3e30   Sibling 0000000000   Child 0000000000  

  InstancePath is "IDE\DiskVirtual_HD______________________________1.1.0___\5&35dc7040&0&0.0.0"

  ServiceName is "disk"

  State = DeviceNodeStarted (0x308)

  Previous State = DeviceNodeEnumerateCompletion (0x30d)

  StateHistory[08] = DeviceNodeEnumerateCompletion (0x30d)

  StateHistory[07] = DeviceNodeEnumeratePending (0x30c)

  StateHistory[06] = DeviceNodeStarted (0x308)

  StateHistory[05] = DeviceNodeStartPostWork (0x307)

  StateHistory[04] = DeviceNodeStartCompletion (0x306)

  StateHistory[03] = DeviceNodeResourcesAssigned (0x304)

  StateHistory[02] = DeviceNodeDriversAdded (0x303)

  StateHistory[01] = DeviceNodeInitialized (0x302)

  StateHistory[00] = DeviceNodeUninitialized (0x301)

  StateHistory[19] = Unknown State (0x0)

  StateHistory[18] = Unknown State (0x0)

  StateHistory[17] = Unknown State (0x0)

  StateHistory[16] = Unknown State (0x0)

  StateHistory[15] = Unknown State (0x0)

  StateHistory[14] = Unknown State (0x0)

  StateHistory[13] = Unknown State (0x0)

  StateHistory[12] = Unknown State (0x0)

  StateHistory[11] = Unknown State (0x0)

  StateHistory[10] = Unknown State (0x0)

  StateHistory[09] = Unknown State (0x0)

  Flags (0x20000130)  DNF_ENUMERATED, DNF_IDS_QUERIED,

                      DNF_NO_RESOURCE_REQUIRED, DNF_NO_UPPER_DEVICE_FILTERS

  UserFlags (0x00000008)  DNUF_NOT_DISABLEABLE

  DisableableDepends = 1 (including self)

 

6-4. 親ノードを !devnode で見てみます。Child のアドレスが、6-3 のもの (0x8ebdd008) と同じであることがわかります。

 

kd> !devnode 8ebd3e30

DevNode 0x8ebd3e30 for PDO 0x8ebd2ce0

  Parent 0x8eb7fa80   Sibling 0x8ebd3c58   Child 0x8ebdd008  

  InstancePath is "PCIIDE\IDEChannel\4&10bf2f88&0&0"

  ServiceName is "atapi"

  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)

  StateHistory[03] = DeviceNodeResourcesAssigned (0x304)

  StateHistory[02] = DeviceNodeDriversAdded (0x303)

  StateHistory[01] = DeviceNodeInitialized (0x302)

  StateHistory[00] = DeviceNodeUninitialized (0x301)

  StateHistory[19] = Unknown State (0x0)

  StateHistory[18] = Unknown State (0x0)

  StateHistory[17] = Unknown State (0x0)

  StateHistory[16] = Unknown State (0x0)

  StateHistory[15] = Unknown State (0x0)

  StateHistory[14] = Unknown State (0x0)

  StateHistory[13] = Unknown State (0x0)

  StateHistory[12] = Unknown State (0x0)

  StateHistory[11] = Unknown State (0x0)

  StateHistory[10] = Unknown State (0x0)

  Flags (0x6c0000f0)  DNF_ENUMERATED, DNF_IDS_QUERIED,

                      DNF_HAS_BOOT_CONFIG, DNF_BOOT_CONFIG_RESERVED,

                      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 = 2 (including self)

 

6-5. PDO のアドレスからデバイススタックを見てみます。Atapi.sys のデバイスオブジェクトが FDO としてあり、このデバイスノードは、5-2 で見た「ATA Channel 0」と同じだとわかります。PDO intelide.sys のデバイスオブジェクトなので、5-3 の「Intel(R) 82371AB/EB PCI Bus Master IDE Controller」につながっているのだろうと推察できます。

 

kd> !devstack 0x8ebd2ce0

  !DevObj   !DrvObj            !DevExt   ObjectName

  88695028  \Driver\atapi      886950e0  IdePort0

  8ebc9620  \Driver\ACPI       8eb0b7a0 

> 8ebd2ce0  \Driver\intelide   8ebd2d98  PciIde0Channel0

!DevNode 8ebd3e30 :

  DeviceInst is "PCIIDE\IDEChannel\4&10bf2f88&0&0"

  ServiceName is "atapi"

 

6-6. 同様に Parent をたどって、PDO のデバイススタックを表示していくと以下のようになります。

 

kd> !devnode 0x8eb7fa80

DevNode 0x8eb7fa80 for PDO 0x8eb7e030

  Parent 0x887eccc0   Sibling 0x8eb7f8a8   Child 0x8ebd3e30  

  InstancePath is "PCI\VEN_8086&DEV_7111&SUBSYS_00000000&REV_01\3&267a616a&0&39"

  ServiceName is "intelide"

  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)

  StateHistory[03] = DeviceNodeResourcesAssigned (0x304)

  StateHistory[02] = DeviceNodeDriversAdded (0x303)

  StateHistory[01] = DeviceNodeInitialized (0x302)

  StateHistory[00] = DeviceNodeUninitialized (0x301)

  StateHistory[19] = Unknown State (0x0)

  StateHistory[18] = Unknown State (0x0)

  StateHistory[17] = Unknown State (0x0)

  StateHistory[16] = Unknown State (0x0)

  StateHistory[15] = Unknown State (0x0)

  StateHistory[14] = Unknown State (0x0)

  StateHistory[13] = Unknown State (0x0)

  StateHistory[12] = Unknown State (0x0)

  StateHistory[11] = Unknown State (0x0)

  StateHistory[10] = Unknown State (0x0)

  Flags (0x6c0000f0)  DNF_ENUMERATED, DNF_IDS_QUERIED,

                      DNF_HAS_BOOT_CONFIG, DNF_BOOT_CONFIG_RESERVED,

                      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 = 2 (including self)

 

// PDO のデバイススタックを表示

 

kd> !devstack 0x8eb7e030

  !DevObj   !DrvObj            !DevExt   ObjectName

  8ebd2030  \Driver\intelide   8ebd20e8  PciIde0

  8eb7e8f8  \Driver\ACPI       8eb0b9d8 

> 8eb7e030  \Driver\pci        8eb7e0e8  NTPNP_PCI0002

!DevNode 8eb7fa80 :

  DeviceInst is "PCI\VEN_8086&DEV_7111&SUBSYS_00000000&REV_01\3&267a616a&0&39"

  ServiceName is "intelide"

 

// Parent のデバイスノードを表示

 

kd> !devnode 0x887eccc0

DevNode 0x887eccc0 for PDO 0x8e3fd1e0

  Parent 0x8869b860   Sibling 0x8eb0ce00   Child 0x8eb7fe30  

  InterfaceType 0x5  Bus Number 0

  InstancePath is "ACPI\PNP0A03\0"

  ServiceName is "pci"

  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)

  StateHistory[03] = DeviceNodeResourcesAssigned (0x304)

  StateHistory[02] = DeviceNodeDriversAdded (0x303)

  StateHistory[01] = DeviceNodeInitialized (0x302)

  StateHistory[00] = DeviceNodeUninitialized (0x301)

  StateHistory[19] = Unknown State (0x0)

  StateHistory[18] = Unknown State (0x0)

  StateHistory[17] = Unknown State (0x0)

  StateHistory[16] = Unknown State (0x0)

  StateHistory[15] = Unknown State (0x0)

  StateHistory[14] = Unknown State (0x0)

  StateHistory[13] = Unknown State (0x0)

  StateHistory[12] = Unknown State (0x0)

  StateHistory[11] = Unknown State (0x0)

  StateHistory[10] = Unknown State (0x0)

  Flags (0x6c0000f0)  DNF_ENUMERATED, DNF_IDS_QUERIED,

                      DNF_HAS_BOOT_CONFIG, DNF_BOOT_CONFIG_RESERVED,

                      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

  CapabilityFlags (0x000000c0)  UniqueID, SilentInstall

  DisableableDepends = 4 (including self)

 

// PDO のデバイススタックを表示。PCI バスにたどり着いた。

 

kd> !devstack 0x8e3fd1e0

  !DevObj   !DrvObj            !DevExt   ObjectName

  8ebb9020  \Driver\pci        8ebb90d8 

> 8e3fd1e0  \Driver\ACPI       8eb0bc10  0000000f

!DevNode 887eccc0 :

  DeviceInst is "ACPI\PNP0A03\0"

  ServiceName is "pci"

 

 

上記を行うことで、正常系 (例えばクリーンインストールした OS の環境) と異常系 (お困りの現象が発生する環境) のドライバー構成の違いを切り分けることができる場合があります。皆様のトラブルシューティングの一助となりましたら幸いです。

Skip to main content