KeInsertQueue 函数 (ntifs.h)

如果 KeInsertQueue 例程在给定队列的结尾处插入一个条目(如果无法立即使用该条目来满足线程等待)。

语法

LONG KeInsertQueue(
  [in, out] PRKQUEUE    Queue,
  [in, out] PLIST_ENTRY Entry
);

参数

[in, out] Queue

指向调用方在非分页池中提供常驻存储的初始化队列对象的指针。

[in, out] Entry

指向要排队的条目的指针。 此指针必须是常驻系统空间地址。

返回值

KeInsertQueue 返回给定 队列以前的信号状态。 如果在调用 keInsertQueue 之前将其设置为零(即未发出信号),则 KeInsertQueue 返回零,这意味着没有排队条目。 如果为非零(信号),KeInsertQueue 返回在调用 keInsertQueue 之前排队的条目数。

言论

必须从非分页池中分配由 KeInsertQueue 排队的条目。 例如,可以使用 ExAllocatePoolWithTag分配调用方定义的条目的内存。 如果调用方分配大小固定的条目, 使用 ExInitializeNPagedLookasideList 创建 lookaside 列表,并使用 ExAllocateFromNPagedLookasideList 从中分配它比频繁调用 ExAllocatePoolWithTag更有效,尤其是对于其大小不是PAGE_SIZE倍数的条目。

如果在调用 KeInsertQueue 时,任何线程都在等待队列对象,则此调用会满足单个线程的等待。 使用给定的 条目 指针调度线程来执行。

如果在调用 KeInsertQueue 时当前没有等待队列对象,则会在队列中插入给定条目,并且队列对象的信号状态会递增。

有关使用驱动程序管理的内部队列的详细信息,请参阅 Driver-Managed 队列

要求

要求 价值
目标平台 普遍
标头 ntifs.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDIS(storport)

另请参阅

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertHeadQueue

KeRemoveQueue