Dynamically Configuring MSI-X
Windows Vista Service Pack 1 (SP1), Windows Server 2008, and later operating systems support dynamically modifying the properties of MSI-X interrupt messages. (The PCI 3.0 specification defined MSI-X.) The PCI bus driver exposes the GUID_MSIX_TABLE_CONFIG_INTERFACE interface to allow drivers for PCI devices to modify the settings in the bus hardware interrupt table.
Drivers use the interface by sending an IRP_MN_QUERY_INTERFACE request to the bus driver, with the InterfaceType parameter equal to GUID_MSIX_TABLE_CONFIG_INTERFACE. The bus driver supplies a pointer to a PCI_MSIX_TABLE_CONFIG_INTERFACE structure, which supplies pointers to three routines that modify the interrupt table:
SetTableEntry assigns a message ID to the hardware table entry.
MaskTableEntry masks the interrupt corresponding to a hardware table entry.
UnmaskTableEntry unmasks the interrupt corresponding to a hardware table entry.
By default, the interrupt table is configured so that the first entry has message ID zero, the second entry has message ID one, and so on. If the number of table entries exceeds the number of messages, each additional table entry is assigned message ID zero. (The message ID is the index for the interrupt's entry in the MessageInfo member of the IO_INTERRUPT_MESSAGE_INFO structure that describes the driver's message-signaled interrupts. The IoConnectInterruptEx routine supplies a pointer to this structure.)