异步NtQueryDirectoryFile?

Meh*_*dad 0 directory winapi overlapped-io nt-native-api

有没有人设法弄清楚NtQueryDirectoryFile的异步调用是如何工作的?

通过异步调用,我的意思是调用使用FILE_SYNCHRONOUS_IO_ALERTFILE_SYNCHRONOUS_IO_NONALERT打开的NtQueryDirectoryFile目录.

对我来说,它似乎STATUS_PENDING像普通的NtReadFile请求一样返回普通文件,但是当我尝试在目录上使用NtWaitForSingleObject时,它没有正确结束,我仍然没有获得所有数据...为什么这会发生吗?

Rei*_*man 5

据我所知,没有一个Windows文件系统支持异步查询目录调用. Win32 API永远不会调用NtQueryDirectoryFile,所以对它的支持是命中注定.

NTFS理论上支持异步NtQueryDirectoryFile但是(正如我所提到的)它没有经过广泛测试,所以它可能无法正常工作.

您的响应表明您在目录上调用了WaitForSingleObject - 这不是异步模式在NT中的工作方式 - 您需要在作为NtQueryDirectoryFile参数提供的事件句柄上调用WaitForSingleObject.

此更新是向NTFS开发人员询问更多信息的结果,他在他的机器上测试了这个场景,并且它适用于他(在Windows 7上).