阅读:1233回复:4
在用DEVICEIOCTL的同步I/O方式中,数据有可能重复吗?
应用程序和驱动程序采用同步I/O的方式进行通信,采用METHOD_IN_DIRECT方式,应用层把数据传给驱动层,驱动里面把这些数据写给端口,按道理说,应当是应用层的里定义的输出缓冲区被系统锁定,构成一个MDL后,传给了驱动,驱动开始处理这块内存里的数据,这时候应用层就不能同时操作这块内存了,应用程序也不能往下执行,等待驱动返回状态成功的时候才往下执行。我现在的问题是:驱动层接收到应用传来的数据写往端口的时候发现两次发生重复,说明在驱动写端口的同时,应用也在操作这块内存,所以后一次来的数据把前一次来的数据给覆盖了。有没有这种可能性?还是根本就不存在覆盖的可能性?
|
|
最新喜欢:mapofl
|
沙发#
发布于:2003-08-20 10:59
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2003-08-20 11:35
可能不会等,具体看你的程序。 函数本身就有同步,是什么意思? 请大虾指点! |
|
|
地板#
发布于:2003-08-20 17:18
还是这个问题,经过测量,发现应用程序每300ms发一次IRP给驱动,每次MDL描述的内存中有12KB的数据,在分发例程里,驱动把数据写给端口,写端口占用了20ms, 这样可以算出ISA的数据传输速率是600KB/S。但是驱动写给端口的两次12KB的之间的时间间隔是600ms怎么会有这么长的时间???
哪位大虾给分析分析! 急切!, |
|
|
地下室#
发布于:2003-08-21 20:54
给分了!
|
|
|