次の方法で共有


KsAllocateObjectHeader 関数 (ks.h)

KsAllocateObjectHeader 関数は、必要なファイル コンテキスト ヘッダーを初期化します。

構文

KSDDKAPI NTSTATUS KsAllocateObjectHeader(
  [out]          KSOBJECT_HEADER        *Header,
  [in]           ULONG                  ItemsCount,
  [in, optional] PKSOBJECT_CREATE_ITEM  ItemsList,
  [in]           PIRP                   Irp,
  [in]           const KSDISPATCH_TABLE *Table
);

パラメーター

[out] Header

正常に完了した場合に初期化された KSOBJECT_HEADER へのポインターを返す呼び出し元によって割り当てられた場所を指します。

[in] ItemsCount

ヘッダーの割り当て後にオブジェクト ヘッダーに追加する ItemsList 内のオブジェクト作成アイテムの数を指定します。 ItemsList NULL 場合、この値は 0 にする必要があります。

[in, optional] ItemsList

必要に応じて、オブジェクト ヘッダーに追加する一連の KSOBJECT_CREATE_ITEM 構造体を含む呼び出し元によって割り当てられたバッファーへのポインターを指定します。 オブジェクト作成項目がない場合は、NULL に設定する必要があります。

[in] Irp

オブジェクト ヘッダーの作成を完了するために必要な情報を含む、主要な関数 IRP_MJ_CREATEの IRP を指します。

[in] Table

このファイル オブジェクトの初期化されたディスパッチ テーブルを指します。

戻り値

KsAllocateObjectHeader 関数は、成功した場合は STATUS_SUCCESS を返し、要求を満たすのに十分なリソースがない場合は STATUS_INSUFFICIENT_RESOURCES を返します。

備考

このルーチンを呼び出す前に、ドライバーは、KSDISPATCH_TABLE のシステム常駐記憶域を割り当て、ディスパッチ テーブルを初期化する必要があります。 このディスパッチ テーブルのメモリは、KsFreeObjectHeader が呼び出されるまで解放できません。

KsAllocateObjectHeaderKSOBJECT_HEADER 構造体のメモリを割り当て、ヘッダー にあるヘッダーへのポインター返します。 ドライバーは、メモリ自体を解放しようとするのではなく、このオブジェクト ヘッダーを必要とするすべての操作が完了したときに KsFreeObjectHeader 呼び出す必要があります。

特定のデバイスに対してサブオブジェクトが存在する場合、ドライバーは、KsAllocateObjectHeader 呼び出す前に、各サブオブジェクトの KSOBJECT_CREATE_ITEM 構造体を保持するのに十分なサイズのページ メモリまたは非ページ メモリのバッファーを割り当てる必要があります。 例えば:

/* Allocate a buffer for 4 subobjects for a given streaming device */
PKSOBJECT_CREATE_ITEM createBuffer ;
ULONG bufferSize  = (sizeof (KSOBJECT_CREATE_ITEM)) * 4 ;

createBuffer = (PKSOBJECT_CREATE_ITEM)
               ExAllocatePoolWithTag (PagedPool, bufferSize) ;

ドライバーは、KsFreeDeviceHeader を呼び出すまで、サブオブジェクト KSOBJECT_CREATE_ITEM リストに割り当てられたメモリ解放しないでください。 これを行わないと、バグ チェック条件が発生する可能性があります。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー ks.h (Ks.h を含む)
ライブラリ Ks.lib
IRQL < DISPATCH_LEVEL

関連項目

KSOBJECT_CREATE_ITEM

KsFreeDeviceHeader

KsFreeObjectHeader する