デバイス ツリー

PnP マネージャーは、システム内のデバイスを追跡するデバイス ツリーを管理します。 次の図は、サンプル システム構成のデバイス ツリーを示します。

sample pnp device tree.

デバイス ツリーには、システムに存在するデバイスに関する情報が格納されています。 PnP マネージャーは、コンピューターの起動時に、ドライバーやその他のコンポーネントからの情報を使用してこのツリーを構築し、デバイスが追加または削除されるとにツリーを更新します。

デバイス ツリーの各ノードは、デバイス ノード ( devnode) と呼ばれます。 devnode は、デバイスのドライバーのデバイス オブジェクトに加え、システムが保持する内部情報で構成されます。 そのため、デバイス スタックごとに devnode があります。

PnP マネージャーは、IRP_MN_QUERY_DEVICE_RELATIONS 要求を使用して、その子デバイスの一覧をバス ドライバーに要求します。 バス ドライバーは、そのバス プロトコルに従って子の一覧を決定します。 たとえば、Windows ACPI ドライバー (Acpi.sys) は ACPI 名前空間を検索し、PCI ドライバーは PCI 構成領域を照会し、USB ハブ ドライバーは USB バス プロトコルに従います。

デバイス ツリーは階層構造であり、バス上のデバイスはバス アダプター、コントローラー、またはその他のバス デバイスの "子" として表されます (バス デバイスとは、他の物理デバイス、論理デバイス、または仮想デバイスを接続できるあらゆるデバイスを指します)。デバイスツリー内のデバイスの階層は、デバイス マネージャーを使用して、接続別にデバイスを表示できる表示オプションを選択することで確認できます。

デバイス ツリーの階層には、コンピューターにデバイスが接続されている構造が反映されます。 PnP マネージャーは、デバイスを管理する場合にこの階層を使用します。 たとえば、ユーザーが前の図で示されているコンピューターから USB コントローラーを取り外すよう要求した場合、PnP マネージャーは、この操作によって他の 3 つのデバイス (USB ハブ、ジョイスティック、カメラ) も取り外されることをデバイス ツリーから判断します。 PnP マネージャーは、USB コントローラーのドライバーに問い合わせて、コントローラーを安全に削除できるかどうかを判断する際に、コントローラーの子孫 (ハブ、ジョイスティック、カメラ) のドライバーにも問い合わせます。

デバイス ツリーは動的です。 デバイスがコンピューターに追加されたり、コンピューターから取り外されたりすると、PnP マネージャは (ドライバーとともに) システム上のデバイスの最新情報を維持します。

マシン上のデバイス間には、デバイス ツリーで表される階層関係以外の関係もあります。 たとえば、削除関係取り出し関係などがあります。 詳細については、IRP_MN_QUERY_DEVICE_RELATIONS のリファレンス ページを参照してください。

バス デバイスが子デバイスよりも先に構成されていることを除き、デバイス ツリーの構築順序を仮定することはできません。 たとえば、バス上のあるデバイスが、バス上の別のデバイスより先に設定されていると仮定することはできません。