デバイス オブジェクトの概要

オペレーティング システムは、 デバイス オブジェクトごとにデバイスを表します。 1 つ以上のデバイス オブジェクトが各デバイスに関連付けられます。 デバイス オブジェクトは、デバイス上のすべての操作のターゲットとして機能します。

カーネル モード ドライバーは、次の例外を除き、デバイスごとに少なくとも 1 つのデバイス オブジェクトを作成する必要があります。

  • クラスまたはポート ドライバーが関連付けられているミニドライバーは、独自のデバイス オブジェクトを作成する必要はありません。 クラスまたはポート ドライバーは、デバイス オブジェクトを作成し、ミニドライバーに操作をディスパッチします。

  • NDIS ミニポート ドライバーなど、デバイスの種類に固有のサブシステムの一部であるドライバーには、サブシステムによって作成されたデバイス オブジェクトがあります。

ドライバーが独自のデバイス オブジェクトを作成するかどうかを判断するには、特定のデバイスの種類のドキュメントを参照してください。

一部のデバイス オブジェクトは物理デバイスを表していません。 I/O 要求を処理するが、それらの要求をハードウェアに渡さないソフトウェア専用ドライバーは、操作のターゲットを表すデバイス オブジェクトを作成する必要があります。

ドライバーがデバイス オブジェクトを作成する方法の詳細については、「 デバイス オブジェクトの作成」を参照してください。

デバイスは通常、デバイスの I/O 要求を処理するドライバー スタック内のドライバーごとに 1 つずつ、複数のデバイス オブジェクトによって表されます。 デバイスのデバイス オブジェクトは、デバイス スタックに編成されます。 デバイスで操作が実行されるたびに、システムは、デバイス スタック内の最上位のデバイス オブジェクトのドライバーに IRP データ構造を渡します。 各ドライバーは、IRP を処理するか、デバイス スタック内の次の下位のデバイス オブジェクトに関連付けられているドライバーに渡します。 デバイス スタックの詳細については、「 WDM デバイス スタックの例」を参照してください。 IRP の詳細については、「IRP の 処理」を参照してください。

デバイス オブジェクトは、オブジェクト マネージャーによって管理される DEVICE_OBJECT 構造体によって表されます。 オブジェクト マネージャーは、他のシステム オブジェクトに対して行うのと同じ機能をデバイス オブジェクトに提供します。 特に、デバイス オブジェクトに名前を付け、名前付きデバイス オブジェクトでハンドルを開くことができます。 名前付きデバイス オブジェクトの詳細については、「 名前付きデバイス オブジェクト」を参照してください。

システムは、ドライバーがデバイス固有の記憶域に使用できるデバイス拡張機能と呼ばれる、デバイス オブジェクトごとに専用の記憶域を提供します。 デバイス拡張機能は、デバイス オブジェクトと共にシステムによって作成および解放されます。 詳細については、「 デバイス拡張機能」を参照してください。

次の図は、デバイス オブジェクトと I/O マネージャーの関係を示しています。

diagram illustrating a device object.

図は、ドライバー ライターに関心がある DEVICE_OBJECT 構造体のメンバーを示しています。 これらのメンバーの詳細については、「デバイス オブジェクトの作成、デバイス オブジェクトの初期化、およびデバイス オブジェクトのプロパティ」を参照してください。