функция обратного вызова MINIPORT_INTERRUPT_DPC (ndis.h)
Драйвер мини-порта должен предоставить функцию MiniportInterruptDPC , если драйвер вызывает функцию NdisMRegisterInterruptEx для регистрации прерывания.
Синтаксис
MINIPORT_INTERRUPT_DPC MiniportInterruptDpc;
void MiniportInterruptDpc(
[in] NDIS_HANDLE MiniportInterruptContext,
[in] PVOID MiniportDpcContext,
[in] PVOID ReceiveThrottleParameters,
[in] PVOID NdisReserved2
)
{...}
Параметры
[in] MiniportInterruptContext
Дескриптор для блока сведений о контексте прерывания. Драйвер мини-порта предоставил этот дескриптор в параметре MiniportInterruptContext , который драйвер мини-порта передал вФункция NdisMRegisterInterruptEx.
[in] MiniportDpcContext
Указатель на контекстную область, которую драйвер мини-порта предоставил при вызове функции NdisMQueueDpcEx или NdisMQueueDpc . Если NDIS вызвал MiniportInterruptDPC , так как драйвер мини-порта вернул битовую маску в параметре TargetProcessors функции MiniportInterrupt , miniportDpcContext имеет значение NULL.
[in] ReceiveThrottleParameters
Указатель на структура NDIS_RECEIVE_THROTTLE_PARAMETERS . Эта структура задает максимальное число NET_BUFFER_LIST структур, которые драйвер мини-порта должен указать в DPC.
[in] NdisReserved2
Зарезервировано для NDIS.
Возвращаемое значение
None
Remarks
Драйверы мини-портов, которые регистрируют прерывание с помощью функции NdisMRegisterInterruptEx, должны предоставлять функцию MiniportInterruptDPC .
NDIS вызывает MiniportInterruptDPC для завершения отложенной обработки прерывания. Драйвер мини-порта может вызывать функцию NdisMQueueDpcEx или NdisMQueueDpc для запроса дополнительных отложенных вызовов процедур (DPCs) для других процессоров.
Драйверы минипорта определяют источник каждого прерывания и принимают соответствующие меры. Например, если прерывание указывает на завершение операции передачи, драйвер мини-порта завершает ожидающий отправки запрос. Если источником прерывания является изменение состояния связи, драйвер минипорта указывает новое состояние связи для NDIS. При наличии невыполненных пакетов получения драйвер минипорта указывает пакеты в NDIS.
Драйвер мини-порта, который поддерживает масштабирование на стороне получения (RSS) и имеет включенную функцию, проверяет свои очереди получения в MiniportInterruptDPC. Сетевой адаптер мог уже поместить в очередь полученные пакеты в отдельных очередях на основе хэш-значений, если сетевой адаптер предоставляет такие возможности. В противном случае драйвер мини-порта может сортировать пакеты по отдельным очередям в MiniportInterruptDPC.
MiniportInterruptDPC вызываетФункция NdisMIndicateReceiveNetBufferLists, указывающая пакеты на текущем процессоре. MiniportInterruptDPC может определить обработку, необходимую для других ЦП, и запросить NDIS для планирования DPC на ЦП, где DPC не является невыполненным.
Если текущий DPC работает на том же ЦП, что и функция MiniportInterrupt , драйвер мини-порта должен указать все пакеты, которые не удалось сопоставить с ЦП. Если этот DPC является последним запланированным DPC и он не будет запрашивать дополнительные DPC, MiniportInterruptDPC должен повторно включить прерывания на сетевом адаптере перед возвратом.
Прерывания обычно отключены уже на сетевом адаптере в функции MiniportInterrupt до вызова NDIS MiniportInterruptDPC. Перед возвратом элемента управления MiniportInterruptDPC может повторно вбивать прерывания. Если драйвер мини-порта помещал в очередь дополнительные DPC, пока прерывания были отключены, драйвер должен включить прерывания до последнего возврата DPC.
Драйверы минипорта должны ограничивать количество буферов получения, которые они указывают при обработке пакета DPC прерывания , чтобы завершить в течение требуемого ограничения времени. Пакет DPC прерываний — это коллекция всех DPC, которые выполняются после ISR и перед повторной записью прерываний.
Драйвер мини-порта может вызватьФункция NdisMDeregisterInterruptEx из функции MiniportInitializeEx или MiniportHaltEx освобождает ресурсы, выделенные с помощью NdisMRegisterInterruptEx. После возврата NdisMDeregisterInterruptEx NDIS не вызывает функцию MiniportInterrupt или MiniportInterruptDPC драйвера мини-порта .
NDIS вызывает MiniportInterruptDPC по адресу IRQL = DISPATCH_LEVEL.
Примеры
Чтобы определить функцию MiniportInterruptDPC , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.Например, чтобы определить функцию MiniportInterruptDPC с именем MyInterruptDPC, используйте тип MINIPORT_INTERRUPT_DPC , как показано в следующем примере кода:
MINIPORT_INTERRUPT_DPC MyInterruptDPC;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
VOID
MyInterruptDPC(
NDIS_HANDLE MiniportInterruptContext,
PVOID MiniportDpcContext,
PVOID ReceiveThrottleParameters,
PVOID NdisReserved2
)
{...}
Тип функции MINIPORT_INTERRUPT_DPC определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции MINIPORT_INTERRUPT_DPC в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов NDIS.
Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Windows |
Header | ndis.h (включая Ndis.h) |
IRQL | DISPATCH_LEVEL |