异步NtQueryDirectoryFile?

时间:2011-03-12 09:53:34

标签: winapi directory overlapped-io nt-native-api

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

通过异步调用,我的意思是在使用FILE_SYNCHRONOUS_IO_ALERTFILE_SYNCHRONOUS_IO_NONALERT打开的目录而不是上调用NtQueryDirectoryFile

对我来说,似乎返回STATUS_PENDING就像普通NtReadFile请求对普通文件一样,但当我尝试在目录上使用NtWaitForSingleObject时,它并没有结束没问题,我仍然没有得到所有数据......为什么会这样?

1 个答案:

答案 0 :(得分:5)

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

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

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

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