在Windows中访问英特尔CPU I/O寄存器的简便方法

Easy way to access Intel CPU I/O registers in Windows

本文关键字:寄存器 方法 Windows 访问 英特尔 CPU      更新时间:2023-10-16

我使用需要256字节TLP有效负载大小的PCIe板。我有支持它的CPU(酷睿i7-3930K)和英特尔主板DX79SR,它在BIOS中不提供TLP有效负载大小设置。默认情况下,最大TLP负载为128字节,我需要将其更改为256字节,而不需要BIOS。我发现PCIUtils软件可以在Windows中显示这个值,但它是一个多用途的便携式软件,太复杂了,找不到我需要的东西。

英特尔文档描述了我需要在CPU I/O寄存器中设置的值,还有另一个文档说I/O位置是C8Fh和CFCh。

这就是我被卡住的地方,如果我想设置这些寄存器,我不知道从哪里开始。我是一名经验丰富的Windows S/W开发人员,但我从未与驱动程序打过交道。我确实有这个PCIe板驱动程序的源代码,我可以修改、构建和运行,但我不知道如何将数据写入英特尔CPU的I/O寄存器。我发现_outp()函数在用户模式下不起作用。

请告诉我从哪里开始,从可执行文件(更容易)或驱动程序开始。如果我没有弄错的话,我想我所需要做的就是从I/O端口C8Fh和CFCh读/写。它现在是Windows XP 32位,Win7 x64将更高版本,Visual Studio 2010 C++或WDK。

基本上,您要做的就是分别使用outinx86 asm指令。问题是,在受保护模式下,这两条指令被锁定,因此您无法在userland模式下使用它们。

最好的起点是获得WDK(windows驱动程序套件)并查看它们的示例(您只需要一个软件驱动程序)。如果PCI板的驱动程序是内核模式的驱动程序,尽管你可以在DriverEntry函数中添加调用并完成它

如果这不是一个选项,您将不得不构建自己的软件内核模式驱动程序——以下是一些简单的示例代码,其中包含如何构建和部署驱动程序的说明。实际的代码应该是琐碎的,因为您只想在内核模式下执行一些指令。