0

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

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

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

4

1 回答 1

5

据我所知,Windows 文件系统都不支持异步查询目录调用。 Win32 API 从不异步调用 NtQueryDirectoryFile,因此对它的支持是偶然的。

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

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

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

于 2011-03-12T16:45:52.883 回答