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