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 |
関連項目
KsFreeObjectHeader を する