MSI-X の動的な構成
Windows Vista Service Pack 1 (SP1)、Windows Server 2008 以降のオペレーティング システムでは、MSI-X 割り込みメッセージのプロパティを動的に変更できます (PCI 3.0 仕様では MSI-X が定義されています)。PCI バス ドライバーでは、GUID_MSIX_TABLE_CONFIG_INTERFACE インターフェイスが公開されており、PCI デバイスのドライバーがバス ハードウェア割り込みテーブルの設定を変更できます
ドライバーは、IRP_MN_QUERY_INTERFACE 要求をバス ドライバーに送信し、InterfaceType パラメーターが GUID_MSIX_TABLE_CONFIG_INTERFACE と等しいインターフェイスを使用します。 バス ドライバーは、割り込みテーブルを変更する 3 つのルーチンへのポインターが入った PCI_MSIX_TABLE_CONFIG_INTERFACE 構造体へのポインターを提供します。
SetTableEntry は、ハードウェア テーブル エントリにメッセージ ID を割り当てます。
MaskTableEntry は、ハードウェア テーブル エントリに対応する割り込みをマスクします。
UnmaskTableEntry は、ハードウェア テーブル エントリに対応する割り込みをマスク解除します。
既定では、割り込みテーブルは、最初のエントリにメッセージ ID 0、2 番目のエントリにメッセージ ID 1 が設定されます。 テーブル エントリの数がメッセージ数を超える場合は、追加のテーブル エントリにメッセージ ID 0 が割り当てられます (メッセージ ID は、ドライバーのメッセージ シグナル割り込みを記述する IO_INTERRUPT_MESSAGE_INFO 構造体の MessageInfo メンバー内にある、割り込みのエントリのインデックスです。IoConnectInterruptEx ルーチンは、この構造体へのポインターを提供します)。