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構造体を指します。 サブ項目がない場合、この値は NULL 、 ItemsCount は 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 |