WDF_OBJECT_ATTRIBUTES構造体 (wdfobject.h)

[KMDF と UMDF に適用されます]

WDF_OBJECT_ATTRIBUTES構造体は、任意のフレームワーク オブジェクトに関連付けることができる属性を記述します。

構文

typedef struct _WDF_OBJECT_ATTRIBUTES {
  ULONG                          Size;
  PFN_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanupCallback;
  PFN_WDF_OBJECT_CONTEXT_DESTROY EvtDestroyCallback;
  WDF_EXECUTION_LEVEL            ExecutionLevel;
  WDF_SYNCHRONIZATION_SCOPE      SynchronizationScope;
  WDFOBJECT                      ParentObject;
  size_t                         ContextSizeOverride;
  PCWDF_OBJECT_CONTEXT_TYPE_INFO ContextTypeInfo;
} WDF_OBJECT_ATTRIBUTES, *PWDF_OBJECT_ATTRIBUTES;

メンバー

Size

この構造体のサイズ (バイト単位)。

EvtCleanupCallback

ドライバーの EvtCleanupCallback コールバック関数 ( NULL) へのポインター。

EvtDestroyCallback

ドライバーの EvtDestroyCallback コールバック関数 ( NULL) へのポインター。

ExecutionLevel

フレームワークがオブジェクトのイベント コールバック関数を呼び出す最大 IRQL を指定する WDF_EXECUTION_LEVEL型指定された値。 ドライバーが ExecutionLevel 値を指定できるフレームワーク オブジェクトの一覧については、 WDF_EXECUTION_LEVELを参照してください。

SynchronizationScope

フレームワークがオブジェクトのイベント コールバック関数の実行を同期する方法を指定する、 WDF_SYNCHRONIZATION_SCOPE型指定された値。 ドライバーが SynchronizationScope 値を指定できるフレームワーク オブジェクトの一覧については、 WDF_SYNCHRONIZATION_SCOPEを参照してください。

ParentObject

オブジェクトの親オブジェクトへのハンドル。オブジェクトにドライバー指定の親がない場合は NULL

ドライバー 指定の 親を許可するオブジェクトを示すテーブルについては、「Framework オブジェクトの概要」を参照してください。 表には、各オブジェクトの既定の親も示されています。

ContextSizeOverride

ゼロでない場合、この値は ContextTypeInfo メンバーが参照するWDF_OBJECT_CONTEXT_TYPE_INFO構造体の ContextSize メンバーをオーバーライドします。 この値は省略可能で、0 にすることができます。 値が 0 でない場合は、WDF_OBJECT_CONTEXT_TYPE_INFO構造体の ContextSize メンバーに指定された値より大きいサイズ (バイト単位) を指定する必要があります。 詳細については、「解説」を参照してください。

ContextTypeInfo

WDF_OBJECT_CONTEXT_TYPE_INFO構造体へのポインター。 WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE マクロは、このポインターを設定します。

解説

WDF_OBJECT_ATTRIBUTES構造体は、フレームワーク オブジェクトを作成するいくつかのメソッドへの入力引数として使用されます。

WDF_OBJECT_ATTRIBUTES構造体を初期化するには、ドライバーが WDF_OBJECT_ATTRIBUTES_INITを呼び出す必要があります。

さらに、オブジェクトに対してオブジェクト固有のコンテキスト情報を定義する場合は、 WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE マクロを使用する必要があります。

または、WDF_OBJECT_ATTRIBUTES_INITマクロと WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE マクロの代わりに、WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE マクロを使用することもできます。

これらのマクロの使用の詳細については、「 Framework オブジェクト コンテキスト空間」を参照してください。

可変長のオブジェクト コンテキスト空間を作成する場合は、WDF_OBJECT_ATTRIBUTESの ContextSizeOverride メンバーを使用します。 たとえば、次のように、配列を含むコンテキスト空間構造を定義できます。

typedef struct _MY_REQUEST_CONTEXT {
  ULONG  ByteCount;
  BYTE  Bytes[1];
} MY_REQUEST_CONTEXT, *PMY_REQUEST_CONTEXT;

WDF_DECLARE_CONTEXT_TYPE(MY_REQUEST_CONTEXT);

ドライバーは、コンテキスト空間構造を使用するオブジェクトを作成するときに、 ContextSizeOverride メンバーを使用して、個々のオブジェクトに必要なコンテキスト サイズを指定できます。 たとえば、ドライバーは、前の例から配列に必要なバイト数を計算し、 ContextSizeOverride を使用して余分なバイトを次のように指定します。

WDF_OBJECT_ATTRIBUTES MyRequestObjectAttributes;
PMY_REQUEST_CONTEXT pMyContext;

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &MyRequestObjectAttributes,
                                        MY_REQUEST_CONTEXT
                                        );
MyRequestObjectAttributes.ContextSizeOverride =
                          sizeof(MY_REQUEST_CONTEXT) + Num_Extra_Bytes - 1;

ドライバーは、カスタマイズされたコンテキスト サイズを持つオブジェクトを作成できます。

status = WdfRequestCreate(
                          &MyRequestObjectAttributes,
                          ioTarget,
                          &newRequest
                          );

フレームワーク オブジェクト階層のクリーンアップ規則の詳細については、「 Framework オブジェクトライフサイクル」を参照してください。

必要条件

   
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfobject.h (Wdf.h を含む)

関連項目

WDF_OBJECT_ATTRIBUTES_INIT

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE

WdfObjectAllocateContext