Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
NDIS вызывает функцию MiniportInterrupt , когда сетевой адаптер или другое устройство, которое использует прерывание с сетевой картой, создает прерывание.
Синтаксис
MINIPORT_ISR MiniportIsr;
BOOLEAN MiniportIsr(
[in] NDIS_HANDLE MiniportInterruptContext,
[out] PBOOLEAN QueueDefaultInterruptDpc,
[out] PULONG TargetProcessors
)
{...}
Параметры
[in] MiniportInterruptContext
Дескриптор для блока сведений о контексте прерывания. Драйвер минипорта предоставил этот дескриптор в параметре MiniportInterruptContext , переданном драйверу минипорта. Функция NdisMRegisterInterruptEx.
[out] QueueDefaultInterruptDpc
Указатель на переменную BOOLEAN, которую задает минипорт-драйвер, прежде чем он возвращается из этого вызова. Мини-драйвер задает это значение TRUE , чтобы указать, что драйверу требуется DPC на ЦП по умолчанию (текущий). Если для этого значения задано значение TRUE, NDIS игнорирует значение параметра TargetProcessors . Если для него задано значение FALSE, NDIS использует значение параметра TargetProcessors для планирования ЦП. Если QueueDefaultInterruptDpc имеет значение TRUE, NDIS запланирует DPC независимо от возвращаемого значения из MiniportInterrupt.
[out] TargetProcessors
Битовая маска, указывающая целевые процессоры, для которых NDIS должен запланировать DPC. Эта битовая маска представляет первые 32 процессора в группе процессоров 0. Каждый бит в битовой маске определяет ЦП. Если вызывающий объект задает бит 0, NDIS планирует DPC для ЦП 0. Если вызывающий объект задает бит 1, NDIS планирует DPC для ЦП 1 и т. д. Если для QueueDefaultInterruptDpc задано значение FALSE , а targetProcessors равно нулю, NDIS не запланирует какие-либо ЦП. В противном случае NDIS запланирует DPCs независимо от возвращаемого значения из MiniportInterrupt.
Возвращаемое значение
MiniportInterrupt возвращает одно из следующих значений:
| Код возврата | Description |
|---|---|
|
MiniportInterrupt определил, что базовый сетевой адаптер создал прерывание. |
|
MiniportInterrupt определил, что базовый сетевой адаптер не создавал прерывание. |
Замечания
Драйверы минипорта, которые регистрируют прерывание с помощью функции NdisMRegisterInterruptEx , должны предоставлять функцию MiniportInterrupt .
Минипорт-драйвер должен выполнять как можно меньше работы в функции MiniportInterrupt . Он должен отложить операции ввода-вывода для прерываний, создаваемых сетевым адаптером функции MiniportInterruptDPC .
Если прерывание происходит в строке прерывания сетевого адаптера, NDIS вызывает функцию MiniportInterrupt драйвера минипорта .
Все сетевые адаптеры могут совместно использовать прерывания на основе строк с другими устройствами на шине ввода-вывода. Если сетевой адаптер не создал прерывание, MiniportInterrupt должен немедленно вернуть значение FALSE , чтобы система может вызвать драйвер устройства, создающего прерывание. Если параметр QueueDefaultInterruptDpc имеет значение FALSE , а параметр TargetProcessors имеет значение нулю, NDIS не запланирует какие-либо ЦП. В противном случае NDIS запланирует DPCs независимо от значения переключенияMiniportInterruptиз MiniportInterrupt.
Если прерывание предназначено для сетевой карты, MiniportInterrupt закрывает прерывание сетевого адаптера, сохраняет любое состояние, которое должно быть связано с прерыванием, и откладывает столько обработки ввода-вывода, сколько возможно для функции MiniportInterruptDPC .
Если базовый сетевой адаптер создал указанное прерывание и драйвер минипорта запрашивает отложенные вызовы процедур (DPCs), драйвер минипорта должен отключить все дальнейшие прерывания из сетевого адаптера и повторно создать прерывания после завершения всех ЦП.
Мини-драйвер должен задать значение QueueDefaultInterruptDpcзначение TRUE , чтобы запланировать DPC только для ЦП по умолчанию. Драйвер может сделать это, например, если:
- Сетевой адаптер создал прерывание, чтобы сигнализировать о завершении операции отправки или любом другом запросе, который не выполняется на других ЦП.
- Сетевой адаптер создал прерывание для сигнала о полученных данных, а драйвер минипорта не может обрабатывать полученные пакеты в отдельных ЦП.
- Прерывание указывает, что полученные пакеты и драйвер минипорта может обрабатывать полученные пакеты в отдельных ЦП, но масштабирование на стороне получения (RSS) не включено для мини-драйвера. Дополнительные сведения см. в разделе OID_GEN_RECEIVE_SCALE_CAPABILITIES и OID_GEN_RECEIVE_SCALE_PARAMETERS.
Минипорт-драйвер может вызвать Функция NdisMDeregisterInterruptEx из функции MiniportInitializeEx или MiniportHaltEx для освобождения ресурсов, выделенных с помощью NdisMRegisterInterruptEx. После возврата NdisMDeregisterInterruptEx NDIS не вызывает функцию MiniportInterrupt или MiniportInterruptDPC драйвера минипорта или MiniportInterruptDPC .
NDIS вызывает MiniportInterrupt на DIRQL прерывания, зарегистрированного в предыдущем вызове NdisMRegisterInterruptEx. Таким образом, MiniportInterrupt должен вызывать подмножество функций NDIS, таких как функции NdisRawXxx или NdisRead/WriteRegister Xxx, которые безопасно вызывать на любой IRQL.
Примеры
Чтобы определить функцию MiniportInterrupt , необходимо сначала указать объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средства проверки статических драйверов (SDV) и других средств проверки найти ошибки, и это требование для написания драйверов для операционной системы Windows.Например, чтобы определить функцию MiniportInterrupt с именем MyInterrupt , используйте тип MINIPORT_ISR , как показано в этом примере кода:
MINIPORT_ISR MyInterrupt;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
BOOLEAN
MyInterrupt(
NDIS_HANDLE MiniportInterruptContext,
PBOOLEAN QueueDefaultInterruptDpc,
PULONG TargetProcessors
)
{...}
Тип функции MINIPORT_ISR определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции заметку Use_decl_annotations . Заметка Use_decl_annotations гарантирует, что используются заметки, применяемые к типу функции MINIPORT_ISR в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе "Объявление функций с помощью типов ролей функций для драйверов NDIS".
Сведения о Use_decl_annotations см. в разделе " Поведение функции аннотирования".
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Поддерживается в NDIS 6.0 и более поздних версиях. |
| целевая платформа | Windows |
| Header | ndis.h (include Ndis.h) |
| IRQL | См. раздел "Примечания" |