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 ルーチンを登録します。 呼び出し元は、デバイスに行ベースの割り込みしかない場合は、InterruptService ルーチン フォールバックを指定することもできます。 MessageBased メンバーを使用して、操作の追加パラメーターを指定します。 |
戻り値として、ルーチンは操作に関する情報を次のように提供します。
バージョン値 | 形容 |
---|---|
CONNECT_FULLY_SPECIFIED | 呼び出し元は、サポートされていないプラットフォーム上の バージョン のCONNECT_LINE_BASEDまたはCONNECT_MESSAGE_BASEDを指定しました。 CONNECT_FULLY_SPECIFIEDを使用して操作を再試行します。 |
CONNECT_LINE_BASED | 呼び出し元がCONNECT_MESSAGE_BASEDを指定し、呼び出し元のフォールバック InterruptService ルーチンが登録されました。 |
CONNECT_MESSAGE_BASED | 呼び出し元が指定したCONNECT_MESSAGE_BASEDと呼び出し元の InterruptMessageService ルーチンが登録されました。 |
FullySpecified
バージョン の値が CONNECT_FULLY_SPECIFIED の場合 (または、グループ メンバーが使用されている場合はCONNECT_FULLY_SPECIFIED_GROUP) IoConnectInterruptEx によって実行される操作の追加パラメーターを指定します。 詳細については、「CONNECT_FULLY_SPECIFIED バージョンの IoConnectInterruptExの使用」を参照してください。
デバイスの PDO へのポインター。
デバイスの割り込みオブジェクトのセットへのポインターを受け取る場所へのポインター。
デバイスの割り込みの ISR として登録する InterruptService ルーチンへのポインター。
InterruptService ルーチンの ServiceContext パラメーターとして渡される値を指定します。
一連の割り込みの割り込みスピン ロックとして機能するスピン ロックへのポインターか、NULL します。 NULL 場合、システムは、割り込みスピン ロックとして機能するスピン ロックを割り当てます。 以外の NULLの場合は、KeInitializeSpinLock でスピン ロックを初期化する必要があります。
ISR を実行する DIRQL を指定します。 ISR が複数の割り込みベクトルを処理する場合、またはドライバーに複数の ISR がある場合、この値は割り込みのセットの最大 IRQL である必要があります。 割り込みの IRQL は、CM_PARTIAL_RESOURCE_DESCRIPTORの u.Interrupt.Level メンバーにある CmResourceTypeInterrupt リソースで渡されます。 それ以外の場合、Irql と SynchronizeIrql の値は同じです。
割り込みが発生したときに、システムがプロセッサの浮動小数点状態を保存するかどうかを指定します。 TRUE 場合、システムは浮動小数点状態を保存します。
割り込みベクトルが共有可能かどうかを指定します。 行ベースの PCI 割り込みは共有可能である必要があります。 メッセージ通知 PCI 割り込みの場合、ドライバー ライターは割り込みを共有可能にするかどうかを選択できますが、既定で共有可能にすることを選択する必要があります。
CM_PARTIAL_RESOURCE_DESCRIPTORの u.Interrupt.Vector メンバーにある CmResourceTypeInterrupt リソースで渡される割り込みベクトルを指定します。
cmResourceTypeInterrupt リソースで渡される DIRQL を、CM_PARTIAL_RESOURCE_DESCRIPTORの u.Interrupt.Level メンバーで指定します。 Windows 8 以降では、ドライバーは、Irql と SynchronizeIrql を PASSIVE_LEVEL に設定し、SpinLock を NULL 設定することで、パッシブ レベルで実行される ISR を登録できます。 詳細については、「Passive-Level 割り込みサービス ルーチン を使用するを参照してください。
割り込みがレベル によってトリガーされる (InterruptMode = LevelSensitive) か、エッジトリガー (InterruptMode = ラッチされた) かを決定する KINTERRUPT_MODE を指定します。 PCI バスからの共有割り込み回線の場合は、LevelSensitive 指定します。 PCI メッセージシグナル割り込みの場合は、ラッチ 指定します。
デバイスの割り込みが発生する可能性があるプロセッサのセットを表す KAFFINITY マスクを指定します。 この値は、CM_PARTIAL_RESOURCE_DESCRIPTORの u.Interrupt.Affinity メンバーにある CmResourceTypeInterrupt リソースに渡されます。
割り込みを配信するプロセッサ グループを識別するグループ番号を指定します。 通常、ドライバーは、IRP_MN_START_DEVICE 要求に含まれる翻訳されたリソースの一部として、そのグループ番号を受け取ります。 Windows 7 以降では、IO_CONNECT_INTERRUPT_PARAMETERS 構造体の Version メンバーが CONNECT_FULLY_SPECIFIED_GROUP に設定されている場合、グループ メンバーが使用されます。 グループ メンバーは、バージョン が CONNECT_FULLY_SPECIFIED に設定されている場合は無視されます。その場合、割り込みの配信のグループ番号は常に 0 になります。
LineBased
Version の値が CONNECT_LINE_BASED の場合 IoConnectInterruptEx によって実行される操作の追加パラメーターを指定します。 詳細については、「CONNECT_LINE_BASED バージョンの IoConnectInterruptEx の使用に関するを参照してください。
デバイスの物理デバイス オブジェクト (PDO) へのポインター。
デバイスの割り込みオブジェクトのセットへのポインターを受け取る場所へのポインター。
デバイスの割り込みの ISR として登録する InterruptService ルーチンへのポインター。
InterruptService ルーチンの ServiceContext パラメーターとして渡される値を指定します。
一連の割り込みの割り込みスピン ロックとして機能するスピン ロックへのポインターか、NULL します。 NULL 場合、システムは、割り込みスピン ロックとして機能するスピン ロックを割り当てます。 以外の NULLの場合は、KeInitializeSpinLock でスピン ロックを初期化する必要があります。
ISR を実行する最小デバイス IRQL (DIRQL) を指定します。 この値は、割り込みのセットの最大 IRQL より大きい場合にのみ使用されます。それ以外の場合、システムは最大 IRQL を使用します。 ドライバーは、ほとんどの場合、SynchronizeIrqlのPASSIVE_LEVELを指定します。 (ドライバーは、ISR が特定の IRQL を超えて実行する必要がある場合にのみ、PASSIVE_LEVEL以外の値を指定する必要があります。Windows 8 以降では、デバイスに割り当てられている一連の回線ベースの割り込みリソースは、IRQL = PASSIVE_LEVEL で実行される ISR を共有できます。 SynchronizeIrql = PASSIVE_LEVELで、この割り込みのセットの最大 IRQL がPASSIVE_LEVEL場合、InterruptService ルーチンがPASSIVE_LEVELで呼び出されます。 詳細については、「Passive-Level 割り込みサービス ルーチン を使用するを参照してください。
割り込みが発生したときに、システムがプロセッサの浮動小数点状態を保存するかどうかを指定します。 TRUE 場合、システムは浮動小数点状態を保存します。 x86 ベースおよび Itanium ベースのプラットフォームの場合、この値は FALSE 設定する必要があります。 浮動小数点および MMX 状態の保存の詳細については、「WDM ドライバー で浮動小数点または MMX を使用するを参照してください。
MessageBased
Version の値が CONNECT_MESSAGE_BASED の場合に、IoConnectInterruptEx によって実行される操作の追加パラメーターを指定します。 詳細については、「CONNECT_MESSAGE_BASED バージョンの IoConnectInterruptExの使用」を参照してください。
デバイスの PDO へのポインター。
接続コンテキストへのポインターを受け取る場所へのポインター。 戻り値 Version の値が CONNECT_LINE_BASED の場合、ルーチンは KINTERRUPT 構造体へのポインターを提供します。 戻り値 Version の値が CONNECT_MESSAGE_BASED の場合、ルーチンは IO_INTERRUPT_MESSAGE_INFO 構造体へのポインターを提供します。
キャストを最小限に抑えるために、ConnectionContext は共用体として定義されます。 ConnectionContext.Generic 使用して、場所を PVOID として扱います。 ConnectionContext.InterruptObject 使用し、ConnectionContext.InterruptMessageTable を使用して、場所をそれぞれ PKINTERRUPT または PIO_INTERRUPT_MESSAGE_INFO 変数として扱います。
IoConnectInterruptEx ルーチンが接続コンテキストへのポインターを書き込む PVOID 変数へのポインター。
IoConnectInterruptEx ルーチンが接続コンテキストへのポインターを書き込むPIO_INTERRUPT_MESSAGE_INFO変数へのポインター。
IoConnectInterruptEx ルーチンが接続コンテキストへのポインターを書き込む PKINTERRUPT 変数へのポインター。
デバイスの割り込みの ISR として登録する InterruptMessageService ルーチンへのポインター。
割り込みの割り込みルーチンの InterruptMessageService または InterruptService ルーチンの ServiceContext パラメーターとして渡す値を指定します。
一連の割り込みの割り込みスピン ロックとして機能するスピン ロックへのポインターか、NULL します。 NULL 場合、システムは、割り込みスピン ロックとして機能するスピン ロックを割り当てます。 以外の NULLの場合は、KeInitializeSpinLock でスピン ロックを初期化する必要があります。
ISR を実行する最小デバイス IRQL (DIRQL) を指定します。 システムでは、割り込みのセットの最大 IRQL より大きい場合にのみ、この値が使用されます。それ以外の場合、システムは最大 IRQL を使用します。 ドライバーは、ほとんどの場合、SynchronizeIrqlのPASSIVE_LEVELを指定します。
割り込みが発生したときに、システムがプロセッサの浮動小数点状態を保存するかどうかを指定します。 TRUE 場合、システムは浮動小数点状態を保存します。
行ベースの割り込みの ISR として使用する InterruptService ルーチンへのポインター。 デバイスにメッセージ通知割り込みがなく、行ベースの割り込みがある場合、システムはこのルーチンを登録して行ベースの割り込みを処理します。
IoConnectInterruptEx ルーチンは、1 つの Parameters パラメーターを受け取ります。このパラメーターは、操作のすべてのパラメーターを含む IO_CONNECT_INTERRUPT_PARAMETERS 構造体を指します。
要件 | 価値 |
---|---|
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IoConnectInterruptEx の