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