Функция 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 |