阅读:2232回复:3
CE6 应用程序与驱动内嵌指针传递 在驱动线程中导致异常
CE6的IIC驱动中的一个问题:
在应用程序中通过DeviceIoControl传指针给驱动程序,其中包含内嵌指针,驱动程序和驱动程序线程(加载时开启)通过一个全局变量进行参数的传递,但是在驱动程序线程的操作过程中有的时候通过这个全局变量读到的数据会变掉(难道虚拟地址到物理地址的映射改变?),而且有的时候会引起异常, 查了一些资料,说是这种情况属于异步访问,要用到CeOpenCallerBuffer和CeAllocAsynchronousBuffer来处理内嵌指针,但是不知道怎么处理,也不清楚为什么,哪位兄弟可以指点一下? |
|
沙发#
发布于:2009-06-10 19:33
ce6还没有怎么研究过,不过你这种我感觉是指针地址的问题。应用程序地址空间的指针是不能直接给驱动层使用的。其实说到底就是地址空间的问题了。
|
|
板凳#
发布于:2009-06-12 16:35
我觉得应该也是指针的问题,但是需要怎么改呢?楼上的兄弟可以提个方向吗?
|
|
地板#
发布于:2009-06-15 14:10
已经解决,希望对遇到此问题的兄弟有所帮助:
在驱动的IoControl函数中对内嵌指针加入CeOpenCallerBuffer和CeAllocAsynchronousBuffer对应用程序传下来的BUFFER进行重新映射,对一般指针(不是内嵌指针),操作系统会自动进行映射,不需要在驱动中再加处理。另外,微软提供了MarshalledBuffer_t类,用起来更方便一些,呵呵 |
|