什么是访问内存映射寄存器的正确方法?

时间:2018-11-06 13:34:51

标签: c operating-system kernel driver

我是开发设备驱动程序的新手,但是开始后不久就遇到了麻烦。

我正在制作 Intel高清晰度音频控制器驱动程序,我检查了规范,认为有必要访问内存映射寄存器。

我使用 devmgmt.msc RWEverything 找到了他们的地址,它们的起始地址为0xF7FF8000

当我写DriverEntry时,我直接访问该基址(例如(unsigned char*)0xf7ff8000),并使用索引和偏移量访问特定的寄存器,但是当我启动驱动程序时, BSOD 发生在我从其中一个寄存器读取值的点(它是CorbSize寄存器,位于偏移量0x4e上)

BSOD停止码为0x00000050, "PAGE_FAULT_IN_NONPAGED_AREA"。 kd告诉我f7ff8000已释放(或损坏)池,并且分配大小@f7ff8000不好,太大了……

这些错误代码是否表示地址0xF7FF8000没有可用的数据空间? 但是我使用 RWEverything 检查了0xF7FF8000上的内容, 并且该空间上的值不断变化,即使kd上的db 0xf7ff8000命令向我显示了仅??填充的内存空间...

我真的很想知道问题是什么,以及访问其内存映射寄存器的正确方法是什么。

对不起,我的英语水平很差:'(

谢谢!

0 个答案:

没有答案