0

NtQueryDirectoryFileへの非同期呼び出しがどのように機能するかを理解できた人はいますか?

非同期呼び出しとは、FILE_SYNCHRONOUS_IO_ALERTまたは FILE_SYNCHRONOUS_IO_NONALERT で開かれていないNtQueryDirectoryFileディレクトリを呼び出すことを意味します。

私にとっては、通常のNtReadFileリクエストが通常のファイルに対して行うのとSTATUS_PENDING同じように返されるようですが、ディレクトリでNtWaitForSingleObjectを使用しようとすると、正しく終了せず、まだすべてのデータを取得していません...なぜこれは起こりますか?

4

1 に答える 1

5

私の知る限り、非同期クエリ ディレクトリ呼び出しをサポートする Windows ファイル システムはありません。 Win32 API は NtQueryDirectoryFile を非同期的に呼び出すことはありません。

NTFS は理論的には非同期 NtQueryDirectoryFile をサポートしていますが、(前述したように) 十分にテストされていないため、機能しない可能性があります。

あなたの応答は、ディレクトリで WaitForSingleObject を呼び出したことを示しました-これは NT で非同期パターンが機能する方法ではありません-NtQueryDirectoryFile へのパラメーターとして提供されたイベントハンドルで WaitForSingleObject を呼び出す必要があります。

この更新プログラムは、NTFS 開発者に詳細を尋ねた結果です。彼は自分のマシンでこのシナリオをテストし、(Windows 7 で) うまくいきました。

于 2011-03-12T16:45:52.883 に答える