Асинхронный NtQueryDirectoryFile? - PullRequest
0 голосов
/ 12 марта 2011

Кому-нибудь удалось выяснить, как работают асинхронные вызовы NtQueryDirectoryFile ?

Под асинхронным вызовом я имею в виду вызов NtQueryDirectoryFile для каталогов , а не , открытых с FILE_SYNCHRONOUS_IO_ALERT или с FILE_SYNCHRONOUS_IO_NONALERT .

Мне кажется, что он возвращает STATUS_PENDING, как обычный NtReadFile запрос на обычный файл, но когда я попытался использовать NtWaitForSingleObject в каталоге, он не ' не заканчивается должным образом, и я все еще не получаю все данные ... почему это происходит?

1 Ответ

5 голосов
/ 12 марта 2011

Насколько я знаю, ни одна из файловых систем Windows не поддерживает асинхронные вызовы каталога запросов. Интерфейсы Win32 API никогда не вызывают NtQueryDirectoryFile асинхронно, поэтому его поддержка может быть случайной.

NTFS теоретически поддерживает асинхронный NtQueryDirectoryFile, но (как я уже упоминал) он не был тщательно протестирован, поэтому он может не работать.

В вашем ответе указано, что вы вызвали WaitForSingleObject для каталога - это не то, как асинхронный шаблон работает в NT - вам нужно вызвать WaitForSingleObject для дескриптора события, предоставленного в качестве параметра для NtQueryDirectoryFile.

Это обновление является результатом запроса дополнительной информации у разработчика NTFS, он протестировал этот сценарий на своей машине, и он сработал для него (в Windows 7).

...