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


функция обратного вызова MINIPORT_INTERRUPT_DPC (ndis.h)

Драйвер мини-порта должен предоставить функцию MiniportInterruptDPC , если драйвер вызывает функцию NdisMRegisterInterruptEx для регистрации прерывания.

Примечание Функцию необходимо объявить с помощью типа MINIPORT_INTERRUPT_DPC . Дополнительные сведения см. в следующем разделе Примеры.
 

Синтаксис

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

См. также раздел

MiniportHaltEx

MiniportInitializeEx

MiniportInterrupt

NDIS_RECEIVE_THROTTLE_PARAMETERS NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

Receive Side Scaling (RSS)