次の方法で共有


Windows Vista より前の IoConnectInterruptEx の使用

Windows 2000、Windows XP、または Windows Server 2003 のドライバーは、Iointex.lib ライブラリにリンクして、これらのバージョンのオペレーティング システムで IoConnectInterruptEx を使用できます。

このようなドライバーで IoConnectInterruptEx を使用するには、Wdm.h または Ntddk.h の直後に、ドライバーのソース コードに Iointex.h を含めます。 Iointex.h ヘッダーは、ルーチンのプロトタイプを宣言します。 ドライバー構築するときは、Iointex.lib に静的にリンクされていることを確認します。

Windows Vista より前の オペレーティング システムの場合、Iointex.lib によって提供される IoConnectInterruptEx のバージョンでは、ルーチンの CONNECT_FULLY_SPECIFIED バージョンのみがサポートされます。 他のバージョンが指定されている場合、ルーチンは NTSTATUS エラー コードを返し、パラメーター->バージョンを CONNECT_FULLY_SPECIFIED に設定します。

この動作を使用して、Windows Vista では CONNECT_LINE_BASED または CONNECT_MESSAGE_BASED を、以前のオペレーティング システムでは、CONNECT_FULLY_SPECIFIED を使用するようにドライバーを記述できます。 最初に、パラメーター-バージョン>が CONNECT_LINE_BASED または CONNECT_MESSAGE_BASED と等しい IoConnectInterruptEx を呼び出します。 戻り値がエラー コードで Parameters->Version != CONNECT_FULLY_SPECIFIED の場合は、パラメーター->バージョンを CONNECT_FULLY_SPECIFIED に設定して操作を再試行します。

その手法を次のコード例に示します。

IO_CONNECT_INTERRUPT_PARAMETERS params;

// deviceExtension is a pointer to the driver's device extension. 
//     deviceExtension->MessageUsed is a BOOLEAN.

RtlZeroMemory( &params, sizeof(IO_CONNECT_INTERRUPT_PARAMETERS) );
params.Version = CONNECT_MESSAGE_BASED;

// Set members of params.MessageBased here.

status = IoConnectInterruptEx(&params);

if ( NT_SUCCESS(status) ) {
    // Operation succeeded. We are running on Windows Vista.
    devExt->MessageUsed = TRUE; // We save this for posterity.
} else {
    // Check to see if we are running on an operating system prior to Windows Vista.
    if (params.Version == CONNECT_FULLY_SPECIFIED) {
        devExt->MessageUsed = FALSE;  // We're not using message-signaled interrupts.
 
        // Set members of params.FullySpecified here.
 
        status = IoConnectInterruptEx(&params);
    } else {
        // Other error.
    }
}