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
指向要传递给 例程 参数中指定的回调例程的调用方提供的上下文信息的指针。
返回值
没有
言论
ExInitializeWorkItem 使用指定的回调例程和上下文指针初始化工作项,NULL 列表指针。
若要将工作项添加到系统工作队列,请调用 ExQueueWorkItem。
工作项是有限的资源,驱动程序应仅根据需要分配它们。 例如,不要在 DriverEntry 中分配工作项,以便为驱动程序的专用用途。
ExInitializeWorkItem 和 ExQueueWorkItem 只能在指定的工作项未与任何设备对象或设备堆栈关联的情况下使用。 在所有其他情况下,驱动程序应使用 IoAllocateWorkItem、IoFreeWorkItem,IoQueueWorkItem,因为只有这些例程可确保与指定工作项关联的设备对象在处理工作项之前保持可用。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | wdm.h (包括 FltKernel.h、Ntifs.h、Ntddk.h、Wdm.h) |
IRQL | 任何级别 |