WDF驱动中访问 PCI 设备配置空间

Windows XP 和 Windows Server 2003 及更高版本的操作系统可以独占控制 PCI 本地总线 规范定义的配置空间标头以及功能链接列表中的所有功能。 驱动程序不得尝试修改这些寄存器。

但是,驱动程序可以使用 IRP _ MN _ 写入 _ 配置请求或总线接口标准的 SetBusData 方法, _ 将不属于该标头的配置空间写入到供应商定义的功能列表 _ 。 驱动程序还可以使用 IRP _ MN _ read _ CONFIG 请求或总线接口标准的 GetBusData 方法读取 _ 设备的功能 _ 。 若要使用 IRP _ MN _ READ _ config 或 IRP _ MN _ WRITE _ CONFIG,驱动程序必须在被动 _ 级别运行。 有关驱动程序可以查询的功能列表和相应结构,请参阅 PCI 结构 部分。在WDF程序可以通过WdfFdoQueryForInterface函数得到BUS_INTERFACE_STANDARD。

驱动程序可以从扩展 PCI 设备配置空间读取 (也就是说,使用 IRP _ MN _ read _ CONFIG 请求或总线接口标准的 GetBusData 方法时 _ ,超过256字节的配置数据) _ 。 同样,驱动程序可以使用 IRP _ MN _ 写入 _ 配置请求或总线接口标准的 SetBusData 方法, _ 写入扩展 PCI 设备配置空间 _ 。 如果设备没有扩展配置空间或平台未定义设备上扩展配置空间的路径,则读取请求将返回0xFFFF 并且写入请求将不起作用。 若要确定操作是否成功,驱动程序可以检查读取或写入的字节数。

PCI Express 和 PCI-X 模式2支持大于256个字节的扩展 PCI 设备配置空间。 驱动程序可以读取和写入此配置空间,但仅支持相应的硬件和 BIOS 支持。 在 ACPI BIOS 中,根总线必须具有 PNP0A08 或 PNP0A03 的 PNP ID。 对于 PNP ID 为 PNP0A03 的根总线, _ 具有函数4的 DSM 方法应指示当前模式为 pci-x 模式2。所有桥和设备都应为 PCI express,或在 PCI-X 模式2中运行。

此外,系统应支持内存映射配置空间访问。 这是通过在系统 BIOS/固件中定义 MCFG 表。 Windows Vista 和 Windows Server 2008 及更高版本的操作系统会自动支持内存映射配置空间访问。

上一篇:linux设置自动更换壁纸


下一篇:Windows内核开发-4-内核编程基础