ISR の登録

ドライバーは IoConnectInterruptEx ルーチンで、割り込みの ISR を登録します。 IoConnectInterruptEx は、Windows Vista 以降のオペレーティング システムの一部です。 IoConnectInterruptEx は、1 つの Parameters パラメーターを受け取ります。これは、 IO_CONNECT_INTERRUPT_PARAMETERS 構造体へのポインターです 。 Windows Server 2003、Windows XP、および Windows 2000 の場合、ドライバーは Windows Driver Kit (WDK) に含まれている Iointex.lib ライブラリを使用できます。

Windows Vista 以降では、 IoConnectInterruptEx には ISR を登録するためのさまざまな方法が用意されています。 Parameters->Version 指定された値で、メソッドは次のように決まります。

  • CONNECT_LINE_BASED を使用して、デバイスのすべてのライン ベースの割り込みに対して InterruptService ルーチンを登録します。 (通常、デバイスには最大 1 ラインベースの割り込みがあります。) システムは、デバイスに割り当てられたラインベースの割り込みを自動的に検出します。 詳細については、「IoConnectInterruptEx の CONNECT_LINE_BASED バージョンの使用」を参照してください

  • CONNECT_MESSAGE_BASED で、デバイスのすべてのメッセージシグナル割り込みに対して InterruptMessageService ルーチンを登録します。 フォールバック InterruptService ルーチンを指定することもできます。デバイスにラインベースの割り込みしかない場合は、代わりに IoConnectInterruptEx によって InterruptService ルーチンが登録されます。 システムは、デバイスに割り当てられたメッセージシグナル割り込みを自動的に検出します。 詳細については、「IoConnectInterruptEx の CONNECT_MESSAGE_BASED バージョンの使用」を参照してください。

  • CONNECT_FULLY_SPECIFIED で、割り込みごとに InterruptService ルーチンを個別に登録します。 これを使用して、ラインベースの割り込みまたはメッセージ通知割り込みに対して InterruptService ルーチンを指定できますが、PnP マネージャーによって渡される情報を使用して割り込みを手動で指定する必要があります。 詳細については、「IoConnectInterruptEx の CONNECT_FULLY_SPECIFIED バージョンの使用」を参照してください。

Windows Vista より前のオペレーティング システムで使用できるのは、CONNECT_FULLY_SPECIFIED のみです。 CONNECT_LINE_BASED または CONNECT_MESSAGE_BASED を指定すると、IoConnectInterruptEx はエラーを返します。 この動作を使用して、Windows Vista 以前のシステムで実行しているかどうかを判断できます。 詳細については、「Windows Vista より前の IoConnectInterruptEx の使用」を参照してください。