共用方式為


使用插斷資源描述項

隨插即用 (PnP) 管理員會使用兩次傳遞,將中斷訊息指派給裝置。 首先,PnP 管理員會傳送 IRP_MN_FILTER_RESOURCE_REQUIREMENTS 要求給驅動程式,其中包含硬體資源清單,包括想要指派給裝置的中斷訊息。 驅動程式可以修改此清單來變更中斷訊息的數目,以及一些個別訊息設定。 然後,在 PnP 管理員實際指派資源之後,它會傳送 IRP_MN_START_DEVICE 要求,並提供完整的硬體資源清單,包括指派給驅動程式裝置的中斷訊息。

IRP_MN_FILTER_RESOURCE_REQUIREMENTS要求會提供IO_RESOURCE_DESCRIPTOR結構的清單。 如果裝置有 MSI (訊息訊號中斷) 功能結構,如 PCI 2.2 規格中所定義,PnP 管理員會提供單一中斷訊息描述元。 如果裝置具有 PCI 3.0 規格中所定義的 MSI-X 功能結構,則 PnP 管理員會為每個中斷訊息提供一個結構。 中斷訊息描述項的類型為 = CmResourceTypeInterruptFlags = CM_RESOURCE_INTERRUPT_LATCHED |CM_RESOURCE_INTERRUPT_MESSAGE。 驅動程式也可以藉由變更 結構的 u.Interrupt 成員來變更設定,例如中斷親和性。 請注意,使用 MSI 時,中斷全都有相同的同質,而使用 MSI-X 時,它們可能會有不同的同質性。 如需詳細資訊,請參閱 中斷親和性和優先順序

針對 MSI,如 PCI 2.2 中所定義,u.Interrupt.MaximumVectoru.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.MinimumVectoru.Interrupt.MaximumVector 成員都會設定為 CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN。

一旦隨插即用管理員指派裝置的所有硬體資源,包括中斷訊息,就會將IRP_MN_START_DEVICE要求傳送給驅動程式。 此要求會提供兩份 CM_PARTIAL_RESOURCE_DESCRIPTOR 結構清單,分別用於原始和翻譯的資源。 針對中斷訊息,PnP 管理員會為每個配置記憶體位址提供一個結構,其中類型 = 為 CmResourceTypeInterruptFlags = CM_RESOURCE_INTERRUPT_LATCHED |CM_RESOURCE_INTERRUPT_MESSAGE。

請注意,使用 MSI 時,驅動程式只會收到一個中斷資源描述元,因為所有訊息都會共用相同的位址。 u.MessageInterrupt.RawMessageCount成員可用來判斷指派的訊息數目。 使用 MSI-X 時,驅動程式會針對每個中斷訊息接收個別的資源描述項。

在Windows 8中,作業系統不支援每個裝置函式超過 2048 個中斷訊息的資源要求。 在 Windows 7 和 Windows Vista 中,作業系統不支援每個裝置功能超過 910 個中斷訊息的資源要求。 如果設備磁碟機超過此限制,裝置可能無法啟動。 若要讓驅動程式在包含許多邏輯處理器的電腦中運作,驅動程式應該避免每個處理器要求一個以上的中斷。

在系統重新平衡中斷資源期間,PnP 管理員可能會要求驅動程式從資源需求清單中選取一組慣用的替代中斷資源。 不過,PnP 管理員不一定會將驅動程式偏好的資源指派給驅動程式。 因此,驅動程式必須容許從資源需求清單中指派任何一組替代中斷資源,而不會發生失敗。 例如,裝置可能會指派比所要求的驅動程式少的訊息中斷數目。 在最差的情況下,驅動程式必須準備好只以一行為基礎的中斷操作裝置。