amei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2006-11-10
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2965回复:13

共享内存+同步+郁闷

楼主#
更多 发布于:2004-05-21 15:45
   我想在内存中开辟一块连续的约为6M的空间,应用程序与驱动程序共享这块内存,应用程序向内存写数据,驱动程序能把数据完整的读出来。
     我看了一些帖子也问了几个问题,我想应该这样做:应用程序发出请求后,在驱动程序中分配内存,然后将内存地址传给应用程序并等待应用程序向内存写数据,驱动程序不断检查内存发现应用程序写数据后立刻读出,之后释放资源。
    上述过程是不是应该在一个IRP请求中完成?我曾试图在应用程序中发出两个请求分别让驱动程序分配资源和释放资源,但是失败了。
    如果内存的分配核释放必须在一个IRP中完成,那么我应该使用什么样的方法在释放资源以前,通知应用程序向内存写数据呀。
     这些问题都快折磨死我了,希望哪位有类似的代码可以给我学习一下或者有比较完整的文章
deltali
驱动小牛
驱动小牛
  • 注册日期2002-10-25
  • 最后登录2010-07-06
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望23点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-21 17:22
不会阿,2个irp。一个用来创建内存,一个用来分配。没问题阿。
我又来了,生命不息,驱动不止。
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-21 17:49
可以创建一个同名事件来让驱动和应用程序同步。
至于分配和释放内存,可以在不同的IRP中完成。
但是,我不知道开这么大的内存有没有问题,没有试过。

[编辑 -  5/21/04 by  Shentu]
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-23 19:14
当然可以在不同的IRP中进行,只要确保一致性就好了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
shuangsy
驱动牛犊
驱动牛犊
  • 注册日期2004-03-15
  • 最后登录2018-05-26
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-05-24 20:36
我看到过和你相反的程序,它是用DeviceIoControl从驱动程序中申请一片系统内存,然后轮询该内存区域,而驱动程序负责写内容。

应用程序通过一系列的自定义IOCTL代码用调用驱动程序中的函数,
就可以实现分配内存,释放内存,将系统空间映射到用户空间等操作,当然也可以向系统空间中写数据了。(这些操作都是在驱动程序中实现的,然后通过DeviceIoControl来调用)
然后应该还可以用某个控制代码来在驱动程序中设置一个标志位或是自旋锁什么的起同步作用的东西,这样,你在驱动程序中不断地检查此同步变量,一旦该变量有变化,就马上去取数据,不就可以取得应用程序中写的数据了。

只是一种想法,没有试过,不对之处还望指出!
大家好兄弟,讲义气。
以德服人
amei
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2006-11-10
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-25 10:43
shuangsy :
是否能将那个和我相反的程序给我看看
13904111284@vip.163.com

cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-10-12 11:03
能否也给我一份:longnet2000@sina.com.cn
谢谢!
mywork_007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-29
  • 最后登录2007-11-19
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-10-29 16:09
但怎样在driver里对物理内存读写,我试过几种方法 都失败了,系统重起了.
aasa2
驱动中牛
驱动中牛
  • 注册日期2004-04-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分525分
  • 威望339点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-10-30 18:58
我也试过,是比较繁。
技术交流:aasa2@21cn.com QQ群:10863699
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-10-31 11:41
要是能实现驱动主动和应用层联系就好了,哪位高手能讲一讲呢?比如有没有驱动主动向应用层发信号这样的方法呢?
qwdrv
驱动大牛
驱动大牛
  • 注册日期2004-03-19
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-11-01 09:49
wdm的书上有的,看看去吧
vipfengxiao
驱动牛犊
驱动牛犊
  • 注册日期2009-12-29
  • 最后登录2011-12-21
  • 粉丝1
  • 关注0
  • 积分79分
  • 威望681点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2010-03-13 10:19
引用第9楼cicada于2004-10-31 11:41发表的  :
要是能实现驱动主动和应用层联系就好了,哪位高手能讲一讲呢?比如有没有驱动主动向应用层发信号这样的方法呢?




可以的 应用程序线程监听 发event给驱动  驱动将应用层发来的event转为内核event这样就可以主动给应用层发了
taianmonkey
驱动牛犊
驱动牛犊
  • 注册日期2006-03-23
  • 最后登录2014-08-18
  • 粉丝0
  • 关注0
  • 积分163分
  • 威望602点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2010-03-18 22:37
在网上搜搜PRMonitor的源码!
abc110
驱动牛犊
驱动牛犊
  • 注册日期2010-04-22
  • 最后登录2010-04-23
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2010-04-22 16:13
PRMonitor用的是替换函数的方法啊,还是用事件好吧
游客

返回顶部