Configuración dinámica de MSI-X
Windows Vista Service Pack 1 (SP1), Windows Server 2008 y sistemas operativos posteriores admiten la modificación dinámica de las propiedades de los mensajes de interrupción MSI-X. (La especificación PCI 3.0 definida MSI-X). El controlador de bus PCI expone la interfaz de GUID_MSIX_TABLE_CONFIG_INTERFACE para permitir que los controladores de los dispositivos PCI modifiquen la configuración de la tabla de interrupciones de hardware del bus.
Los controladores usan la interfaz mediante el envío de una solicitud de IRP_MN_QUERY_INTERFACE al controlador de bus, con el parámetro InterfaceType igual a GUID_MSIX_TABLE_CONFIG_INTERFACE. El controlador de bus proporciona un puntero a una estructura de PCI_MSIX_TABLE_CONFIG_INTERFACE , que proporciona punteros a tres rutinas que modifican la tabla de interrupciones:
SetTableEntry asigna un identificador de mensaje a la entrada de la tabla de hardware.
MaskTableEntry enmascara la interrupción correspondiente a una entrada de tabla de hardware.
UnmaskTableEntry desenmasca la interrupción correspondiente a una entrada de tabla de hardware.
De forma predeterminada, la tabla de interrupciones está configurada para que la primera entrada tenga el identificador de mensaje cero, la segunda entrada tiene el identificador de mensaje uno, etc. Si el número de entradas de tabla supera el número de mensajes, a cada entrada de tabla adicional se le asigna el identificador de mensaje cero. (El identificador del mensaje es el índice de la entrada de la interrupción en el miembro MessageInfo de la estructura IO_INTERRUPT_MESSAGE_INFO que describe las interrupciones señaladas por el mensaje del controlador. La rutina IoConnectInterruptEx proporciona un puntero a esta estructura).