次の方法で共有


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

こちらもご覧ください

KSOBJECT_CREATE_ITEM

KsFreeDeviceHeader

KsFreeObjectHeader