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


Регистрация ISR

Драйверы используют рутинную функцию IoConnectInterruptEx для регистрации ISR для прерывания. IoConnectInterruptEx входит в состав Windows Vista и более поздних операционных систем. IoConnectInterruptEx принимает один параметр Parameters , который является указателем на структуру IO_CONNECT_INTERRUPT_PARAMETERS . Для Windows Server 2003, Windows XP и Windows 2000 драйверы могут использовать библиотеку Iointex.lib, включенную в комплект драйверов Windows (WDK).

В Windows Vista и более поздних версиях IoConnectInterruptEx предоставляет несколько различных методов регистрации ISR. Значение, указанное для Parameters-Version>, определяет метод следующим образом:

  • Используйте CONNECT_LINE_BASED для регистрации процедуры обслуживания прерываний для всех линейных прерываний устройства. (Устройства обычно имеют максимум одно строковое прерывание.) Система автоматически обнаруживает любые строковые прерывания, назначенные устройству. Дополнительные сведения см. в разделе "Использование версии CONNECT_LINE_BASED IoConnectInterruptEx".

  • Используйте CONNECT_MESSAGE_BASED для регистрации подпрограммы InterruptMessageService для всех прерываний, инициируемых сообщениями устройства. Кроме того, можно указать резервную подпрограмму ОбслуживаниеПрерываний — если устройство имеет только строчно-ориентированные прерывания, IoConnectInterruptEx регистрирует подпрограмму InterruptService вместо этого. Система автоматически обнаруживает все назначенные устройству прерывания, сигнализируемые сообщением. Для получения дополнительной информации см. раздел "Использование версии IoConnectInterruptEx на основе CONNECT_MESSAGE_BASED".

  • Используйте CONNECT_FULLY_SPECIFIED для регистрации обработчика прерываний для каждого прерывания отдельно. Эту процедуру можно использовать для указания подпрограммы обслуживания прерываний для ориентированного на линии или с сигналами сообщений прерывания, но необходимо вручную указать прерывание, используя информацию, переданную диспетчером PnP. Дополнительные сведения см. в разделе «Использование версии CONNECT_FULLY_SPECIFIED для IoConnectInterruptEx».

В операционных системах до Windows Vista можно использовать только CONNECT_FULLY_SPECIFIED. Если указать CONNECT_LINE_BASED или CONNECT_MESSAGE_BASED, IoConnectInterruptEx возвращает ошибку. Это поведение можно использовать для определения того, работает ли вы в Windows Vista или более ранней системе. Дополнительные сведения см. в разделе "Использование IoConnectInterruptEx до Windows Vista".