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