Registrando um ISR
Os drivers usam a rotina IoConnectInterruptEx para registrar um ISR para uma interrupção. IoConnectInterruptEx faz parte do Windows Vista e sistemas operacionais posteriores. IoConnectInterruptEx usa um único parâmetro Parameters , que é um ponteiro para uma estrutura IO_CONNECT_INTERRUPT_PARAMETERS . Para Windows Server 2003, Windows XP e Windows 2000, os drivers podem usar a biblioteca Iointex.lib incluída no WDK (Kit de Driver do Windows).
No Windows Vista e posterior, IoConnectInterruptEx fornece vários métodos diferentes para registrar um ISR. O valor especificado para Parameters-Version> determina o método , da seguinte maneira:
Use CONNECT_LINE_BASED para registrar uma rotina InterruptService para todas as interrupções baseadas em linha de um dispositivo. (Os dispositivos geralmente têm no máximo uma interrupção baseada em linha.) O sistema detecta automaticamente todas as interrupções baseadas em linha atribuídas ao dispositivo. Para obter mais informações, consulte Usando a versão CONNECT_LINE_BASED de IoConnectInterruptEx.
Use CONNECT_MESSAGE_BASED para registrar uma rotina InterruptMessageService para todas as interrupções sinalizadas por mensagem de um dispositivo. Você também pode especificar uma rotina InterruptService de fallback— se o dispositivo tiver apenas interrupções baseadas em linha, IoConnectInterruptEx registrará a rotina InterruptService . O sistema detecta automaticamente quaisquer interrupções sinalizadas por mensagem atribuídas ao dispositivo. Para obter mais informações, consulte Usando a versão CONNECT_MESSAGE_BASED de IoConnectInterruptEx.
Use CONNECT_FULLY_SPECIFIED para registrar uma rotina InterruptService para cada interrupção separadamente. Você pode usar isso para especificar uma rotina InterruptService para uma interrupção baseada em linha ou sinalizada por mensagem, mas você deve especificar manualmente a interrupção usando as informações passadas pelo gerenciador PnP. Para obter mais informações, consulte Usando a versão CONNECT_FULLY_SPECIFIED de IoConnectInterruptEx.
Em sistemas operacionais anteriores ao Windows Vista, você só pode usar CONNECT_FULLY_SPECIFIED. Se você especificar CONNECT_LINE_BASED ou CONNECT_MESSAGE_BASED, IoConnectInterruptEx retornará um erro. Você pode usar esse comportamento para determinar se está executando no Windows Vista ou em um sistema anterior. Para obter mais informações, consulte Usando IoConnectInterruptEx antes do Windows Vista.