структура 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.
Указатель на PDO для устройства.
Указатель на расположение, которое получает указатель на набор объектов прерываний для устройства.
Указатель на подпрограмму InterruptService для регистрации в качестве ISR для прерываний устройства.
Указывает значение, передаваемое в качестве параметра ServiceContext подпрограммы InterruptService .
Либо указатель на блокировку спина, которая служит в качестве блокировки прерывания для набора прерываний, либо значение NULL. Если значение РАВНО NULL, система выделяет спиновую блокировку, которая служит в качестве блокировки спина прерывания. Если значение не равно NULL, следует инициализировать блокировку спина с помощью KeInitializeSpinLock.
Указывает DIRQL, в котором будет выполняться ISR. Если ISR обрабатывает несколько векторов прерываний или драйвер имеет несколько ISR, это значение должно быть максимальным значением IRQL набора прерываний. IRQL для прерывания передается в ресурс CmResourceTypeInterrupt в элементе u.Interrupt.LevelCM_PARTIAL_RESOURCE_DESCRIPTOR. В противном случае значения Irql и SynchronizeIrql идентичны.
Указывает, сохраняет ли система состояние процессора с плавающей запятой при прерывании. Если задано значение TRUE, система сохраняет состояние с плавающей запятой.
Указывает, является ли вектор прерывания общим. Прерывания PCI на основе строк должны быть общими. Для прерываний PCI с сигналом о сообщениях модули записи драйверов могут выбирать, являются ли их прерывания общими, но должны сделать их общими по умолчанию.
Указывает вектор прерывания, передаваемый в ресурсе CmResourceTypeInterrupt в элементе u.Interrupt.VectorCM_PARTIAL_RESOURCE_DESCRIPTOR.
Указывает DIRQL, передаваемый в ресурсе CmResourceTypeInterrupt в элементе u.Interrupt.LevelCM_PARTIAL_RESOURCE_DESCRIPTOR. Начиная с Windows 8 драйвер может зарегистрировать ISR, который выполняется на пассивном уровне, установив для Irql и SynchronizeIrql значение PASSIVE_LEVEL, а для SpinLock — значение NULL. Дополнительные сведения см. в статье Использование процедур службы прерывания Passive-Level.
Задает KINTERRUPT_MODE, определяющий, активируется ли прерывание уровня (Уровень прерыванияSensitive = ) или по краю (ПрерываниеMode = Latched). Для общих линий прерываний из шины PCI укажите LevelSensitive. Для прерываний pci message-signaled укажите Latched.
Указывает маску 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.
Указатель на объект физического устройства (PDO) устройства.
Указатель на расположение, которое получает указатель на набор объектов прерываний для устройства.
Указатель на подпрограмму InterruptService для регистрации в качестве ISR для прерываний устройства.
Указывает значение, передаваемое в качестве параметра ServiceContext подпрограммы InterruptService .
Либо указатель на блокировку спина, которая служит в качестве блокировки прерывания для набора прерываний, либо значение NULL. Если значение РАВНО NULL, система выделяет спиновую блокировку, которая служит в качестве блокировки спина прерывания. Если значение не равно NULL, следует инициализировать блокировку спина с помощью KeInitializeSpinLock.
Указывает минимальное значение 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.
Указывает, сохраняет ли система состояние процессора с плавающей запятой при прерывании. Если задано значение TRUE, система сохраняет состояние с плавающей запятой. Для платформ на базе x86 и Itanium это значение должно иметь значение FALSE. Дополнительные сведения о сохранении состояния с плавающей запятой и MMX см. в статье Использование с плавающей запятой или MMX в драйвере WDM.
MessageBased
Указывает дополнительные параметры операции, выполняемой IoConnectInterruptEx , если version имеет значение CONNECT_MESSAGE_BASED. Дополнительные сведения см. в статье Использование CONNECT_MESSAGE_BASED версии IoConnectInterruptEx.
Указатель на PDO устройства.
Указатель на расположение, которое получает указатель на контекст подключения. Если при возврате 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 записывает указатель на контекст подключения.
Указатель на переменную PIO_INTERRUPT_MESSAGE_INFO, в которую подпрограмма IoConnectInterruptEx записывает указатель на контекст подключения.
Указатель на переменную PKINTERRUPT, в которую подпрограмма IoConnectInterruptEx записывает указатель на контекст подключения.
Указатель на подпрограмму InterruptMessageService для регистрации в качестве ISR для прерываний устройства.
Указывает значение, передаваемое в качестве параметра ServiceContextподпрограммы InterruptMessageService или InterruptService для прерывания.
Либо указатель на блокировку спина, которая служит в качестве блокировки прерывания для набора прерываний, либо значение NULL. Если значение РАВНО NULL, система выделяет спиновую блокировку, которая служит в качестве блокировки спина прерывания. Если значение не равно NULL, следует инициализировать блокировку спина с помощью KeInitializeSpinLock.
Указывает минимальное значение IRQL устройства (DIRQL), на котором выполняется ISR. Система использует это значение только в том случае, если оно больше максимального значения IRQL набора прерываний; В противном случае система использует максимальное значение IRQL. Драйверы почти всегда указывают PASSIVE_LEVEL для SynchronizeIrql.
Указывает, сохраняет ли система состояние процессора с плавающей запятой при прерывании. Если задано значение TRUE, система сохраняет состояние с плавающей запятой.
Указатель на подпрограмму InterruptService , используемую в качестве ISR для прерываний на основе строк. Если на устройстве нет прерываний, по сигналу о сообщениях, но есть прерывания на основе строк, система регистрирует эту подпрограмму для обработки прерываний на основе строки.
Подпрограмма IoConnectInterruptEx принимает один параметр Parameters , который указывает на структуру IO_CONNECT_INTERRUPT_PARAMETERS , содержащую все параметры операции.
Требование | Значение |
---|---|
Заголовок | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |