次の方法で共有


Object-Based

Microsoft Windows NT ベースのオペレーティング システムはオブジェクト ベースです。 エグゼクティブのさまざまなコンポーネントは、1 つ以上のオブジェクト型を定義します。 各コンポーネントは、そのオブジェクト型のインスタンスを操作するカーネル モード サポート ルーチンをエクスポートします。 コンポーネントが別のコンポーネントのオブジェクトに直接アクセスすることはできません。 別のコンポーネントのオブジェクトを使用するには、コンポーネントがエクスポートされたサポート ルーチンを呼び出す必要があります。

この設計により、オペレーティング システムは移植性と柔軟性の両方を実現できます。 たとえば、オペレーティング システムの将来のリリースでは、同じオブジェクト型を定義する再コーディングされたカーネル コンポーネントが含まれる可能性がありますが、内部構造はまったく異なります。 この架空の再コーディングバージョンのカーネルが、既存のセットと同じ名前とパラメーターを持つ一連のサポート ルーチンをエクスポートする場合、内部の変更は、既存のシステム内の他のエグゼクティブ コンポーネントの移植性には影響しません。

同様に、移植性と構成を維持するには、ドライバーは、WDK で説明されているサポート ルーチンとその他のインターフェイスのみを使用して、オペレーティング システムと相互に通信する必要があります。

オペレーティング システムと同様に、ドライバーもオブジェクト ベースです。 例えば次が挙げられます。

  • ファイル オブジェクト は、デバイスへのユーザー モード アプリケーションの接続を表します。

  • デバイス オブジェクト は、各ドライバーの論理、仮想、または物理デバイスを表します。

  • ドライバー オブジェクト は、各ドライバーの読み込みイメージを表します。

I/O マネージャーは、ファイル オブジェクト、デバイス オブジェクト、およびドライバー オブジェクトの構造とインターフェイスを定義します。

他のエグゼクティブ コンポーネントと同様に、ドライバーは、I/O マネージャーや他のシステム コンポーネントがエクスポートするカーネル モード サポート ルーチンを呼び出すことによってオブジェクトを使用します。 カーネル モード サポート ルーチンには、通常、各ルーチンが操作する特定のオブジェクトとそのオブジェクトに対して各ルーチンが実行する操作を識別する名前があります。 これらのサポート ルーチン名の形式は次のとおりです。

PrefixOperationObject

where

接頭辞 サポート ルーチンをエクスポートするカーネル モード コンポーネントと、通常はオブジェクト型を定義したコンポーネントを識別します。 ほとんどのプレフィックスには 2 つの文字があります。

操作 オブジェクトに対する処理について説明します。

オブジェクト オブジェクトの種類を識別します。

たとえば、I/O マネージャーの IoCreateDevice ルーチンは、物理、論理、または仮想デバイスを I/O 要求のターゲットとして表すデバイス オブジェクトを作成します。

1 つのシステム コンポーネントは、別のコンポーネントのサポート ルーチンを呼び出すルーチンをエクスポートできます。 これにより、ドライバーが行う必要がある呼び出しの数を減らすことができます。 特に、I/O マネージャーは、ドライバーの開発を容易にする特定のルーチンをエクスポートします。 たとえば、最下位レベルのドライバーが ISR を登録するために呼び出す IoConnectInterruptEx は、割り込みオブジェクトのカーネル サポート ルーチンを呼び出します。

オブジェクトの不透明度

一部のシステム定義オブジェクトは 不透明です。定義するシステム コンポーネントだけがこのようなオブジェクトの内部構造を認識し、オブジェクトに含まれるすべてのデータに直接アクセスできます。 不透明なオブジェクト エクスポートを定義するシステム コンポーネントは、ドライバーやその他のカーネル モード コンポーネントがそのオブジェクトを操作するために呼び出すことができるルーチンをサポートします。 ドライバーは、不透明なオブジェクト構造に直接アクセスすることはありません。

手記 ドライバーの移植性を維持するには、ドライバーは、システム定義オブジェクトを操作するシステム提供のサポート ルーチンを使用する必要があります。 定義システム・コンポーネントは、オブジェクト・タイプの内部構造をいつでも変更できます。