Configurando dinamicamente o MSI-X
Os sistemas operacionais Windows Vista Service Pack 1 (SP1), Windows Server 2008 e posteriores dão suporte à modificação dinâmica das propriedades das mensagens de interrupção do MSI-X. (A especificação PCI 3.0 definiu MSI-X.) O driver de barramento PCI expõe a interface de GUID_MSIX_TABLE_CONFIG_INTERFACE para permitir que os drivers para dispositivos PCI modifiquem as configurações na tabela de interrupção de hardware do barramento.
Os drivers usam a interface enviando uma solicitação IRP_MN_QUERY_INTERFACE para o driver de barramento, com o parâmetro InterfaceType igual a GUID_MSIX_TABLE_CONFIG_INTERFACE. O motorista do ônibus fornece um ponteiro para uma estrutura PCI_MSIX_TABLE_CONFIG_INTERFACE , que fornece ponteiros para três rotinas que modificam a tabela de interrupção:
SetTableEntry atribui uma ID de mensagem à entrada da tabela de hardware.
MaskTableEntry mascara a interrupção correspondente a uma entrada de tabela de hardware.
UnmaskTableEntry desmascara a interrupção correspondente a uma entrada de tabela de hardware.
Por padrão, a tabela de interrupção é configurada para que a primeira entrada tenha a ID de mensagem zero, a segunda entrada tenha uma ID de mensagem e assim por diante. Se o número de entradas de tabela exceder o número de mensagens, cada entrada de tabela adicional será atribuída à ID de mensagem zero. (A ID da mensagem é o índice para a entrada da interrupção no membro MessageInfo da estrutura IO_INTERRUPT_MESSAGE_INFO que descreve as interrupções sinalizadas por mensagem do driver. A rotina IoConnectInterruptEx fornece um ponteiro para essa estrutura.)