Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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 | Любой уровень |