Dateisystemunterstützung für FindFirstFileEx, Beschränkung auf Verzeichnisse

9

Ich verwende die Windows-API-Funktion FindFirstFileEx , weil sie die Funktion bereitstellt Fähigkeit, nur die Unterverzeichnisse eines bestimmten Verzeichnisses zurückzugeben (Dateien zu ignorieren). Wenn ich diese Funktion jedoch mit dem erforderlichen Flag aufrufen, erhalte ich immer noch sowohl Dateien als auch Verzeichnisse.

Die MSDN-Dokumentation für das FindExSearchLimitToDirectories -Flag, das von FindFirstFileEx verwendet wird, besagt:

  

Dies ist eine Beratungsflagge. Wenn die Datei   System unterstützt Verzeichnisfilterung,   Die Funktion sucht nach einer Datei, die   entspricht dem angegebenen Namen und ist auch   ein Verzeichnis. Wenn das Dateisystem dies tut   Directory-Filtering nicht unterstützen, dies   Flag wird still ignoriert.

     

Der lpSearchFilter-Parameter von   Die FindFirstFileEx-Funktion muss NULL sein   wenn dieser Suchwert verwendet wird.

     

Wenn Verzeichnisfilterung gewünscht ist,   Dieses Flag kann für alle Dateien verwendet werden   Systeme, sondern weil es eine Beratung ist   Flag und betrifft nur Dateisysteme   das unterstütze es, muss die Anwendung   Untersuchen Sie die gespeicherten Dateiattributdaten   im Parameter lpFindFileData von   FindFirstFileEx-Funktion zum Bestimmen   ob die Funktion eine zurückgegeben hat   Handle zu einem Verzeichnis.

Welche Dateisysteme unterstützen dieses Flag? Es wäre also sinnvoll gewesen, diese unterstützten Dateisysteme auf derselben Seite aufzulisten, aber ich kann sie nicht finden.

Mein Entwicklungssystem ist Windows XP SP3, NTFS, .NET 3.5.

Ich weiß, dass ich Dateiattribute überprüfen kann, um festzustellen, ob es sich bei einer Datei um ein Verzeichnis handelt, dies bedeutet jedoch, dass jede Datei / jedes Verzeichnis überprüft wird. Es vereitelt auch den Zweck der Verwendung von FindFirstFileEx an erster Stelle.

Natürlich besteht immer noch die Möglichkeit, dass ich in meinem Code etwas falsch mache. Das einzige, was ich sehen kann, ist das Übergeben von IntPtr.Zero an lpSearchFilter ist möglicherweise nicht dasselbe wie das Übergeben von NULL (wie im Zitat erwähnt).

Hier ist ein Beispiel für den Code, den ich verwende:

%Vor%     
Ash 12.02.2010, 00:48
quelle

1 Antwort

4

Der nächste Link, den ich finden konnte, war die Liste der Systemaufrufe von Metasploit ... ich Ich nehme hier einen Stich, aber ich würde mir vorstellen, dass 'FindFirstFileEx' irgendwie ein indirekter Aufruf des NT-Systemaufrufs sein würde, äquivalent 'NtOpenDirectoryObject', 'NtQueryDirectoryFile', 'NtQueryDirectoryObject' ... ich hoffe ... wenn jemand denkt, ich ' m falsch und downvotes zu widersprechen, werde ich von wem auch immer widersprochen werden:)

Allerdings habe ich hier ein paar Links getroffen

  • CodeGuru Forum zu diesem Thema über die Flagge
  • Wein hat ein Mailing als Flagge als keine Wirkung aufgeführt?
  • GenNT erwähnt dass es anscheinend auf NTFS beschränkt ist (es gibt 3 Antworten auf diesen Beitrag)
  • Hier auf SO , a Frage zu 'Wie bekomme ich die Liste der Ordner in diesem Ordner'

Bearbeiten: Gerade jetzt, nachdem ich in den Kommentaren erwähnt habe, dachte ich, dass es passend wäre, einen Link zu dem Linux NTFS-Treiber für die Fähigkeit, die NTFS-Partition zu lesen, wird es sicher sein, Quellversionsänderungen zu sein, um die verschiedenen NTFS-Versionen zu berücksichtigen, die zu Win2000 zurückgehen ...

Hoffe, das hilft, Freundliche Grüße, Tom.

    
t0mm13b 12.02.2010 01:08
quelle

Tags und Links