阅读:1156回复:3
TimeOut = 死亡兰屏?!!!!! help!
我调用api ReadFile 从设备读取数据,如果 device没有数据,应该是返回读到的字节数为0,但是现在device buffer中没有数据时,我的 ReadFile() 一直没有返回,一直在等待.
我该怎样做才能中止读的动作,返回0byte. NTSTATUS status = IoCallDriver( dx->NextStackDevice, Irp); if (status == STATUS_PENDING) { status = KeWaitForSingleObject( &event, Suspended, KernelMode, FALSE, NULL); status = IoStatus.Status; } 但当我在KeWaitForSingleObject中的最后一个参数上使用TimeOut 参数后,就会死亡兰屏? 怎么解决???? [编辑 - 4/1/04 by zzq191] [编辑 - 4/1/04 by zzq191] |
|
|
沙发#
发布于:2004-04-01 17:14
首先你要用异步模式的,然后在应用程序里readfile的最后一个参数用overlap标志,发送后使用GetOverlappedResult函数查询irp完成情况,如果一定时间内不返回就用函数CancelIo()取消请求就行了。
|
|
板凳#
发布于:2004-04-02 07:30
老大,他这个程序可不是应用层的程序呀
|
|
地板#
发布于:2004-04-02 08:40
驱动程序里是不允许像他那样设置超时的!除非再建立一个event。
|
|