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 之前,无法释放此调度表的内存。

KsAllocateObjectHeaderKSOBJECT_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

另请参阅

KSOBJECT_CREATE_ITEM

KsFreeDeviceHeader

KsFreeObjectHeader