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

Примечание NDIS 5. X является нерекомендуемым и заменен NDIS 6. x. Сведения о разработке новых драйверов NDIS см. в статье Сетевые драйверы, начиная с Windows Vista. Сведения о переносе NDIS 5. x драйверы для NDIS 6. x, см. раздел Перенос драйверов NDIS 5.x в NDIS 6.0.

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

Синтаксис

NDIS_STATUS NdisScheduleWorkItem(
  [in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);

Параметры

[in] WorkItem

Указатель на рабочий элемент, настроенный предыдущим вызовом NdisInitializeWorkItem.

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

NdisScheduleWorkItem всегда выполняется успешно и поэтому всегда возвращает NDIS_STATUS_SUCCESS.

Комментарии

Вызов NdisScheduleWorkItem позволяет драйверу NDIS отложить определенную драйвером операцию, которая может или должна быть выполнена на более низком уровне IRQL, чем вызванный IRQL, на котором он в настоящее время выполняется, для функции обратного вызова рабочего потока.

Обратный вызов драйвера выполняется в контексте системного потока в IRQL = PASSIVE_LEVEL позже. Эта функция, предоставляемая вызывающим объектом, отвечает за освобождение хранилища, выделенного драйвером для WorkItem. Например, если драйвер с именем NdisAllocateMemoryWithTag предоставляет область контекста для NdisInitializeWorkItem, его функция обратного вызова должна выполнить обратный вызов NdisFreeMemory с WorkItem , прежде чем она вернет управление.

Драйвер не должен ждать завершения процедуры обратного вызова, если он уже содержит один объект синхронизации и может попытаться получить другой. Например, драйвер NDIS должен освободить все удерживаемые в данный момент блокировки спина и т. д. перед вызовом NdisScheduleWorkItem. Драйвер протокола NDIS самого высокого уровня также должен освободить все имеющиеся в настоящее время семафоры, мьютексы, переменные ресурсов и т. д. перед вызовом NdisScheduleWorkItem. Освобождение всех ресурсов синхронизации перед постановкой в очередь синхронной операции рабочего потока предотвращает взаимоблокировки.

Сериализованный драйвер мини-порта никогда не должен пытаться ставить в очередь подпрограмму обратного вызова рабочего потока, так как такой драйвер не может синхронизировать доступ к областям контекста сетевой карты с обратным вызовом рабочего потока. Следовательно, такой сериализованный драйвер NDIS не может совместно использовать что-либо в области контекста адаптера с функцией обратного вызова рабочего потока, не вызывая периодические сбои системы.

  • Целевая платформа: универсальная
  • Версия: не поддерживается для драйверов NDIS 6.0 в Windows Vista. Вместо этого используйте NdisQueueIoWorkItem. Поддерживается для драйверов NDIS 5.1 в Windows Vista и Windows XP.

Требования

Требование Значение
Заголовок ndis.h (включая Ndis.h)
IRQL IRQL <= DISPATCH_LEVEL

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