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


функция обратного вызова 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.

См. также раздел

IO_WORKITEM

IoInitializeWorkItem

IoQueueWorkItemEx

IoTryQueueWorkItem