場合によっては、デバイスの親にアクセスする必要があります。 たとえば、一部の種類のハードウェアデバイスの操作は、特定の親デバイスと一連の子デバイスの間の固定関係に依存します。 このようなハードウェアデバイスをアンインストールするには、すべての子デバイスに加えて親をアンインストールする必要があります。 親をアンインストールするには、親の SP_DEVINFO_DATA 構造体を取得する必要があります。 多機能プリンターなどのユニバーサルシリアルバス (USB) 複合デバイスは、このようなデバイスです。 これは、親複合デバイスとひとつ以上の子インターフェイスデバイスによってシステムで表されます (USB ドライバースタックアーキテクチャを参照)。 多機能プリンターをアンインストールするには、すべての子インターフェイスデバイスに加えて、その親複合デバイスをアンインストールする必要があります。
プラグアンドプレイ (PnP) マネージャーは、システムでデバイスを構成するときに、デバイスのデバイス ノード (devnode) をデバイスツリーに追加します。 PnP マネージャーは、システムからデバイスを削除すると、デバイスツリーからデバイスの devnode を削除し、デバイスが存在しないデバイスになります。
デバイスの親のデバイスインスタンス ID を確認するには、デバイスの DEVPKEY_Device_Parent のプロパティをSetupDiGetDeviceProperty を使用して照会できます。 現在のデバイスの場合、これにより、そのデバイスの親のデバイスインスタンス ID が提供されます。 存在しないデバイスの場合:
- Windows 8 以降の場合:
- 存在しないデバイスが現在のデバイスであった最後の時点から存在しないデバイスの親がシステム上のデバイス (存在または存在しないデバイス) としてまだ存在する場合、DEVPKEY_Device_Parentはその親デバイスのデバイスインスタンス ID を提供します。
- 存在しないデバイスが現在のデバイスであった最後の時点から存在しないデバイスの親がシステム上のデバイスとしてまだ存在しない場合、DEVPKEY_Device_Parent は、デバイスツリーのルートにあるデバイスのデバイスインスタンス ID を返します。
- Windows 8より前:
- DEVPKEY_Device_Parentを取得すると、プロパティが見つからないというエラーが返されます。
親デバイスのデバイスインスタンス ID を取得したら、SetupDiOpenDeviceInfo を使用して親の SP_DEVINFO_DATA の構造を取得できます。