IO_CONNECT_INTERRUPT_PARAMETERS 構造体 (wdm.h)

IO_CONNECT_INTERRUPT_PARAMETERS構造体には、ドライバーが割り込みサービス ルーチン (ISR) を登録するために IoConnectInterruptEx ルーチンに提供するパラメーターが含まれています。

構文

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 プラグ アンド プレイ (PnP) マネージャーによって提供される情報を使用して、特定の割り込みに接続します。 操作の追加パラメーターを指定するには、 FullySpecified メンバーを使用します。
CONNECT_LINE_BASED デバイスのラインベース の割り込み用の InterruptService ルーチンを登録します。 LineBased メンバーを使用して、操作の追加パラメーターを指定します。
CONNECT_MESSAGE_BASED デバイスのメッセージシグナル 割り込みの InterruptMessageService ルーチンを登録します。 デバイスに行ベースの 割り込み しかない場合は、呼び出し元はフォールバック割り込みサービス ルーチンを指定することもできます。 MessageBased メンバーを使用して、操作の追加パラメーターを指定します。
 

返された場合、ルーチンは操作に関する情報を次のように提供します。

バージョンの値 説明
CONNECT_FULLY_SPECIFIED 呼び出し元は、サポートされていないプラットフォーム上の バージョン のCONNECT_LINE_BASEDまたはCONNECT_MESSAGE_BASEDを指定しました。 CONNECT_FULLY_SPECIFIEDを使用して操作を再試行します。
CONNECT_LINE_BASED 呼び出し元がCONNECT_MESSAGE_BASED指定し、呼び出し元のフォールバック 割り込みサービス ルーチンが登録されました。
CONNECT_MESSAGE_BASED 呼び出し元がCONNECT_MESSAGE_BASED指定し、呼び出し元の InterruptMessageService ルーチンが登録されました。

FullySpecified

Version の値が CONNECT_FULLY_SPECIFIED (またはグループ メンバーが使用されている場合はCONNECT_FULLY_SPECIFIED_GROUP) の場合に、IoConnectInterruptEx によって実行される操作の追加パラメーターを指定します。 詳細については、「 IoConnectInterruptEx のCONNECT_FULLY_SPECIFIED バージョンの使用」を参照してください。

PhysicalDeviceObject

デバイスの PDO へのポインター。

InterruptObject

デバイスの割り込みオブジェクトのセットへのポインターを受け取る場所へのポインター。

ServiceRoutine

デバイスの 割り込みの ISR として登録する InterruptService ルーチンへのポインター。

ServiceContext

InterruptService ルーチンの ServiceContext パラメーターとして渡される値を指定します。

SpinLock

一連の割り込みの割り込みスピン ロックとして機能するスピン ロックへのポインター、または NULLNULL の場合、システムは割り込みスピン ロックとして機能するスピン ロックを割り当てます。 NULL 以外の場合は、KeInitializeSpinLock を使用してスピン ロックを初期化する必要があります。

SynchronizeIrql

ISR を実行する DIRQL を指定します。 ISR が複数の割り込みベクトルを処理する場合、またはドライバーに複数の ISR がある場合、この値は割り込みのセットの最大 IRQL である必要があります。 割り込みの IRQL は、CM_PARTIAL_RESOURCE_DESCRIPTORの u.Interrupt.Level メンバーの CmResourceTypeInterrupt リソース渡されます。 それ以外の場合、 IrqlSynchronizeIrql の値は同じです。

FloatingSave

割り込みが発生したときに、システムがプロセッサの浮動小数点状態を保存するかどうかを指定します。 TRUE の場合、システムは浮動小数点状態を保存します。

ShareVector

割り込みベクトルが共有可能かどうかを指定します。 行ベースの PCI 割り込みは共有可能である必要があります。 メッセージシグナル PCI 割り込みの場合、ドライバー ライターは割り込みを共有可能にするかどうかを選択できますが、既定では共有可能にすることを選択する必要があります。

ベクター

CM_PARTIAL_RESOURCE_DESCRIPTORの u.Interrupt.Vector メンバーにある CmResourceTypeInterrupt リソースで渡される割り込みベクトル指定します。

Irql

CM_PARTIAL_RESOURCE_DESCRIPTORの u.Interrupt.Level メンバーで CmResourceTypeInterrupt リソースに渡される DIRQL 指定します。 Windows 8以降、ドライバーは IrqlSynchronizeIrql をPASSIVE_LEVELに設定し、SpinLockNULL に設定することで、パッシブ レベルで実行される ISR を登録できます。 詳細については、「 Passive-Level 割り込みサービス ルーチンの使用」を参照してください。

InterruptMode

割り込みがレベル トリガー (InterruptModeLevelSensitive) かエッジ トリガー (割り込みモード = ラッチ) かを決定するKINTERRUPT_MODE = 指定します。 PCI バスからの共有割り込み回線の場合は、 LevelSensitive を指定します。 PCI メッセージシグナル割り込みの場合は、 ラッチを指定します

ProcessorEnableMask

デバイスの割り込みが発生する可能性があるプロセッサのセットを表す KAFFINITY マスクを指定します。 この値は、CM_PARTIAL_RESOURCE_DESCRIPTORu.Interrupt.Affinity メンバーにある CmResourceTypeInterrupt リソースで渡されます。

グループ化

割り込みを配信するプロセッサ グループを識別するグループ番号を指定します。 通常、ドライバーは、 IRP_MN_START_DEVICE 要求に含まれる翻訳されたリソースの一部として、そのグループ番号を受け取ります。 Windows 7 以降では、IO_CONNECT_INTERRUPT_PARAMETERS構造体の Version メンバーが CONNECT_FULLY_SPECIFIED_GROUP に設定されている場合、グループ メンバーが使用されます。 Version が CONNECT_FULLY_SPECIFIED に設定されている場合、グループ メンバーは無視されます。その場合、割り込みの配信のグループ番号は常に 0 になります。

LineBased

Version の値が CONNECT_LINE_BASED の場合に IoConnectInterruptEx によって実行される操作の追加パラメーターを指定します。 詳細については、「 IoConnectInterruptEx のCONNECT_LINE_BASED バージョンの使用」を参照してください。

PhysicalDeviceObject

デバイスの物理デバイス オブジェクト (PDO) へのポインター。

InterruptObject

デバイスの割り込みオブジェクトのセットへのポインターを受け取る場所へのポインター。

ServiceRoutine

デバイスの 割り込みの ISR として登録する InterruptService ルーチンへのポインター。

ServiceContext

InterruptService ルーチンの ServiceContext パラメーターとして渡される値を指定します。

SpinLock

一連の割り込みの割り込みスピン ロックとして機能するスピン ロックへのポインター、または NULLNULL の場合、システムは割り込みスピン ロックとして機能するスピン ロックを割り当てます。 NULL 以外の場合は、KeInitializeSpinLock を使用してスピン ロックを初期化する必要があります。

SynchronizeIrql

ISR を実行する最小デバイス IRQL (DIRQL) を指定します。 この値は、割り込みのセットの最大 IRQL を超える場合にのみ使用されます。それ以外の場合、システムは最大 IRQL を使用します。 ドライバーは、ほとんどの場合、 SynchronizeIrql のPASSIVE_LEVELを指定します。 (ドライバーでは、ISR を特定の IRQL より上で実行する必要がある場合にのみ、PASSIVE_LEVEL以外の値を指定する必要があります。Windows 8以降、デバイスに割り当てられている一連の行ベースの割り込みリソースは、IRQL = PASSIVE_LEVELで実行される ISR を共有できます。 SynchronizeIrql = PASSIVE_LEVELで、この割り込みのセットの最大 IRQL がPASSIVE_LEVEL場合は、PASSIVE_LEVELで InterruptService ルーチンが呼び出されます。 詳細については、「 Passive-Level 割り込みサービス ルーチンの使用」を参照してください。

FloatingSave

割り込みが発生したときに、システムがプロセッサの浮動小数点状態を保存するかどうかを指定します。 TRUE の場合、システムは浮動小数点状態を保存します。 x86 ベースおよび Itanium ベースのプラットフォームの場合、この値は FALSE に設定する必要があります。 浮動小数点と MMX の状態の保存の詳細については、「 WDM ドライバーでの浮動小数点または MMX の使用」を参照してください。

MessageBased

Version の値が CONNECT_MESSAGE_BASED の場合に IoConnectInterruptEx によって実行される操作の追加パラメーターを指定します。 詳細については、「 IoConnectInterruptEx のCONNECT_MESSAGE_BASED バージョンの使用」を参照してください。

PhysicalDeviceObject

デバイスの PDO へのポインター。

ConnectionContext

接続コンテキストへのポインターを受け取る場所へのポインター。 戻り値 Version に CONNECT_LINE_BASED の値がある場合、ルーチンは KINTERRUPT 構造体へのポインターを提供します。 戻り値 Version の値が CONNECT_MESSAGE_BASED の場合、ルーチンは IO_INTERRUPT_MESSAGE_INFO 構造体へのポインターを提供します。

キャストを最小限に抑えるために、 ConnectionContext は共用体として定義されます。 ConnectionContext.Generic を使用して、場所を PVOID として扱います。 ConnectionContext.InterruptObjectConnectionContext.InterruptMessageTable を使用して、場所をそれぞれ PKINTERRUPT またはPIO_INTERRUPT_MESSAGE_INFO変数として扱います。

ジェネリック

IoConnectInterruptEx ルーチンが接続コンテキストへのポインターを書き込む PVOID 変数へのポインター。

InterruptMessageTable

IoConnectInterruptEx ルーチンが接続コンテキストへのポインターを書き込むPIO_INTERRUPT_MESSAGE_INFO変数へのポインター。

InterruptObject

IoConnectInterruptEx ルーチンが接続コンテキストへのポインターを書き込む PKINTERRUPT 変数へのポインター。

MessageServiceRoutine

デバイスの 割り込みの ISR として登録する InterruptMessageService ルーチンへのポインター。

ServiceContext

割り込み用の InterruptMessageService ルーチンまたは InterruptService ルーチンの ServiceContext パラメーターとして渡される値を指定します。

SpinLock

一連の割り込みの割り込みスピン ロックとして機能するスピン ロックへのポインター、または NULLNULL の場合、システムは割り込みスピン ロックとして機能するスピン ロックを割り当てます。 NULL 以外の場合は、KeInitializeSpinLock を使用してスピン ロックを初期化する必要があります。

SynchronizeIrql

ISR を実行する最小デバイス IRQL (DIRQL) を指定します。 この値が割り込みのセットの最大 IRQL より大きい場合にのみ、システムはこの値を使用します。それ以外の場合、システムは最大 IRQL を使用します。 ドライバーは、ほとんどの場合、 SynchronizeIrql のPASSIVE_LEVELを指定します。

FloatingSave

割り込みが発生したときに、システムがプロセッサの浮動小数点状態を保存するかどうかを指定します。 TRUE の場合、システムは浮動小数点状態を保存します。

FallBackServiceRoutine

行ベースの 割り込みの ISR として使用する InterruptService ルーチンへのポインター。 デバイスにメッセージシグナル割り込みがないが、行ベースの割り込みがある場合、システムはこのルーチンを登録して行ベースの割り込みを処理します。

注釈

IoConnectInterruptEx ルーチンは、1 つの Parameters パラメーターを受け取ります。これは、操作のすべてのパラメーターを含むIO_CONNECT_INTERRUPT_PARAMETERS構造体を指します。

要件

要件
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)

こちらもご覧ください

IoConnectInterruptEx