一般フレームワーク オブジェクトの使用

一般的なフレームワーク オブジェクトは、他のすべての種類のフレームワーク オブジェクトの派生元となるフレームワーク オブジェクトです。

他のフレームワーク オブジェクトと同様に、一般的なオブジェクトは、「フレームワーク オブジェクトの概要」で 説明されているように、参照カウント、コンテキスト空間、削除コールバック関数、および親オブジェクトをサポートします。

ドライバーは、一般的なフレームワーク オブジェクトを作成して使用できます。 ドライバーが WdfObjectCreate を呼び出して一般的なオブジェクトを作成する場合、ドライバーは次のことができます。

  • 一般的なオブジェクトごとに 1 つ以上のコンテキストスペースを作成します。

    オブジェクト コンテキスト空間を使用して、汎用オブジェクトに関連付けるシステム リソースに関する情報を格納できます。

    コンテキスト領域の詳細については、Framework Object Context Spaceをご参照ください。

  • 一般オブジェクトに親を割り当てます。

    親オブジェクトが削除されると、一般オブジェクトが削除されます。 たとえば、ドライバーがフレームワーク デバイス オブジェクトをその一般的なオブジェクトの親オブジェクトとして指定する場合、フレームワークは、デバイス オブジェクトを削除するときに、一般オブジェクトを削除します。

    ドライバーは、オブジェクトの WDF_OBJECT_ATTRIBUTES構造の ParentObjectメンバーを設定して、オブジェクトの親オブジェクトを指定します。

  • 削除コールバック関数を提供します。

    ドライバーは、EvtCleanupCallback および EvtDestroyCallback 関数を提供できます。この関数は、ドライバーが一般的なオブジェクトを作成したときに割り当てられたシステム リソースの割り当てを解除できます。 たとえば、一般的なオブジェクトの作成時に ExAllocatePool というドライバーが呼び出された場合、cleanup または destroy コールバック関数は ExFreePool を呼び出すことができます。

一般的なオブジェクトを使用すると、ドライバーによって割り当てられたリソースを管理するのに便利な方法です。 たとえば、上位レベルのドライバーでは、ドライバーが複数のデバイスに要求を送信する場合や、要求を複数の小さいデバイスに分割する場合、受信した I/O 要求を処理するために複数のメモリ割り当てが必要な場合があります。 ドライバーは、受信した I/O 要求の子である 1 つ以上の一般的なオブジェクトを作成でき、一般的なオブジェクトのコンテキスト空間にメモリ割り当てに関する情報を格納できます。