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


функция обратного вызова IO_WORKITEM_ROUTINE (wdm.h)

Подпрограмма WorkItem выполняет обработку рабочего элемента, помещенного в очередь подпрограммой IoQueueWorkItem.

Синтаксис

IO_WORKITEM_ROUTINE IoWorkitemRoutine;

void IoWorkitemRoutine(
  [in]           PDEVICE_OBJECT DeviceObject,
  [in, optional] PVOID Context
)
{...}

Параметры

[in] DeviceObject

Указатель на один из объектов устройства вызывающего объекта. Это указатель, который был передан в качестве параметра DeviceObject в IoAllocateWorkItem при выделении рабочего элемента или в качестве параметра IoObject в IoInitializeWorkItem при инициализации рабочего элемента.

[in, optional] Context

Указывает сведения о контексте для конкретного драйвера. Это значение, переданное в качестве параметра Contextв IoQueueWorkItem при постановке рабочего элемента в очередь.

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

None

Remarks

Драйвер помещает в очередь подпрограмму WorkItem , вызывая IoQueueWorkItem, а системный рабочий поток затем выполняет подпрограмму. Подпрограмма WorkItem должна выполняться в течение ограниченного количества времени; в противном случае система может взаимоблокировка. Дополнительные сведения см. в разделе Системные рабочие потоки.

Подпрограмма WorkItem выполняется в IRQL = PASSIVE_LEVEL и в контексте системного потока.

Примеры

Чтобы определить подпрограмму обратного вызова WorkItem , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить подпрограмму обратного вызова WorkItem с именем MyWorkItem, используйте тип IO_WORKITEM_ROUTINE, как показано в следующем примере кода:

IO_WORKITEM_ROUTINE MyWorkItem;

Затем реализуйте процедуру обратного вызова следующим образом:

_Use_decl_annotations_
VOID
  MyWorkItem(
    PDEVICE_OBJECT  DeviceObject,
    PVOID  Context 
    )
  {
      // Function body
  }

Тип функции IO_WORKITEM_ROUTINE определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку в _Use_decl_annotations_ определение функции. Заметка _Use_decl_annotations_ гарантирует, что будут использоваться заметки, которые применяются к типу функции IO_WORKITEM_ROUTINE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов WDM. Дополнительные сведения о _Use_decl_annotations_см. в статье Поведение функции с заметками.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
IRQL Звонил на PASSIVE_LEVEL.

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

IO_WORKITEM

IoQueueWorkItem