Existe-t-il un moyen d’interroger directement le pilote de périphérique du système de fichiers pour répertorier les fichiers dans un répertoire?

J’utilise actuellement FindFirstFile, API FindNextFile pour effectuer une itération récursive dans les répertoires pour rechercher des fichiers en fonction d’un critère donné. J’ai remarqué que la commande “dir / s” donne de meilleures performances que mon programme. J’ai essayé de vérifier les événements dans le moniteur de processus et il semble que la commande cmd.exe / dir interroge directement le pilote de périphérique de disque. Est-il possible de réaliser quelque chose de similaire avec DeviceIOControl ()? Je suis très nouveau pour les pilotes de périphériques, mais pas pour la programmation. Joindre une sortie procmon pour référence:

texte alt

Cordialement,

    Vous pouvez appeler directement ZwQueryDirectoryFile . Aller plus loin au niveau du pilote nécessiterait l’envoi d’un tas de IRP et serait probablement exagéré.

    Utilisez FindFirstFile et FindNextFile . C’est l’API, l’utilisation directe de DeviceIOControl est soit un désordre, soit impossible (ne sait pas exactement).

    Avez-vous essayé FindFirstFileEx et FIND_FIRST_EX_LARGE_FETCH indicateurs FindExInfoBasic et FindExInfoBasic ?

    “dir / s” utilise FindFirst / Next. Il ne fait pas de magie spéciale pour énumérer les fichiers.

    QueryDirectory semble être la façon dont Procmon expose ce que FindFirst / Next fait pour obtenir ses données du système de fichiers.

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

    Ça marche bien. Et plus vite
    Il ouvre un volume et parsing directement.

    Mais cela ne fonctionne que sur NTFS.

    Profil de votre application, votre goulot d’étranglement est susceptible d’être ailleurs. Certaines de ces options sont comme sortir un fusil de chasse pour tirer une mouche …

    -scott