Есть ли способ напрямую запросить драйвер устройства файловой системы для перечисления файлов в каталоге? - PullRequest
5 голосов
/ 30 августа 2010

В настоящее время я использую FindFirstFile, API FindNextFile для рекурсивной итерации по каталогам для поиска файлов на основе заданных критериев.Я заметил, что команда "dir / s" дает лучшую производительность, чем моя программа.Я попытался проверить события в мониторе процесса, и похоже, что команда cmd.exe / dir напрямую запрашивает драйвер устройства диска.Есть ли способ, которым я могу добиться чего-то похожего с DeviceIOControl ()?Я очень новичок в драйверах устройств, но не новичок в программировании.Прикрепление выхода procmon для справки:

alt text

С уважением,

Ответы [ 5 ]

3 голосов
/ 31 августа 2010

Используйте FindFirstFile и FindNextFile.Это API, использование DeviceIOControl напрямую - беспорядок или невозможность (точно не знаю).

Вы пробовали FindFirstFileEx и это FIND_FIRST_EX_LARGE_FETCH флаг и FindExInfoBasic информационный уровень?

2 голосов
/ 31 августа 2010

"dir / s" использует FindFirst / Next.Для перечисления файлов он не применяет никакой особой магии.

Похоже, что QueryDirectory показывает, как Procmon показывает, что FindFirst / Next делает для получения своих данных из файловой системы.

1 голос
/ 02 сентября 2010

Профилируйте свое приложение, скорее всего, ваше узкое место будет где угодно. Некоторые из этих опций похожи на дробовик, чтобы стрелять в муху ...

-Скотт

1 голос
/ 31 августа 2010

http://ntfs -search.sourceforge.net /

Работает хорошо.И быстрее.
Открывает том и анализирует напрямую.

Но работает только на NTFS.

1 голос
/ 31 августа 2010

Вы можете позвонить ZwQueryDirectoryFile напрямую.Переход к уровню драйверов потребует отправки нескольких IRP и, вероятно, будет излишним.

...