ExInitializeWorkItem 函数 (wdm.h)
ExInitializeWorkItem 使用调用方提供的上下文和回调例程初始化工作队列项,以便在系统工作线程获得控制权时排队执行。
警告
请极其谨慎地使用此例程。 请参阅下面的 “备注 ”部分。
语法
void ExInitializeWorkItem(
[in] PWORK_QUEUE_ITEM Item,
[in] PWORKER_THREAD_ROUTINE Routine,
[in] PVOID Context
);
参数
[in] Item
指向要初始化的调用方分配WORK_QUEUE_ITEM结构的指针。 必须从非分页池中分配此结构。 当不再需要 ExFreePool 或 ExFreePoolWithTag 时,例程参数中指定的回调例程负责释放此工作项。
[in] Routine
指向调用方定义的例程的指针,该例程将调用该例程来处理工作项。 将在 IRQL PASSIVE_LEVEL 的系统线程上下文中调用此例程。 此例程声明如下:
VOID
(*PWORKER_THREAD_ROUTINE)(
IN PVOID Parameter
);
参数
在 Context 参数中传递的 上下文 信息指针。
[in] Context
指向调用方提供的要传递给 Routine 参数中指定的回调例 程 的上下文信息的指针。
返回值
无
备注
ExInitializeWorkItem 使用指定的回调例程和上下文指针以及 NULL 列表指针初始化工作项。
若要将工作项添加到系统工作队列,请调用 ExQueueWorkItem。
工作项是有限的资源,驱动程序应仅根据需要分配工作项。 例如,不要在 DriverEntry 中为驱动程序的专用用途分配工作项。
ExInitializeWorkItem 和 ExQueueWorkItem 只能在指定的工作项未与任何设备对象或设备堆栈关联的情况下使用。 在所有其他情况下,驱动程序应使用 IoAllocateWorkItem、 IoFreeWorkItem 和 IoQueueWorkItem,因为只有这些例程可确保与指定工作项关联的设备对象在处理工作项之前保持可用。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | wdm.h (包括 FltKernel.h、Ntifs.h、Ntddk.h、Wdm.h) |
IRQL | 任何级别 |