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


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

Подпрограмма HwMSInterruptRoutine обрабатывает прерывание с сигналом сообщения (MSI).

Синтаксис

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE HwMessageSignaledInterruptRoutine;

BOOLEAN HwMessageSignaledInterruptRoutine(
  IN PVOID HwDeviceExtension,
  IN ULONG MessageId
)
{...}

Параметры

HwDeviceExtension

Указатель на расширение аппаратного устройства для адаптера шины узла (HBA).

MessageId

Идентификатор сообщения.

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

HwMSInterruptRoutine возвращает значение TRUE , если определяет, что HBA создал MSI. Если HBA не сгенерирует MSI, HwMSInterruptRoutine возвращает значение FALSE.

Комментарии

Подпрограмма HwMSInterruptRoutine драйвера мини-порта обрабатывает сигнальные прерывания (MSIs), созданные адаптером HBA. Драйвер мини-порта указывает, что его HBA создает MSIs, задавая элемент HwMSInterruptRoutine структуры PORT_CONFIGURATION_INFORMATION , чтобы он указывал на подпрограмму HwMSInterruptRoutine . Если HBA не создает MSIs, драйвер мини-порта должен задать для HwMSInterruptRoutineзначение NULL.

Если элемент InterruptSynchronizationMode структуры PORT_CONFIGURATION_INFORMATION имеет значение InterruptSynchronizeAll, драйвер Storport синхронизирует все MSIs, которые исходят от управляемого адаптера или устройств, подключенных к адаптеру. При прерывании драйвер Storport вызывает подпрограмму HwMSInterruptRoutine драйвера мини-порта в DIRQL после получения блокировки прерывания спина.

Если член InterruptSynchronizationMode структуры PORT_CONFIGURATION_INFORMATION имеет значение InterruptSynchronizePerMessage, драйвер Storport вызывает подпрограмму HwMSInterruptRoutine драйвера miniport по адресу IRQL = DIRQL, удерживая блокировку прерывания спина, соответствующую идентификатору сообщения, указанному в параметре MessageID . HBA может прервать подпрограмму HwMSInterruptRoutine для прерываний для других идентификаторов сообщений, поэтому драйвер Storport может выполнять вложенные вызовы HwMSInterruptRoutine или запускать разные экземпляры HwMSInterruptRoutine одновременно на разных процессорах. Чтобы синхронизировать доступ к конфиденциальным данным различными экземплярами HwMSInterruptRoutine, мини-порт должен вызвать подпрограммы StorPortAcquireMSISpinLock и StorPortReleaseMSISpinLock , чтобы получить и освободить блокировки спина для идентификаторов сообщений, отличных от идентификатора в MessageID.

Драйвер мини-порта может получить дополнительные сведения о сообщении, вызвав подпрограмму StorPortGetMSIInfo .

Не следует вызывать подпрограмму StorPortGetMSIInfo из подпрограммы HwMSInterruptRoutine .

Имя HwMSInterruptRoutine — это просто заполнитель. Фактический прототип для этой подпрограммы определен в Storport.h следующим образом:

typedef
BOOLEAN
  HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE (
    _In_ PVOID  HwDeviceExtension,
    _In_ ULONG  MessageId
    );

Примеры

Чтобы определить функцию обратного вызова HwMSInterruptRoutine , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить подпрограмму обратного вызова HwMSInterruptRoutine с именем MyHwMSIRoutine, используйте тип HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE , как показано в следующем примере кода:

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE MyHwMSIRoutine;

Затем реализуйте процедуру обратного вызова следующим образом:

_Use_decl_annotations_
BOOLEAN
MyHwMSIRoutine (
  _In_ PVOID  DeviceExtension,
  _In_ ULONG  MessageId
  );
  {
      ...
  }

Тип функции HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE определен в файле заголовка Storport.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов Storport. Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть storport.h (включая Storport.h)
IRQL DIRQL

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

PORT_CONFIGURATION_INFORMATION

StorPortAcquireMSISpinLock

StorPortGetMSIInfo

StorPortReleaseMSISpinLock