我有DMA驱动程序的源代码,我开发了一个应用程序来发送数据包给这个驱动程序。
问题是内核崩溃总是存在,因为错误的指针"内存地址"分享给司机。
问题是:如何向驱动程序发送指针并让驱动程序在应用程序看到时查看我的内存。
我知道它可能是将虚拟内存映射到物理内存,但我仍然不确定确切的问题或如何解决!
提示:驱动程序是系统文件和信息文件,因此我无法在其中进行调试。
我的平台为Windows 7
,以下是我在我的应用中的代码中尝试的内容:
DeviceIoControl(hDMADevice, IOCode, &TC, sizeof(TestCmd), NULL, 0, &bytes, &os))
其中TC是具有我的地址的结构。
在 DMADevice 中,windows框架将调用一个函数" EvtIoControl"它将获取此地址并读取其数据。
Mydata = TC.mydata;
答案 0 :(得分:0)
这是不可能的。可以反过来 - 32位应用程序和64位驱动程序。“64位应用程序,驱动程序是32位”
在这种情况下需要了解32和64的结构布局不同(因为不同的PVOID大小 - 4或8字节)
这是解释为什么错误的指针“内存地址”
您需要使用IoIs32bitProcess
功能 - 并阅读Extended Example: Using IoIs32bitProcess