функция обратного вызова IO_WORKITEM_ROUTINE_EX (wdm.h)
Подпрограмма WorkItemEx выполняет обработку рабочего элемента, помещенного в очередь подпрограммой IoQueueWorkItemEx или IoTryQueueWorkItem.
Синтаксис
IO_WORKITEM_ROUTINE_EX IoWorkitemRoutineEx;
void IoWorkitemRoutineEx(
[in] PVOID IoObject,
[in, optional] PVOID Context,
[in] PIO_WORKITEM IoWorkItem
)
{...}
Параметры
[in] IoObject
Указатель на объект драйвера вызывающего объекта или на один из объектов устройства вызывающего объекта. Это указатель, который был передан в качестве параметра DeviceObject в IoAllocateWorkItem при выделении рабочего элемента или в качестве параметра IoObjectв IoInitializeWorkItem или IoTryQueueWorkItem при инициализации рабочего элемента.
[in, optional] Context
Указывает сведения о контексте для конкретного драйвера. Это значение, переданное в качестве параметра Contextв IoQueueWorkItemEx или IoTryQueueWorkItem при постановке рабочего элемента в очередь.
[in] IoWorkItem
Указатель на структуру IO_WORKITEM для рабочего элемента. Это указатель, который был передан в качестве параметра IoWorkItemв IoQueueWorkItemEx или IoTryQueueWorkItem.
Возвращаемое значение
None
Remarks
Драйверы могут реализовывать подпрограммы WorkItemEx только в Windows Vista и более поздних версиях Windows.
Драйвер помещает в очередь подпрограмму WorkItemEx , вызывая IoQueueWorkItemEx или IoTryQueueWorkItem, и системный рабочий поток впоследствии выполняет подпрограмму. Дополнительные сведения см. в разделе Системные рабочие потоки.
Подпрограмма WorkItemEx должна выполняться в течение ограниченного времени; в противном случае система может взаимоблокировка. Дополнительные сведения см. в разделе Системные рабочие потоки.
Подпрограмма WorkItemEx выполняется в IRQL = PASSIVE_LEVEL и в контексте системного потока.
Примеры
Чтобы определить подпрограмму обратного вызова WorkItemEx , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму обратного вызова WorkItemEx с именем MyWorkItemEx
, используйте тип IO_WORKITEM_ROUTINE_EX, как показано в следующем примере кода:
IO_WORKITEM_ROUTINE_EX MyWorkItemEx;
Затем реализуйте процедуру обратного вызова следующим образом:
_Use_decl_annotations_
VOID
MyWorkItemEx(
PVOID IoObject,
PVOID Context,
PIO_WORKITEM IoWorkItem
)
{
// Function body
}
Тип функции IO_WORKITEM_ROUTINE_EX определяется в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку в _Use_decl_annotations_
определение функции. Заметка _Use_decl_annotations_
гарантирует, что будут использоваться заметки, которые применяются к типу функции IO_WORKITEM_ROUTINE_EX в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов WDM. Дополнительные сведения о _Use_decl_annotations_
см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Звонил на PASSIVE_LEVEL. |