Функция NdisQueueIoWorkItem (ndis.h)

Драйверы NDIS вызывают функцию NdisQueueIoWorkItem для постановки рабочего элемента в очередь.

Синтаксис

void NdisQueueIoWorkItem(
  [in] NDIS_HANDLE              NdisIoWorkItemHandle,
  [in] NDIS_IO_WORKITEM_ROUTINE Routine,
  [in] PVOID                    WorkItemContext
);

Параметры

[in] NdisIoWorkItemHandle

Дескриптор частной структуры IO_WORKITEM , возвращенной предыдущим вызовомФункция NdisAllocateIoWorkItem.

[in] Routine

Точка входа в функцию, которую NDIS вызывает для обработки рабочего элемента. NDIS вызывает эту подпрограмму в контексте системного потока.

Примечание Функцию необходимо объявить с помощью типа NDIS_IO_WORKITEM_FUNCTION (а не NDIS_IO_WORKITEM_ROUTINE). Дополнительные сведения см. в следующем разделе Примеры.
 
Подпрограмма включает следующие входные параметры:

WorkItemContext

Указатель на область контекста, переданную драйвером в параметр WorkItemContextобъекта NdisQueueIoWorkItem.

NdisIoWorkItemHandle

Дескриптор частной структуры NDIS_IO_WORKITEM , возвращенной предыдущим вызовомФункция NdisAllocateIoWorkItem.

[in] WorkItemContext

Указатель на область контекста, предоставленную вызывающим абонентом, которая проходит через NDIS в процедуру обратного вызова. WorkItemContext может быть любыми данными, указанными вызывающим объектом, которые требуются драйверу для управления рабочим элементом.

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

None

Remarks

NdisQueueIoWorkItem вызывает IoQueueWorkItem для постановки рабочего элемента в очередь. Рабочие элементы NDIS используют тип очереди CriticalWorkQueue .

Подпрограмма обратного вызова ,предоставляемая вызывающим абонентом (NDIS_IO_WORKITEM_ROUTINE), выполняется в контексте системного потока по адресу IRQL = PASSIVE_LEVEL.

Эта подпрограмма, предоставляемая вызывающим объектом, может вызывать функцию NdisFreeIoWorkItem для освобождения хранилища, выделенного для рабочего элемента.

Примеры

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

Например, чтобы определить функцию Routine с именем MyWorkitemRoutine, используйте тип NDIS_IO_WORKITEM_FUNCTION , как показано в этом примере кода:

NDIS_IO_WORKITEM_FUNCTION MyWorkitemRoutine;

Затем реализуйте функцию следующим образом:

_Use_decl_annotations_
VOID
 MyWorkitemRoutine(
    PVOID   WorkItemContext,
    NDIS_HANDLE  NdisIoWorkItemHandle
    )
  {...}

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

Сведения о Use_decl_annotations см. в статье О поведении функции.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Целевая платформа Универсальное
Верхняя часть ndis.h (включая Ndis.h)
Библиотека Ndis.lib
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI Irql_Miscellaneous_Function(ndis)

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

IoQueueWorkItem

MiniportHaltEx

Рабочие элементы ввода-вывода NDIS

NdisAllocateIoWorkItem

NdisFreeIoWorkItem