структура 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) |