我是开发设备驱动程序的新手,但是开始后不久就遇到了麻烦。
我正在制作 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命令向我显示了仅??填充的内存空间...
我真的很想知道问题是什么,以及访问其内存映射寄存器的正确方法是什么。
对不起,我的英语水平很差:'(
谢谢!