функция обратного вызова MINIPORT_SYNCHRONIZE_INTERRUPT (ndis.h)
Драйвер мини-порта должен предоставить обработчик MiniportSynchronizeInterrupt , если какая-либо функция драйвера, работающая менее чем DIRQL, совместно использует ресурсы с функцией MiniportInterrupt .
Для прерываний, сигнализированных сообщением, драйвер мини-порта предоставляет обработчик MiniportSynchronizeMessageInterrupt , если какая-либо функция драйвера, которая выполняется менее чем DIRQL, использует ресурсы для прерывания с сигналом сообщения с помощью функции MiniportMessageInterrupt .
Синтаксис
MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;
BOOLEAN MiniportSynchronizeInterrupt(
[in] NDIS_HANDLE SynchronizeContext
)
{...}
Параметры
[in] SynchronizeContext
Дескриптор области контекста, который предоставляется, когда драйвер miniportXxx или внутренняя функция называетсяФункция NdisMSynchronizeWithInterruptEx.
Возвращаемое значение
MiniportSynchronizeInterrupt возвращает логическое значение со значением, определенным драйвером. NDIS возвращает то же значение, когда NDIS возвращает из NdisMSynchronizeWithInterruptEx.
Комментарии
Чтобы синхронизировать доступ к общим ресурсам с MiniportInterrupt, функции драйвера с более низким приоритетом должны вызыватьФункция NdisMSynchronizeWithInterruptEx. Функция MiniportSynchronizeInterrupt драйвера обращается к общим ресурсам в DIRQL. Вызов NdisMSynchronizeWithInterruptEx предотвращает условия гонки и взаимоблокировки в таком водителе мини-порта.
Все функции драйвера с более низким приоритетом, которые совместно используют ресурсы (но не с любой функцией, которая выполняется в DIRQL), должны использовать спиновую блокировку для защиты этих общих ресурсов.
MiniportSynchronizeInterrupt выполняется в DIRQL, назначенном, когда функция MiniportInitializeEx драйвера вызываетФункция NdisMRegisterInterruptEx. Как и любая функция драйвера, которая выполняется в DIRQL, MiniportSynchronizeInterrupt должна возвращать управление вызывающему объекту как можно быстрее и может вызывать только те функции NdisXxx , которые безопасны для вызова в любом IRQL.
Примеры
Чтобы определить функцию MiniportSynchronizeInterrupt , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.Например, чтобы определить функцию MiniportSynchronizeInterrupt с именем MySynchronizeInterrupt, используйте тип MINIPORT_SYNCHRONIZE_INTERRUPT , как показано в следующем примере кода:
MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
BOOLEAN
MySynchronizeInterrupt(
NDIS_HANDLE SynchronizeContext
)
{...}
Чтобы определить функцию MiniportSynchronizeMessageInterrupt для прерываний с сигналом сообщения, используйте тип MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT , как показано в следующем примере кода:
MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
BOOLEAN
MySynchronizeMessageInterrupt(
NDIS_HANDLE SynchronizeContext
)
{...}
Типы функций MINIPORT_SYNCHRONIZE_INTERRUPT и MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT определены в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определения функций. Заметка Use_decl_annotations гарантирует, что будут использоваться заметки, примененные к типу функции в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов NDIS.
Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Windows |
Header | ndis.h (включая Ndis.h) |
IRQL | См. раздел "Примечания" |