KsAllocateObjectHeader 函数 (ks.h)
KsAllocateObjectHeader 函数初始化所需的文件上下文标头。
语法
KSDDKAPI NTSTATUS KsAllocateObjectHeader(
[out] KSOBJECT_HEADER *Header,
[in] ULONG ItemsCount,
[in, optional] PKSOBJECT_CREATE_ITEM ItemsList,
[in] PIRP Irp,
[in] const KSDISPATCH_TABLE *Table
);
参数
[out] Header
指向调用方分配的位置,如果成功,则返回指向初始化 KSOBJECT_HEADER 的指针。
[in] ItemsCount
指定要在分配标头后添加到对象标头 Items List 中的对象创建项的数目。 如果 ItemsList 为 NULL ,则此值应为零。
[in, optional] ItemsList
(可选)指定要添加到对象标头的一系列 KSOBJECT_CREATE_ITEM 结构的调用方分配缓冲区的指针。 如果没有对象创建项,则必须设置为 NULL。
[in] Irp
指向主要函数 IRP_MJ_CREATE的 IRP,其中包含完成对象标头创建所需的信息。
[in] Table
指向此文件对象的初始化调度表。
返回值
KsAllocateObjectHeader 函数返回 STATUS_SUCCESS 如果成功或 STATUS_INSUFFICIENT_RESOURCES 没有足够的资源来满足请求。
言论
在调用此例程之前,驱动程序必须为 KSDISPATCH_TABLE 分配系统驻留存储并初始化调度表。 在调用 KsFreeObjectHeader 之前,无法释放此调度表的内存。
KsAllocateObjectHeader 为 KSOBJECT_HEADER 结构分配内存,并返回指向标头 标头的指针。 驱动程序不得尝试释放内存本身,而是在完成需要此对象标头的所有作时调用 KsFreeObjectHeader。
如果给定设备存在子对象,则驱动程序必须在调用 KsAllocateObjectHeader之前,为每个子对象分配分页内存或非分页内存的缓冲区,以保存每个子对象的 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 |