阅读:3625回复:12
为什么没有数据时ReadFile函数总是挂起不退出,请各位高手帮帮忙。
为什么没有数据时ReadFile函数总是挂起不退出,请各位高手帮帮忙。
|
|
驱动老牛
![]() |
沙发#
发布于:2005-05-31 10:33
为什么没有数据时ReadFile函数总是挂起不退出,请各位高手帮帮忙。 可以用重叠IO |
|
板凳#
发布于:2005-05-31 23:17
楼上的兄弟,是把驱动的读写用同一IO吗?
能不能说具体点,谢谢! |
|
地板#
发布于:2005-06-01 09:05
是用overlaped方式吗?好象我的驱动不支持overlaped方式,用overlaped方式ReadFile总是把PC搞死,不知道如何去修改driver。
|
|
地下室#
发布于:2005-06-01 18:39
是用overlaped方式吗?好象我的驱动不支持overlaped方式,用overlaped方式ReadFile总是把PC搞死,不知道如何去修改driver。 把那段代码贴上来看看吧,说不定能找到问题,另外你确定是死在readfile吗? |
|
|
5楼#
发布于:2005-06-02 14:59
API代码
os.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); if(os.hEvent==NULL) { EB_Printf(TEXT(\"[ERROR:DoRxTx os.hEvent]\\n\")); } while((hRead = open_file(inPipe)) == INVALID_HANDLE_VALUE); while(1) { memset(rxBuf, 0, 65); ReadFile(hRead,rxBuf,64,&nBytesRead,&os); EB_Printf(\"%s\", rxBuf); } 循环接收数据,直接运行时会使PC复位重起,如果ReadFile之后加上1S的delay则不会使PC复位,但中间会丢失数据包。 另:请问各位高手,driver中怎样使用重叠IO?没有看到相关的编程资料,哪位有这方面的资料,请提供,小弟无胜感激。 |
|
6楼#
发布于:2005-06-02 15:30
重叠IO需要你的API调用ReadFile的时候置上异步方式的标志,然后你的驱动也要支持,具体参考Walter Oney的书,讲的很详细的.
|
|
7楼#
发布于:2005-06-03 15:16
楼上的这位兄弟,太感谢了,能提供一份这样的资料吗?
|
|
8楼#
发布于:2005-06-03 16:47
驱动应该改动哪些方面才支持异步方式,迷糊啊。
我的驱动不停的ReadFile之后,会出现死机蓝屏的现象,且提示: *** STOP:0x00000001(0x00000015,0x00000002,0x00000000,0xF5B0AAC4) DRIVER_IRQL_NOT_LESS_OR_RQUAL *** Address F5B0AAC4 base at F5B08000, DateStamp 37fa6376 - Uhcd.sys Begining dump of physical Memory |
|
9楼#
发布于:2005-06-03 17:12
调用ReadFile(hRead,rxBuf,65,&nBytesRead,&os);之后rxBuf中的数据正确,而nBytesRead居然是0,很是郁闷。
|
|
10楼#
发布于:2005-06-10 17:20
没有兄弟帮忙探讨一下吗?
|
|
驱动老牛
![]() |
11楼#
发布于:2005-06-10 18:13
驱动中处理这个OV是很容易的,把IRP立即返回一个错误(重叠IO进行中)
然后放到后面或系统线程中再处理,处理完后RESET一下这个事件就可以了。 |
|
12楼#
发布于:2005-07-21 16:33
That may be depending on your driver.ReadFile won't be returned if your driver always wait event signaled,even if you use overlapped IO operation.
|
|