Поделиться через


Функция 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 или ExFreePoolWithWithTag.

[in] Routine

Указатель на определяемую вызывающей процедурой, которая будет вызываться для обработки рабочего элемента. Эта подпрограмма будет вызываться в контексте системного потока в IRQL PASSIVE_LEVEL. Эта подпрограмма объявлена следующим образом:

VOID
(*PWORKER_THREAD_ROUTINE)(
    IN PVOID Parameter
    );

Параметр

Указатель сведений о контексте, переданный в параметре контекста.

[in] Context

Указатель на сведения о контексте, предоставленные вызывающим абонентом, которые передаются в подпрограмму обратного вызова, указанную в параметре подпрограммы.

Возвращаемое значение

Никакой

Замечания

ExInitializeWorkItem инициализирует рабочий элемент с указанными подпрограммами обратного вызова и указателями контекста и указателями списка null.

Чтобы добавить рабочий элемент в системную рабочую очередь, вызовите ExQueueWorkItem.

Рабочие элементы — это ограниченный ресурс, и драйверы должны выделять их только по мере необходимости. Например, не выделяет рабочий элемент в DriverEntry для выделенного использования драйвера.

ExInitializeWorkItem и ExQueueWorkItem можно использовать только в тех случаях, когда указанный рабочий элемент не связан с объектом устройства или стеком устройств. Во всех других случаях драйверы должны использовать IoAllocateWorkItem, IoFreeWorkItemи IoQueueWorkItem, так как только эти подпрограммы гарантируют, что объект устройства, связанный с указанным рабочим элементом, остается доступным до тех пор, пока рабочий элемент не будет обработан.

Требования

Требование Ценность
целевая платформа Настольный
заголовка wdm.h (include FltKernel.h, Ntifs.h, Ntddk.h, Wdm.h)
IRQL Любой уровень

См. также

ExFreePool

ExFreePoolWithTag

ExQueueWorkItem

IoAllocateWorkItem

IoFreeWorkItem

IoQueueWorkItem

WORK_QUEUE_ITEM