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) |
库 | Ks.lib |
IRQL | < DISPATCH_LEVEL |