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

Драйвер мини-порта должен предоставить обработчик MiniportSynchronizeInterrupt , если какая-либо функция драйвера, работающая менее чем DIRQL, совместно использует ресурсы с функцией MiniportInterrupt .

Для прерываний, сигнализированных сообщением, драйвер мини-порта предоставляет обработчик MiniportSynchronizeMessageInterrupt , если какая-либо функция драйвера, которая выполняется менее чем DIRQL, использует ресурсы для прерывания с сигналом сообщения с помощью функции MiniportMessageInterrupt .

Примечание Эту функцию необходимо объявить с помощью типа MINIPORT_SYNCHRONIZE_INTERRUPT для прерываний, не сигнальных от сообщений, или с помощью типа MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT для прерываний, сигнальных сообщением. Дополнительные сведения см. в следующем разделе Примеры.
 

Синтаксис

MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;

BOOLEAN MiniportSynchronizeInterrupt(
  [in] NDIS_HANDLE SynchronizeContext
)
{...}

Параметры

[in] SynchronizeContext

Дескриптор области контекста, который предоставляется, когда драйвер miniportXxx или внутренняя функция называетсяФункция NdisMSynchronizeWithInterruptEx.

Возвращаемое значение

MiniportSynchronizeInterrupt возвращает логическое значение со значением, определенным драйвером. NDIS возвращает то же значение, когда NDIS возвращает из NdisMSynchronizeWithInterruptEx.

Комментарии

Примечание Сведения в этом разделе также могут применяться к прерываниям с сигналом сообщения, заменив "MiniportInterrupt" на "MiniportMessageInterrupt" и заменив "MiniportSynchronizeInterrupt" на "MiniportSynchronizeMessageInterrupt".
 
Если какая-либо функция драйвера мини-порта, которая работает на уровне меньше, чем DIRQL, использует ресурсы, например регистры сетевого адаптера, с функцией MiniportInterrupt драйвера, этот драйвер не может получить доступ к этим ресурсам напрямую. Если такая функция с более низким приоритетом пытается получить доступ к общим ресурсам напрямую, она может быть вытеснена MiniportInterrupt, которая может переопределить изменения состояния функции драйвера с более низким приоритетом.

Чтобы синхронизировать доступ к общим ресурсам с 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 См. раздел "Примечания"

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

MiniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx