当驱动程序的 EvtDeviceRemoveAddedResources 或 EvtDevicePrepareHardware 回调函数收到资源列表时,它将接收列表的两个版本。 一个版本表示设备 的原始资源,另一个版本表示设备的 已翻译资源。 这两个版本都以相同的顺序表示同一组硬件资源。
原始资源是由与设备连接到的总线相关的地址标识的资源。 通常,程序设备的驱动程序向设备提供这些地址。
翻译的资源是由驱动程序用来访问资源的系统物理地址标识的资源。
PCI 总线设备的驱动程序接收按设备 基址寄存器 (BAR)中显示的顺序列出的资源。 但是,列表中可能交错了其他资源描述符,因而 BAR 中索引 X 处的资源可能与资源列表中同一索引位置的资源不匹配。
有关原始资源和已翻译的资源的详细信息,请参阅 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的成员说明。
如果设备的已翻译资源列表包含CM_PARTIAL_RESOURCE_DESCRIPTOR结构的 Type 成员设置为 CmResourceTypeMemory 的资源,则访问该资源的每个驱动程序都必须执行以下作:
- 驱动程序的 EvtDevicePrepareHardware 回调函数必须调用 MmMapIoSpace ,将系统物理地址映射到系统虚拟地址。
- 驱动程序的 EvtDeviceReleaseHardware 回调函数必须调用 MmUnmapIoSpace 来取消映射地址。
有关映射总线相对地址的详细信息,请参阅 将 Bus-Relative 地址映射到虚拟地址。