ExInitializeWorkItem 函数 (wdm.h)

ExInitializeWorkItem 使用调用方提供的上下文和回调例程初始化工作队列项,以便在系统工作线程获得控制权时排队执行。

警告

请谨慎使用此例程。 请参阅下面的 备注 部分。

语法

void ExInitializeWorkItem(
  [in] PWORK_QUEUE_ITEM       Item,
  [in] PWORKER_THREAD_ROUTINE Routine,
  [in] PVOID                  Context
);

参数

[in] Item

指向要初始化的调用方分配WORK_QUEUE_ITEM结构的指针。 必须从非分页池分配此结构。 例程 参数中指定的回调例程负责在调用 exFreePoolExFreePoolWithTag不再需要此工作项时释放此工作项。

[in] Routine

指向将调用以处理工作项的调用方定义的例程的指针。 此例程将在 IRQL PASSIVE_LEVEL 的系统线程上下文中调用。 此例程声明如下:

VOID
(*PWORKER_THREAD_ROUTINE)(
    IN PVOID Parameter
    );

参数

Context 参数中传递的上下文信息指针。

[in] Context

指向要传递给 例程 参数中指定的回调例程的调用方提供的上下文信息的指针。

返回值

没有

言论

ExInitializeWorkItem 使用指定的回调例程和上下文指针初始化工作项,NULL 列表指针。

若要将工作项添加到系统工作队列,请调用 ExQueueWorkItem

工作项是有限的资源,驱动程序应仅根据需要分配它们。 例如,不要在 DriverEntry 中分配工作项,以便为驱动程序的专用用途。

ExInitializeWorkItemExQueueWorkItem 只能在指定的工作项未与任何设备对象或设备堆栈关联的情况下使用。 在所有其他情况下,驱动程序应使用 IoAllocateWorkItemIoFreeWorkItemIoQueueWorkItem,因为只有这些例程可确保与指定工作项关联的设备对象在处理工作项之前保持可用。

要求

要求 价值
目标平台 桌面
标头 wdm.h (包括 FltKernel.h、Ntifs.h、Ntddk.h、Wdm.h)
IRQL 任何级别

另请参阅

ExFreePool

ExFreePoolWithTag

ExQueueWorkItem

IoAllocateWorkItem

IoFreeWorkItem

IoQueueWorkItem

WORK_QUEUE_ITEM