структура IO_CONNECT_INTERRUPT_PARAMETERS (wdm.h)

Структура IO_CONNECT_INTERRUPT_PARAMETERS содержит параметры, которые драйвер предоставляет подпрограмме IoConnectInterruptEx для регистрации процедуры обслуживания прерываний (ISR).

Синтаксис

typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
  ULONG Version;
  union {
    IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
    IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS      LineBased;
    IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS   MessageBased;
  };
} IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;

Члены

Version

На входных данных указывает конкретную операцию, выполняемую IoConnectInterruptEx, как показано ниже.

Значение версии Операция IoConnectInterruptEx
CONNECT_FULLY_SPECIFIED Подключается к определенному прерыванию, используя сведения, предоставленные диспетчером Plug and Play (PnP). Используйте член FullySpecified для предоставления дополнительных параметров операции.
CONNECT_LINE_BASED Регистрирует подпрограмму InterruptService для прерываний на основе строки устройства. Используйте элемент LineBased для предоставления дополнительных параметров операции.
CONNECT_MESSAGE_BASED Регистрирует подпрограмму InterruptMessageService для прерываний устройства, сигналируемых сообщением. Вызывающий объект также может указать резервную подпрограмму InterruptService , если устройство имеет только прерывания на основе строки. Используйте элемент MessageBased для предоставления дополнительных параметров операции.
 

При возврате подпрограмма предоставляет сведения об операции следующим образом.

Значение версии Описание
CONNECT_FULLY_SPECIFIED Вызывающий объект, указанный CONNECT_LINE_BASED или CONNECT_MESSAGE_BASED для версии на платформе, которая не поддерживает ее. Повторите операцию, используя CONNECT_FULLY_SPECIFIED.
CONNECT_LINE_BASED Вызывающий объект, указанный CONNECT_MESSAGE_BASED, и была зарегистрирована резервная подпрограмма InterruptService для вызывающего объекта.
CONNECT_MESSAGE_BASED Вызывающий объект указал CONNECT_MESSAGE_BASED и была зарегистрирована подпрограмма InterruptMessageService вызывающего объекта.

FullySpecified

Указывает дополнительные параметры операции, выполняемой IoConnectInterruptEx , если version имеет значение CONNECT_FULLY_SPECIFIED (или CONNECT_FULLY_SPECIFIED_GROUP, если используется член Группы ). Дополнительные сведения см. в статье Использование версии CONNECT_FULLY_SPECIFIED IoConnectInterruptEx.

PhysicalDeviceObject

Указатель на PDO для устройства.

InterruptObject

Указатель на расположение, которое получает указатель на набор объектов прерываний для устройства.

ServiceRoutine

Указатель на подпрограмму InterruptService для регистрации в качестве ISR для прерываний устройства.

ServiceContext

Указывает значение, передаваемое в качестве параметра ServiceContext подпрограммы InterruptService .

SpinLock

Либо указатель на блокировку спина, которая служит в качестве блокировки прерывания для набора прерываний, либо значение NULL. Если значение РАВНО NULL, система выделяет спиновую блокировку, которая служит в качестве блокировки спина прерывания. Если значение не равно NULL, следует инициализировать блокировку спина с помощью KeInitializeSpinLock.

SynchronizeIrql

Указывает DIRQL, в котором будет выполняться ISR. Если ISR обрабатывает несколько векторов прерываний или драйвер имеет несколько ISR, это значение должно быть максимальным значением IRQL набора прерываний. IRQL для прерывания передается в ресурс CmResourceTypeInterrupt в элементе u.Interrupt.LevelCM_PARTIAL_RESOURCE_DESCRIPTOR. В противном случае значения Irql и SynchronizeIrql идентичны.

FloatingSave

Указывает, сохраняет ли система состояние процессора с плавающей запятой при прерывании. Если задано значение TRUE, система сохраняет состояние с плавающей запятой.

ShareVector

Указывает, является ли вектор прерывания общим. Прерывания PCI на основе строк должны быть общими. Для прерываний PCI с сигналом о сообщениях модули записи драйверов могут выбирать, являются ли их прерывания общими, но должны сделать их общими по умолчанию.

Вектор

Указывает вектор прерывания, передаваемый в ресурсе CmResourceTypeInterrupt в элементе u.Interrupt.VectorCM_PARTIAL_RESOURCE_DESCRIPTOR.

Irql

Указывает DIRQL, передаваемый в ресурсе CmResourceTypeInterrupt в элементе u.Interrupt.LevelCM_PARTIAL_RESOURCE_DESCRIPTOR. Начиная с Windows 8 драйвер может зарегистрировать ISR, который выполняется на пассивном уровне, установив для Irql и SynchronizeIrql значение PASSIVE_LEVEL, а для SpinLockзначение NULL. Дополнительные сведения см. в статье Использование процедур службы прерывания Passive-Level.

InterruptMode

Задает KINTERRUPT_MODE, определяющий, активируется ли прерывание уровня (Уровень прерыванияSensitive = ) или по краю (ПрерываниеMode = Latched). Для общих линий прерываний из шины PCI укажите LevelSensitive. Для прерываний pci message-signaled укажите Latched.

ProcessorEnableMask

Указывает маску KAFFINITY , представляющую набор процессоров, на которых могут происходить прерывания устройства. Это значение передается в ресурс CmResourceTypeInterrupt в члене u.Interrupt.AffinityCM_PARTIAL_RESOURCE_DESCRIPTOR.

Группа

Указывает номер группы, идентифицирующий группу процессоров, в которую будет доставлено прерывание. Как правило, драйвер получает номер своей группы в составе переведенных ресурсов, включенных в запрос IRP_MN_START_DEVICE . Начиная с Windows 7, член группы используется, если для элемента version структуры IO_CONNECT_INTERRUPT_PARAMETERS задано значение CONNECT_FULLY_SPECIFIED_GROUP. Член группы игнорируется, если для параметра Version задано значение CONNECT_FULLY_SPECIFIED. В этом случае номер группы для доставки прерывания всегда равен 0.

LineBased

Указывает дополнительные параметры операции, выполняемой IoConnectInterruptEx , если version имеет значение CONNECT_LINE_BASED. Дополнительные сведения см. в разделе Использование CONNECT_LINE_BASED версии IoConnectInterruptEx.

PhysicalDeviceObject

Указатель на объект физического устройства (PDO) устройства.

InterruptObject

Указатель на расположение, которое получает указатель на набор объектов прерываний для устройства.

ServiceRoutine

Указатель на подпрограмму InterruptService для регистрации в качестве ISR для прерываний устройства.

ServiceContext

Указывает значение, передаваемое в качестве параметра ServiceContext подпрограммы InterruptService .

SpinLock

Либо указатель на блокировку спина, которая служит в качестве блокировки прерывания для набора прерываний, либо значение NULL. Если значение РАВНО NULL, система выделяет спиновую блокировку, которая служит в качестве блокировки спина прерывания. Если значение не равно NULL, следует инициализировать блокировку спина с помощью KeInitializeSpinLock.

SynchronizeIrql

Указывает минимальное значение IRQL устройства (DIRQL), на котором выполняется ISR. Система использует это значение только в том случае, если оно больше максимального значения IRQL набора прерываний; В противном случае система использует максимальное значение IRQL. Драйверы почти всегда указывают PASSIVE_LEVEL для SynchronizeIrql. (Драйвер должен указывать значение, отличное от PASSIVE_LEVEL только в том случае, если ISR должен выполняться над определенным IRQL.) Начиная с Windows 8 набор ресурсов прерываний на основе строк, назначенных устройству, может совместно использовать ISR, который выполняется в IRQL = PASSIVE_LEVEL. Если SynchronizeIrql = PASSIVE_LEVEL и максимальное значение IRQL этого набора прерываний PASSIVE_LEVEL, подпрограмма InterruptService вызывается в PASSIVE_LEVEL. Дополнительные сведения см. в статье Использование процедур службы прерывания Passive-Level.

FloatingSave

Указывает, сохраняет ли система состояние процессора с плавающей запятой при прерывании. Если задано значение TRUE, система сохраняет состояние с плавающей запятой. Для платформ на базе x86 и Itanium это значение должно иметь значение FALSE. Дополнительные сведения о сохранении состояния с плавающей запятой и MMX см. в статье Использование с плавающей запятой или MMX в драйвере WDM.

MessageBased

Указывает дополнительные параметры операции, выполняемой IoConnectInterruptEx , если version имеет значение CONNECT_MESSAGE_BASED. Дополнительные сведения см. в статье Использование CONNECT_MESSAGE_BASED версии IoConnectInterruptEx.

PhysicalDeviceObject

Указатель на PDO устройства.

ConnectionContext

Указатель на расположение, которое получает указатель на контекст подключения. Если при возврате version имеет значение CONNECT_LINE_BASED, подпрограмма предоставляет указатель на структуру KINTERRUPT . Если при возврате version имеет значение CONNECT_MESSAGE_BASED, подпрограмма предоставляет указатель на структуру IO_INTERRUPT_MESSAGE_INFO .

Чтобы свести к минимуму приведение, ConnectionContext определяется как объединение. Используйте ConnectionContext.Generic для обработки расположения как PVOID. Используйте ConnectionContext.InterruptObject и ConnectionContext.InterruptMessageTable , чтобы обрабатывать расположение как переменную PKINTERRUPT или PIO_INTERRUPT_MESSAGE_INFO соответственно.

Универсальный шаблон

Указатель на переменную PVOID, в которую подпрограмма IoConnectInterruptEx записывает указатель на контекст подключения.

InterruptMessageTable

Указатель на переменную PIO_INTERRUPT_MESSAGE_INFO, в которую подпрограмма IoConnectInterruptEx записывает указатель на контекст подключения.

InterruptObject

Указатель на переменную PKINTERRUPT, в которую подпрограмма IoConnectInterruptEx записывает указатель на контекст подключения.

MessageServiceRoutine

Указатель на подпрограмму InterruptMessageService для регистрации в качестве ISR для прерываний устройства.

ServiceContext

Указывает значение, передаваемое в качестве параметра ServiceContextподпрограммы InterruptMessageService или InterruptService для прерывания.

SpinLock

Либо указатель на блокировку спина, которая служит в качестве блокировки прерывания для набора прерываний, либо значение NULL. Если значение РАВНО NULL, система выделяет спиновую блокировку, которая служит в качестве блокировки спина прерывания. Если значение не равно NULL, следует инициализировать блокировку спина с помощью KeInitializeSpinLock.

SynchronizeIrql

Указывает минимальное значение IRQL устройства (DIRQL), на котором выполняется ISR. Система использует это значение только в том случае, если оно больше максимального значения IRQL набора прерываний; В противном случае система использует максимальное значение IRQL. Драйверы почти всегда указывают PASSIVE_LEVEL для SynchronizeIrql.

FloatingSave

Указывает, сохраняет ли система состояние процессора с плавающей запятой при прерывании. Если задано значение TRUE, система сохраняет состояние с плавающей запятой.

FallBackServiceRoutine

Указатель на подпрограмму InterruptService , используемую в качестве ISR для прерываний на основе строк. Если на устройстве нет прерываний, по сигналу о сообщениях, но есть прерывания на основе строк, система регистрирует эту подпрограмму для обработки прерываний на основе строки.

Комментарии

Подпрограмма IoConnectInterruptEx принимает один параметр Parameters , который указывает на структуру IO_CONNECT_INTERRUPT_PARAMETERS , содержащую все параметры операции.

Требования

Требование Значение
Заголовок wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)

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

IoConnectInterruptEx