Функция ExInitializeWorkItem (wdm.h)
ExInitializeWorkItem инициализирует элемент рабочей очереди с предоставленным вызывающим объектом контекстом и подпрограммой обратного вызова, которые будут помещены в очередь для выполнения, когда системный рабочий поток получает управление.
Предупреждение
Используйте эту процедуру с особой осторожностью. См. раздел Примечания ниже.
Синтаксис
void ExInitializeWorkItem(
[in] PWORK_QUEUE_ITEM Item,
[in] PWORKER_THREAD_ROUTINE Routine,
[in] PVOID Context
);
Параметры
[in] Item
Указатель на инициализизуемую структуру WORK_QUEUE_ITEM, выделенную вызывающим объектом. Эта структура должна быть выделена из непагрегированного пула. Подпрограмма обратного вызова, указанная в параметре Routine, отвечает за освобождение этого рабочего элемента, когда он больше не нужен путем вызова ExFreePool или ExFreePoolWithTag.
[in] Routine
Указатель на определяемую вызывающим элементом подпрограмму, которая будет вызываться для обработки рабочего элемента. Эта подпрограмма будет вызываться в контексте системного потока на PASSIVE_LEVEL IRQL. Эта подпрограмма объявляется следующим образом:
VOID
(*PWORKER_THREAD_ROUTINE)(
IN PVOID Parameter
);
Параметр
Указатель сведений о контексте, переданный в параметре Context .
[in] Context
Указатель на предоставленные вызывающим объектом сведения о контексте для передачи в подпрограмму обратного вызова, указанную в параметре Routine .
Возвращаемое значение
None
Remarks
ExInitializeWorkItem инициализирует рабочий элемент с указанной подпрограммой обратного вызова, указателем контекста и указателями списка NULL .
Чтобы добавить рабочий элемент в системную рабочую очередь, вызовите ExQueueWorkItem.
Рабочие элементы являются ограниченным ресурсом, и драйверы должны выделять их только по мере необходимости. Например, не выделяйте рабочий элемент в DriverEntry для выделенного использования драйвера.
ExInitializeWorkItem и ExQueueWorkItem можно использовать только в тех случаях, когда указанный рабочий элемент не связан с каким-либо объектом устройства или стеком устройств. Во всех остальных случаях драйверы должны использовать IoAllocateWorkItem, IoFreeWorkItem и IoQueueWorkItem, так как только эти подпрограммы гарантируют, что объект устройства, связанный с указанным рабочим элементом, остается доступным до обработки рабочего элемента.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | wdm.h (включает FltKernel.h, Ntifs.h, Ntddk.h, Wdm.h) |
IRQL | Любой уровень |