阅读:3102回复:13
共享内存+同步+郁闷
我想在内存中开辟一块连续的约为6M的空间,应用程序与驱动程序共享这块内存,应用程序向内存写数据,驱动程序能把数据完整的读出来。
我看了一些帖子也问了几个问题,我想应该这样做:应用程序发出请求后,在驱动程序中分配内存,然后将内存地址传给应用程序并等待应用程序向内存写数据,驱动程序不断检查内存发现应用程序写数据后立刻读出,之后释放资源。 上述过程是不是应该在一个IRP请求中完成?我曾试图在应用程序中发出两个请求分别让驱动程序分配资源和释放资源,但是失败了。 如果内存的分配核释放必须在一个IRP中完成,那么我应该使用什么样的方法在释放资源以前,通知应用程序向内存写数据呀。 这些问题都快折磨死我了,希望哪位有类似的代码可以给我学习一下或者有比较完整的文章 |
|
沙发#
发布于:2004-05-21 17:22
不会阿,2个irp。一个用来创建内存,一个用来分配。没问题阿。
|
|
|
板凳#
发布于:2004-05-21 17:49
可以创建一个同名事件来让驱动和应用程序同步。
至于分配和释放内存,可以在不同的IRP中完成。 但是,我不知道开这么大的内存有没有问题,没有试过。 [编辑 - 5/21/04 by Shentu] |
|
地板#
发布于:2004-05-23 19:14
当然可以在不同的IRP中进行,只要确保一致性就好了
|
|
|
地下室#
发布于:2004-05-24 20:36
我看到过和你相反的程序,它是用DeviceIoControl从驱动程序中申请一片系统内存,然后轮询该内存区域,而驱动程序负责写内容。
应用程序通过一系列的自定义IOCTL代码用调用驱动程序中的函数, 就可以实现分配内存,释放内存,将系统空间映射到用户空间等操作,当然也可以向系统空间中写数据了。(这些操作都是在驱动程序中实现的,然后通过DeviceIoControl来调用) 然后应该还可以用某个控制代码来在驱动程序中设置一个标志位或是自旋锁什么的起同步作用的东西,这样,你在驱动程序中不断地检查此同步变量,一旦该变量有变化,就马上去取数据,不就可以取得应用程序中写的数据了。 只是一种想法,没有试过,不对之处还望指出! 大家好兄弟,讲义气。 |
|
|
5楼#
发布于:2004-05-25 10:43
shuangsy :
是否能将那个和我相反的程序给我看看 13904111284@vip.163.com |
|
6楼#
发布于:2004-10-12 11:03
能否也给我一份:longnet2000@sina.com.cn
谢谢! |
|
7楼#
发布于:2004-10-29 16:09
但怎样在driver里对物理内存读写,我试过几种方法 都失败了,系统重起了.
|
|
8楼#
发布于:2004-10-30 18:58
我也试过,是比较繁。
|
|
|
9楼#
发布于:2004-10-31 11:41
要是能实现驱动主动和应用层联系就好了,哪位高手能讲一讲呢?比如有没有驱动主动向应用层发信号这样的方法呢?
|
|
10楼#
发布于:2004-11-01 09:49
wdm的书上有的,看看去吧
|
|
11楼#
发布于:2010-03-13 10:19
|
|
12楼#
发布于:2010-03-18 22:37
在网上搜搜PRMonitor的源码!
|
|
13楼#
发布于:2010-04-22 16:13
PRMonitor用的是替换函数的方法啊,还是用事件好吧
|
|