次の方法で共有


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

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

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

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

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

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

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

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

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

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

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

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

デバイス オブジェクトを示す図。

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