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


Функция 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 (include Ndis.h)
IRQL IRQL <= DISPATCH_LEVEL

См. также