阅读:1463回复:4
关于重叠IO的问题
请各位大侠出手相救!
兄弟做了一个PCI的数据采集卡,想做到如下操作: 首先下发1#IRP,在处理过程中打开设备中断通知设备进行数据采集,异步返回;然后下发2#IRP,读取一些随时改变的状态寄存器信息,立即返回,在应用程序中作相应的准备工作;然后进入Waitforsingleobject等待中断触发后完成1#IRP,程序继续执行。 我试了几次均不成功。可是机械工业出版社的Windows2000驱动程序开发大全第一卷中P217中明确指出‘内核模式驱动程序不必按照I/O请求被送往I/O管理的顺序来处理它们’。 实在不知该如何实现,可老板逼的很急,望大侠们出手相救! |
|
沙发#
发布于:2003-08-13 21:03
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2003-08-14 15:41
谢谢斑竹。
不过偶还有些不清楚: 1 您指的栈是哪个栈?或者是系统队列(驱动程序队列)? 2 在本版的“驱动程序如何发消息给应用程序? ”中Dragon2008大侠在上面帖了2段代码,是采用同步传输方式调用驱动程序,同时给驱动程序传递了一个Event句柄,然后在应用层一个线程中等待Event事件产生。偶使用SoftIce进行调试,在DeviceIoControl退出时SoftIce提示出错:Break due to UnhandledException:NTSTATUS STATUS_ACCESS_VIOLATION。我试了好几次,不知道是怎么回事就是无法通过。如果这个可以实现的话,我的问题也能使用这种办法解决。 请斑竹指点。 |
|
地板#
发布于:2003-08-14 15:47
你如果不下#2 IRP,#1会不会回来?
Waitforsingleobject返回什么?Timeout还是别的? |
|
|
地下室#
发布于:2003-08-15 15:46
不下2#IRP,1#IRP通过中断触发并且在Dpc中完成返回没有问题。
Waitforsingleobject等待的是第一个IRP下发时作为参数传递给deviceiocontrol的overlapped中的event。是infinite等待。 |
|