libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1198回复:4

在用DEVICEIOCTL的同步I/O方式中,数据有可能重复吗?

楼主#
更多 发布于:2003-08-20 08:43
应用程序和驱动程序采用同步I/O的方式进行通信,采用METHOD_IN_DIRECT方式,应用层把数据传给驱动层,驱动里面把这些数据写给端口,按道理说,应当是应用层的里定义的输出缓冲区被系统锁定,构成一个MDL后,传给了驱动,驱动开始处理这块内存里的数据,这时候应用层就不能同时操作这块内存了,应用程序也不能往下执行,等待驱动返回状态成功的时候才往下执行。我现在的问题是:驱动层接收到应用传来的数据写往端口的时候发现两次发生重复,说明在驱动写端口的同时,应用也在操作这块内存,所以后一次来的数据把前一次来的数据给覆盖了。有没有这种可能性?还是根本就不存在覆盖的可能性?

最新喜欢:

mapoflmapofl
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-08-20 10:59
用户被禁言,该主题自动屏蔽!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-20 11:35
可能不会等,具体看你的程序。
可以通过同步解决,函数本身就有同步。


函数本身就有同步,是什么意思?
请大虾指点!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-20 17:18
还是这个问题,经过测量,发现应用程序每300ms发一次IRP给驱动,每次MDL描述的内存中有12KB的数据,在分发例程里,驱动把数据写给端口,写端口占用了20ms, 这样可以算出ISA的数据传输速率是600KB/S。但是驱动写给端口的两次12KB的之间的时间间隔是600ms怎么会有这么长的时间???
哪位大虾给分析分析!
急切!,
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-21 20:54
给分了!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
游客

返回顶部