KsAllocateDeviceHeader 関数 (ks.h)

KsAllocateDeviceHeader 関数は、必要なデバイス拡張ヘッダーを割り当てて初期化します。

構文

KSDDKAPI NTSTATUS KsAllocateDeviceHeader(
  [out]          KSDEVICE_HEADER       *Header,
  [in]           ULONG                 ItemsCount,
  [in, optional] PKSOBJECT_CREATE_ITEM ItemsList
);

パラメーター

[out] Header

初期化されたヘッダーへのポインターを返す場所を指します。

[in] ItemsCount

ItemsList 内のサブアイテムの数を指定します。 ItemsList が渡されない場合、これは 0 にする必要があります。

[in, optional] ItemsList

省略可能。 各サブ項目のKSOBJECT_CREATE_ITEM構造体を指します。 サブ項目がない場合、この値は NULLItemsCount は 0 にする必要があります。

戻り値

KsAllocateDeviceHeader 関数は、成功した場合はSTATUS_SUCCESSを返し、必要なリソースを割り当てることができない場合はSTATUS_INSUFFICIENT_RESOURCESを返します。

注釈

KsAllocateDeviceHeader 関数は、デバイスのKSDEVICE_HEADER構造体にメモリを割り当てます。 ヘッダーが不要になったら、ドライバーは KsFreeDeviceHeader 関数を呼び出して、割り当てられたメモリを解放する必要があります。

特定のデバイスに対してサブオブジェクトが存在する場合、ドライバーは KsAllocateDeviceHeader を呼び出す前に、各サブオブジェクトの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