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

use*_*691 5 c++ windows io intel

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

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

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

请指出我从哪里开始,可执行(更容易)或驱动程序.我认为我所需要做的就是从I/O端口C8Fh和CFCh读取/写入,如果我没有弄错的话.它现在是Windows XP 32位,Win7 x64将会更晚,Visual Studio 2010 C++或WDK.

Voo*_*Voo 2

基本上你要做的就是out分别使用inx86 asm 指令。问题是,在保护模式下,这两个指令被锁定,因此您无法在用户态模式下使用它们。

最好的起点是获取 WDK(Windows 驱动程序套件)并查看其示例(您只需要一个软件驱动程序)。如果 PCI 板的驱动程序是内核模式驱动程序,那么您只需在函数中添加调用即可DriverEntry完成它。

如果这不是一种选择,您将必须构建自己的软件内核模式驱动程序 -这里有一些简单的示例代码,其中包含有关如何构建和部署驱动程序的说明。实际的代码应该很简单,因为您只想在内核模式下执行一些指令。