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 が呼び出されるまで、このディスパッチ テーブルのメモリを解放できません。
KsAllocateObjectHeader は 、KSOBJECT_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リストに割り当てられたメモリを解放することはできません。 これを行わないと、バグチェック状態になる可能性があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | ks.h (Ks.h を含む) |
Library | Ks.lib |
IRQL | < DISPATCH_LEVEL |