Freigeben über


FltQueryDirectoryFile-Funktion (fltkernel.h)

Die FltQueryDirectoryFile Routine gibt verschiedene Arten von Informationen zu Dateien im Verzeichnis zurück, das durch ein bestimmtes Dateiobjekt angegeben ist. Verwenden Sie FltQueryDirectoryFileEx- für ein größeres Abfragesteuerelement.

Syntax

NTSTATUS FLTAPI FltQueryDirectoryFile(
  [in]            PFLT_INSTANCE          Instance,
  [in]            PFILE_OBJECT           FileObject,
  [out]           PVOID                  FileInformation,
  [in]            ULONG                  Length,
  [in]            FILE_INFORMATION_CLASS FileInformationClass,
  [in]            BOOLEAN                ReturnSingleEntry,
  [in, optional]  PUNICODE_STRING        FileName,
  [in]            BOOLEAN                RestartScan,
  [out, optional] PULONG                 LengthReturned
);

Parameter

[in] Instance

Undurchsichtiger Zeiger auf die Filtertreiberinstanz, die die E/A initiiert.

[in] FileObject

Zeigen Sie auf das Dateiobjekt, das das zu scannende Verzeichnis darstellt.

[out] FileInformation

Zeigen Sie auf einen Puffer, der die gewünschten Informationen zur Datei empfängt. Die Struktur der im Puffer zurückgegebenen Informationen wird durch den parameter FileInformationClass definiert.

[in] Length

Größe des Puffers in Byte, auf den FileInformationverweist. Der Aufrufer sollte diesen Parameter gemäß der angegebenen FileInformationClassfestlegen.

[in] FileInformationClass

Typ der Informationen, die über Dateien im Verzeichnis zurückgegeben werden sollen. Die Liste der möglichen Werte finden Sie im FileInformationClass Parameter von NtQueryDirectoryFileEx.

[in] ReturnSingleEntry

Wird auf TRUE- festgelegt, wenn nur ein einzelner Eintrag zurückgegeben werden soll, FALSE andernfalls. Wenn dieser Parameter TRUEist, gibt FltQueryDirectoryFile nur den ersten gefundenen Eintrag zurück.

[in, optional] FileName

Zeigen Sie auf eine von einem Aufrufer zugewiesene Unicode-Zeichenfolge, die den Namen einer Datei (oder mehrerer Dateien, wenn Wildcards verwendet werden) innerhalb des durch FileObjectangegebenen Verzeichnis enthält. Dieser Parameter ist optional und kann NULL-werden.

Wenn FileName- nicht NULL-ist, werden nur Dateien, deren Namen der FileName- Zeichenfolge entsprechen, in die Verzeichnisüberprüfung einbezogen. Wenn FileName-NULL-ist, werden alle Dateien eingeschlossen. Wenn RestartScanFALSEist, wird der Wert FileName ignoriert.

[in] RestartScan

Legen Sie diesen Wert auf TRUE fest,, wenn der Scan beim ersten Eintrag im Verzeichnis gestartet werden soll. Wird auf FALSE- festgelegt, wenn der Scan von einem vorherigen Aufruf fortgesetzt wird. Der Aufrufer muss diesen Parameter beim erstmaligen Aufrufen FltQueryDirectoryFile-auf TRUE festlegen.

[out, optional] LengthReturned

Empfängt die Anzahl der Bytes, die tatsächlich in den angegebenen FileInformation Puffer geschrieben wurden.

Rückgabewert

FltQueryDirectoryFile gibt STATUS_SUCCESS oder einen entsprechenden Fehlerstatus zurück. Beachten Sie, dass der Satz von Fehlerstatuswerten, die zurückgegeben werden können, dateisystemspezifisch ist.

Bemerkungen

FltQueryDirectoryFile Gibt Informationen zu Dateien zurück, die im Verzeichnis enthalten sind, das durch FileObjectdargestellt wird.

Der erste Aufruf von FltQueryDirectoryFile bestimmt, welche Einträge in die Verzeichnisüberprüfung für alle nachfolgenden Aufrufe aufgenommen werden sollen, basierend auf den Werten ReturnSingleEntry, FileNameund RestartScan. Wenn mindestens ein übereinstimmender Eintrag vorhanden ist, erstellt FltQueryDirectoryFile eine FILE_XXX-_INFORMATION-Struktur (siehe die obige Tabelle) für jeden Eintrag wiederum und speichert die Struktur im Puffer.

Wenn angenommen wird, dass mindestens ein übereinstimmener Verzeichniseintrag gefunden wird, ist die Anzahl der Einträge, für die Informationen zurückgegeben werden, die kleinste der folgenden Werte sind:

  • Ein Eintrag, wenn ReturnSingleEntryTRUE ist und FileName-NULL-ist.

  • Die Anzahl der Einträge, die der FileName- Zeichenfolge entsprechen, wenn FileName- nicht NULL-ist. (Wenn die Zeichenfolge keine Wildcards enthält, kann es höchstens einen übereinstimmenden Eintrag geben.)

  • Die Anzahl der Einträge, deren Informationen in den angegebenen Puffer passen.

  • Die Anzahl der Einträge im Verzeichnis.

Wenn beim ersten Aufruf von FltQueryDirectoryFiledie für den ersten Eintrag erstellte Struktur zu groß für den Ausgabepuffer gefunden wurde, wird nur der feste Teil der Struktur zurückgegeben. Der feste Teil besteht aus allen Feldern der Struktur mit Ausnahme der endgültigen FileName- Zeichenfolge. Im ersten Aufruf, aber nicht bei nachfolgenden, stellt das E/A-System sicher, dass der Puffer groß genug ist, um den festen Teil der entsprechenden FILE_XXX-_INFORMATION-Struktur zu halten. In diesem Fall gibt FltQueryDirectoryFile einen geeigneten Statuswert wie STATUS_BUFFER_OVERFLOW zurück. Wenn beim ersten Aufruf von FltQueryDirectoryFilekeine Datei im verzeichnis FileObject vorhanden ist, die dem parameter FileName entspricht, gibt FltQueryDirectoryFile einen entsprechenden Statuswert wie STATUS_NO_SUCH_FILE zurück.

Bei jedem Aufruf gibt FltQueryDirectoryFile so viele FILE_XXX-_INFORMATION Strukturen (eins pro Verzeichniseintrag) zurück, wie sie vollständig im Puffer enthalten sein können, auf den FileInformationverweist. Solange der Ausgabepuffer mindestens eine vollständige Struktur enthält, wird der zurückgegebene Statuswert STATUS_SUCCESS. Es werden keine Informationen zu verbleibenden Einträgen gemeldet. Mit Ausnahme der oben aufgeführten Fälle, in denen nur ein Eintrag zurückgegeben wird, muss FltQueryDirectoryFile- mindestens zweimal aufgerufen werden, um den Inhalt eines gesamten Verzeichnisses aufzählen zu können (z. B. wenn der FileName Parameter mindestens ein Wildcardzeichen enthält oder NULList).

Der letzte Aufruf von FltQueryDirectoryFile gibt einen leeren Ausgabepuffer zurück und meldet einen geeigneten Statuswert wie STATUS_NO_MORE_FILES.

Anmerkung

Wenn FltQueryDirectoryFile mehrmals im selben Verzeichnis aufgerufen wird, ist es möglich, dass die Anzahl der zurückgegebenen Informationen kleiner als erwartet ist. Dies liegt daran, dass der Satz von Einträgen, die in die Verzeichnisüberprüfung einbezogen werden sollen, beim ersten Aufruf von FltQueryDirectoryFilebehoben ist. In nachfolgenden Aufrufen setzt FltQueryDirectoryFile den Verzeichnisscan an der Stelle fort, an der sie in dieser Enumeration aufgehört hat. Zwischen Aufrufen von FltQueryDirectoryFilekönnen sich jedoch die tatsächlichen Verzeichniseinträge ändern, sodass sie nicht mehr mit der ursprünglichen Enumeration synchronisiert werden.

FltQueryDirectoryFile gibt null in einem Element einer FILE_XXX-_INFORMATION-Struktur zurück, die vom Dateisystem nicht unterstützt wird.

Informationen zu anderen Dateiinformationsabfrageroutinen finden Sie unter File Objects.

Aufrufer von FltQueryDirectoryFile- müssen unter IRQL = PASSIVE_LEVEL und mit aktivierten APCs ausgeführt werden. Weitere Informationen finden Sie unter Deaktivieren von APCs.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
Library FltMgr.lib
DLL- Fltmgr.sys
IRQL- PASSIVE_LEVEL (siehe Abschnitt "Hinweise")

Siehe auch

FILE_BOTH_DIR_INFORMATION

FILE_DIRECTORY_INFORMATION

FILE_FULL_DIR_INFORMATION

FILE_ID_BOTH_DIR_INFORMATION

FILE_ID_EXTD_BOTH_DIR_INFORMATION

FILE_ID_EXTD_DIR_INFORMATION

FILE_ID_FULL_DIR_INFORMATION

FILE_ID_GLOBAL_TX_DIR_INFORMATION

FILE_NAMES_INFORMATION

FILE_OBJECTID_INFORMATION

FILE_QUOTA_INFORMATION

FILE_REPARSE_POINT_INFORMATION

FltCreateFile-

FltCreateFileEx-

FltCreateFileEx2

FltQueryDirectoryFileEx

IRP_MJ_DIRECTORY_CONTROL IRP-

UNICODE_STRING

ZwQueryDirectoryFile-