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 |