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 ,则此值应为零。

[in, optional] ItemsList

可选。 指向每个子项的KSOBJECT_CREATE_ITEM结构。 如果没有子项,此值应为 NULL,ItemsCount为零。

返回值

如果成功, 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列表分配的内存。 否则可能导致 bug 检查条件。

要求

要求
目标平台 通用
标头 ks.h (包括 Ks.h)
Library Ks.lib
IRQL < DISPATCH_LEVEL

另请参阅

KSOBJECT_CREATE_ITEM

KsFreeDeviceHeader