即插即用(PnP)管理器會經過兩次處理程序將中斷訊息指派給裝置。 首先,PnP 管理員會傳送 IRP_MN_FILTER_RESOURCE_REQUIREMENTS 要求給驅動程式,其中包含硬體資源清單,包括中斷訊息,其想要指派給裝置。 驅動程式可以修改此清單來變更中斷訊息的數目,以及一些個別訊息設定。 然後,在 PnP 管理員實際指派資源之後,它會傳送 IRP_MN_START_DEVICE 要求,並提供指派給驅動程式裝置的硬體資源完整清單,包括中斷訊息。
IRP_MN_FILTER_RESOURCE_REQUIREMENTS要求會提供IO_RESOURCE_DESCRIPTOR結構的清單。 如果裝置具有PCI 2.2規格中所定義的MSI(訊息訊號中斷)功能結構,PnP 管理員會提供單一中斷訊息描述元。 如果裝置具有PCI 3.0規格中所定義的 MSI-X 功能結構,PnP 管理員會為每個中斷訊息提供一個結構。 中斷訊息描述項具有 Type = CmResourceTypeInterrupt 和 Flags = CM_RESOURCE_INTERRUPT_LATCHED | CM_RESOURCE_INTERRUPT_MESSAGE。 驅動程式也可以通過更改結構中u.Interrupt成員的設定來調整中斷親和性等相關設定。 請注意,使用 MSI 時,中斷都會有相同的中斷親和性,而使用 MSI-X 時,它們可能會有不同的中斷親和性。 如需詳細資訊,請參閱 中斷同構型和優先順序。
針對 MSI,如 PCI 2.2 中所定義,u.Interrupt.MaximumVector - u.Interrupt.MinimumVector + 1,是配置給裝置的中斷訊息數目。 驅動程式可以修改 u.Interrupt.MinimumVector 來變更中斷訊息數目。 針對 MSI 中斷訊息, u.Interrupt.MaximumVector 一律 CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN。 若要配置 MessageCount 中斷訊息,請將 u.Interrupt.MinimumVector 設定為等於 CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN - MessageCount + 1。
針對 MSI-X,如 PCI 3.0 中所定義,驅動程式可以藉由新增或移除清單中的項目來變更配置的中斷訊息數目。 請注意,以這種方式新增的中斷訊息資源不得後續移除,以回應 IRP_MN_START_DEVICE 要求。 若為 MSI-X,PnP 管理員會為每個訊息中斷提供一個描述元,而且此描述元的 u.Interrupt.MinimumVector 和 u.Interrupt.MaximumVector 成員都設定為 CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN。
一旦隨插即用管理員指派裝置的所有硬體資源,包括中斷訊息,就會將 IRP_MN_START_DEVICE 要求傳送給驅動程式。 此要求會提供兩份 CM_PARTIAL_RESOURCE_DESCRIPTOR 結構清單,每個清單用於原始和翻譯的資源。 針對中斷訊息,PnP 管理員會為每個配置記憶體位址提供一個結構,且 類型 = 為 CmResourceTypeInterrupt 和 Flags = CM_RESOURCE_INTERRUPT_LATCHED |CM_RESOURCE_INTERRUPT_MESSAGE。
請注意,使用 MSI 時,驅動程式只會收到一個中斷資源描述元,因為所有訊息都會共用相同的位址。 u.MessageInterrupt.Raw 的 MessageCount 成員可用來判斷指派的訊息數目。 使用 MSI-X 時,驅動程式會針對每個中斷訊息接收個別的資源描述元。
在 Windows 8 中,作業系統不支援對於每個裝置功能超過 2048 個中斷訊息的資源要求。 在 Windows 7 和 Windows Vista 中,作業系統不支援每個裝置功能超過 910 個中斷訊息的資源要求。 如果裝置驅動程式超過此限制,裝置可能無法啟動。 若要讓驅動程式在包含許多邏輯處理器的計算機中運作,驅動程式應該避免要求每個處理器有一個以上的中斷。
在系統重新平衡中斷資源期間,PnP 管理員可能會要求驅動程序從資源需求清單中選取一組慣用的替代中斷資源。 不過,PnP 管理員不一定會將驅動程式偏好的資源指派給驅動程式。 因此,驅動程式必須容許從資源需求清單中指派任何一組替代中斷資源,而不會失敗。 例如,裝置被指派的訊息中斷數目可能會比驅動程式所要求的少。 在最壞的情況下,驅動程式必須準備好僅使用一個中斷線來操作裝置。