阅读:3830回复:6
请教各位大牛,ZwReadFile只能同步不能异步读文件的问题
请教各位大牛,用ZwReadFile()读文件的时候,只能同步读,不能异步读,即,ZwReadFile()总是返回STATUS_SUCCESS, 不返回STATUS_PENDING, 也就是说,总是等全部数据读完才返回,请问这是什么原因? ( DDK版本7600.16385.1,Win7/2008下调试)
以下为文件打开代码: NTSTATUS nRet = ZwCreateFile( &g_hFile, FILE_READ_DATA, &aObjectAttr, &aIoStatus, 0, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ, FILE_OPEN_IF, 0,//FILE_SYNCHRONOUS_IO_NONALERT, 0, 0 ); 或 NTSTATUS nRet = ZwOpenFile( &g_hFile, FILE_READ_DATA, &aObjectAttr, &aIoStatus, FILE_SHARE_READ, 0); 以下为读文件代码(都是同步读,死也不异步): nRet = ZwReadFile( g_hFile, g_EventHandle, Read_APC_ROUTINE, 0, &aIoStatus, pBuffer, 10*1024*1024, &offset, 0 ); 或 nRet = ZwReadFile( g_hFile, 0, Read_APC_ROUTINE, 0, &aIoStatus, pBuffer, 10*1024*1024, &offset, 0 ); 或 nRet = ZwReadFile( g_hFile, 0, 0, 0, &aIoStatus, pBuffer, 10*1024*1024, &offset, 0 ); |
|
沙发#
发布于:2011-02-21 12:44
请GOGOLE FILE_SYNCHRONOUS_IO_ALERT
|
|
板凳#
发布于:2011-02-21 22:27
回 1楼(thenshesaid) 的帖子
不管是FILE_SYNCHRONOUS_IO_ALERT还是FILE_SYNCHRONOUS_IO_NONALERT都没用的,并且msdn注明了:FILE_SYNCHRONOUS开头的flag都是同步操作用的。 |
|
禁止发言
|
地板#
发布于:2011-02-22 13:10
用户被禁言,该主题自动屏蔽! |
地下室#
发布于:2011-02-22 18:29
回 3楼(wanghui219) 的帖子
请教版主,怎么样才能触发“未决”(pending)的读请求呢?(我读的文件不小,有30M左右,buffer也设置得很大) |
|
禁止发言
|
5楼#
发布于:2011-02-24 15:55
用户被禁言,该主题自动屏蔽! |
6楼#
发布于:2011-02-24 23:00
回 5楼(wanghui219) 的帖子
多谢版主提点,不过有一点我不明白,您说的“自己pending”是指自己构建并发送Read IRP吗? |
|