Freigeben über


FltGetDestinationFileNameInformation-Funktion (fltkernel.h)

Die FltGetDestinationFileNameInformation-Routine fragt den Dateinamen für das übergeordnete Verzeichnis des Ziels ab und erstellt dann einen vollständigen Zielpfadnamen für eine Datei oder ein Verzeichnis, die umbenannt wird oder für die ein harter NTFS-Link erstellt wird.

Syntax

NTSTATUS FLTAPI FltGetDestinationFileNameInformation(
  [in]           PFLT_INSTANCE              Instance,
  [in]           PFILE_OBJECT               FileObject,
  [in, optional] HANDLE                     RootDirectory,
  [in]           PWSTR                      FileName,
  [in]           ULONG                      FileNameLength,
  [in]           FLT_FILE_NAME_OPTIONS      NameOptions,
  [out]          PFLT_FILE_NAME_INFORMATION *RetFileNameInformation
);

Parameter

[in] Instance

Undurchsichtiger instance Zeiger für einen Minifiltertreiber instance, der an das Volume angefügt ist, auf dem sich die Datei befindet.

[in] FileObject

Zeiger auf das Dateiobjekt für die Datei. Dieser Parameter ist erforderlich und darf nicht NULL sein.

[in, optional] RootDirectory

Für Linkvorgänge: Wenn der Link im selben Verzeichnis wie die Datei erstellt werden soll, mit der verknüpft wird, oder wenn FileName den vollständigen Pfadnamen für den zu erstellenden Link enthält, ist dieser Parameter NULL. Andernfalls handelt es sich um ein Handle für das Verzeichnis, in dem der Link erstellt werden soll.

Für Umbenennungsvorgänge: Wenn die Datei nicht in ein anderes Verzeichnis verschoben wird oder FileName den vollständigen Pfadnamen enthält, ist dieser Parameter NULL. Andernfalls handelt es sich um ein Handle für das Verzeichnis, in dem sich die Datei befindet, nachdem sie umbenannt wurde.

[in] FileName

Für Linkvorgänge: Zeiger auf eine Breitzeichenzeichenfolge, die den Namen enthält, der dem neu erstellten Link zugewiesen werden soll.

Für Umbenennungsvorgänge: Zeiger auf eine Breitzeichenzeichenfolge, die den neuen Namen für die Datei enthält.

[in] FileNameLength

Länge der Breitzeichenzeichenfolge in Bytes, auf die FileName verweist.

[in] NameOptions

Ein FLT_FILE_NAME_OPTIONS Wert, der Flags enthält, die das Format der zurückzugebenden Namensinformationen, die vom Filter-Manager zu verwendende Abfragemethode und zusätzliche Dateinamenflags angeben. Dieser Parameter ist erforderlich und darf nicht NULL sein.

Im Folgenden werden die Werte des Namensformatflags aufgeführt. Es kann nur ein Namensformatflag angegeben werden. (Beachten Sie, dass FLT_FILE_NAME_SHORT kein gültiger Flagwert für diesen Parameter ist.)

Name Format Flag Value Bedeutung
FLT_FILE_NAME_NORMALIZED Der FileName-Parameter empfängt den normalisierten Zielnamen für die Datei.
FLT_FILE_NAME_OPENED Der FileName-Parameter empfängt den Zielnamen für die Datei basierend auf dem Namen, der beim Öffnen der Datei verwendet wurde. Dieser Dateiname ist nicht normalisiert.

Im Folgenden sind die Werte des Abfragemethodenflags aufgeführt. Es kann nur ein Abfragemethodenflag angegeben werden.

Flagwert der Abfragemethode Bedeutung
FLT_FILE_NAME_QUERY_DEFAULT Wenn es derzeit nicht sicher ist, das Dateisystem nach dem Namen der Zieldatei abzufragen, führt FltGetDestinationFileNameInformation nichts aus. Andernfalls fragt FltGetDestinationFileNameInformation den Namenscache des Filter-Managers nach den Dateinameninformationen für das übergeordnete Verzeichnis des Ziels ab und fügt dann den Zielnamen an. Wenn der resultierende Name nicht im Cache gefunden wird, fragt FltGetDestinationFileNameInformation das Dateisystem ab und speichert das Ergebnis zwischen.
FLT_FILE_NAME_QUERY_CACHE_ONLY FltGetDestinationFileNameInformation fragt den Namenscache des Filter-Managers nach den Dateinameninformationen für das übergeordnete Verzeichnis des Ziels ab und fügt dann den Zielnamen an. Das Dateisystem wird nicht abfragt.
FLT_FILE_NAME_QUERY_FILESYSTEM_ONLY FltGetDestinationFileNameInformation fragt das Dateisystem nach den Dateinameninformationen für das übergeordnete Verzeichnis des Ziels ab und fügt dann den Zielnamen an. Sie fragt nicht den Namenscache des Filter-Managers ab und speichert nicht das Ergebnis der Dateisystemabfrage zwischen.
FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP FltGetDestinationFileNameInformation fragt den Namenscache des Filter-Managers nach den Dateinameninformationen für das übergeordnete Verzeichnis des Ziels ab und fügt dann den Zielnamen an. Wenn der Name nicht im Cache gefunden wird und dies derzeit sicher ist, fragt FltGetDestinationFileNameInformation das Dateisystem nach den Dateinameninformationen ab und speichert das Ergebnis zwischen.

Im Folgenden sind die Werte des Dateinamenflags aufgeführt. Eine beliebige Kombination dieser Flags kann angegeben werden. (Beachten Sie, dass FLT_FILE_NAME_ALLOW_QUERY_ON_REPARSE kein relevantes Flag für diesen Parameter ist, da FltGetDestinationFileNameInformation in einem Rückruf nach der Erstellung nicht verwendet wird.)

Dateinameflagwert Bedeutung
FLT_FILE_NAME_REQUEST_FROM_CURRENT_PROVIDER FltGetDestinationFileNameInformation leitet die Namensanforderung an den aufrufenden Filter weiter, instance abgeschlossen werden soll.
FLT_FILE_NAME_DO_NOT_CACHE FltGetDestinationFileNameInformation speichert den abgerufenen Dateinamen nicht zwischen. Namensanbieter-Minifilter verwenden dieses Flag, wenn sie Zwischenabfragen ausführen, um einen Namen zu generieren.

[out] RetFileNameInformation

Zeiger auf eine vom Aufrufer zugewiesene Variable, die die Adresse einer systemseitig zugewiesenen FLT_FILE_NAME_INFORMATION-Struktur empfängt, die die Dateinameninformationen enthält. FltGetDestinationFileNameInformation ordnet diese Struktur aus einem ausgelagerten Pool zu. Dieser Parameter ist erforderlich und darf nicht NULL sein.

Rückgabewert

FltGetDestinationFileNameInformation gibt STATUS_SUCCESS oder einen geeigneten NTSTATUS-Wert zurück, z. B. einen der folgenden:

Rückgabecode Beschreibung
STATUS_FLT_INVALID_NAME_REQUEST Dieser Wert wird aus einem der folgenden Gründe zurückgegeben: (1) FltGetDestinationFileNameInformation kann keine Dateinameninformationen abrufen, wenn das TopLevelIrp-Feld des aktuellen Threads nicht NULL ist, da die resultierende Dateisystemrekursion Zu Deadlocks oder Stapelüberläufen führen kann. (2) FLT_FILE_NAME_SHORT wurde für das Namensformatflag im Parameter NameOptions angegeben.
STATUS_INSUFFICIENT_RESOURCES Bei FltGetDestinationFileNameInformation ist ein Poolzuordnungsfehler aufgetreten. Dies ist ein Fehlercode.
STATUS_INVALID_PARAMETER Für den Parameter NameOptions wurde ein ungültiger Wert angegeben. Dies ist ein Fehlercode.
STATUS_MOUNT_POINT_NOT_RESOLVED Der Name des Zielpfads enthält einen Bereitstellungspunkt, der in ein anderes Volume als das Volume aufgelöst wird, in dem sich die Datei befindet. (Da ein Umbenennungs- oder Hartlinkerstellungsvorgang nur innerhalb eines Volumes und nicht über Volumes hinweg ausgeführt werden kann, schlägt der Vorgang fehl.) Dies ist ein Fehlercode.

Hinweise

Minifilter rufen in der Regel FltGetDestinationFileNameInformation in einer Rückrufroutine für eine Voraboperation für einen Umbenennungs- oder Hartlinkerstellungsvorgang auf. Dies bedeutet, dass der Name der Zieldatei höchstwahrscheinlich nicht vorhanden ist. Der Name des "Ziels" lautet:

  • Bei einer Dateibenennung der Name der Datei, wenn die Umbenennung erfolgreich ist. Wenn Sie beispielsweise name1 in Name2 umbenennen, ist name2 der Zielname.
  • Bei einem Vorgang zum Erstellen einer endgültigen Verknüpfung der Name, der dem Dateisystem hinzugefügt wird. Wenn Sie z. B. den fest verknüpften Namen2 zur vorhandenen Datei namens name1 hinzufügen, ist name2 der Zielname.

FltGetDestinationFileNameInformation gibt die Informationen zum Namen der Zieldatei entweder im normalisierten format oder im Format "geöffnete Datei" zurück. Weitere Informationen zu diesen Formaten finden Sie in der FLT_FILE_NAME_INFORMATION-Struktur .

Der Dateiobjektzeiger, der für den FileObject-Parameter übergeben wird, muss entweder der FileObject-Member der FLT_RELATED_OBJECTS-Struktur für den Vorgang oder der Data-Iopb-TargetFileObject-Zeiger>> für den Vorgang sein, wobei Data die Rückrufdatenstruktur für den Vorgang ist (FLT_CALLBACK_DATA). Der Dateiobjektzeiger darf nicht der Data-Iopb-Parameters.SetFileInformation.FileObject-Member>> sein, da dieses Feld nicht einheitlich in dateisystemübergreifend verwendet wird.

Wenn der Benutzer die Datei mit der Datei-ID geöffnet hat, aber nicht über Durchlaufberechtigungen für den gesamten Pfad verfügt, gibt FltGetDestinationFileNameInformation nur den Teil des Pfads zurück, für den der Benutzer über Berechtigungen verfügt.

Ein Umbenennungs- oder Hartlinkerstellungsvorgang kann nur innerhalb eines Volumes und nicht über Volumes hinweg ausgeführt werden. Daher schlägt ein solcher Vorgang fehl, wenn der Name des Zielpfads einen Bereitstellungspunkt enthält, der in ein anderes Volume als das Volume aufgelöst wird, in dem sich die Datei befindet. Weitere Informationen zu Umbenennungsvorgängen finden Sie in der FILE_RENAME_INFORMATION-Struktur . Weitere Informationen zu Erstellungsvorgängen für feste Verknüpfungen finden Sie in den FILE_LINK_INFORMATION-Strukturen .

Nach einem erfolgreichen Aufruf von FltGetDestinationFileNameInformation ist der Aufrufer dafür verantwortlich, den im RetFileNameInformation-Parameter zurückgegebenen Zeiger freizugeben, wenn er beim Aufrufen von FltReleaseFileNameInformation nicht mehr benötigt wird.

Der Aufrufer darf den Inhalt der im Parameter RetFileNameInformation zurückgegebenen Struktur nicht ändern, da diese Struktur vom Filter-Manager zwischengespeichert wird, sodass sie von allen Minifiltertreibern verwendet werden kann.

Bei Erstellungs-, Festverknüpfungs- und Umbenennungsvorgängen kann das Tunneln von Dateinamen dazu führen, dass die letzte Komponente in normalisierten Dateinameninformationen, die ein Minifiltertreiber in einer Voroperationsrückrufroutine abruft, ungültig wird. Wenn ein Minifiltertreiber normalisierte Dateinameninformationen in einer PFLT_PRE_OPERATION_CALLBACK-Routine (Preoperation Callback) abruft, indem er eine Routine wie FltGetDestinationFileNameInformation aufruft, muss er FltGetTunneledName aus seiner Postoperation-Rückrufroutine aufrufen, um die richtigen Dateinameninformationen für die Datei abzurufen.

Weitere Informationen zu normalisierten Dateinamen finden Sie unter FLT_FILE_NAME_INFORMATION.

Das Tunneln von Dateinamen wirkt sich nur auf diese Weise auf Erstellungs-, Festverknüpfungs- und Umbenennungsvorgänge aus. Andere E/A-Vorgänge wie Lese- und Schreibvorgänge sind davon nicht betroffen.

Die folgenden gekoppelten Vorgänge können dazu führen, dass der Dateiname getunnelt wird:

  • delete(name)/create(name)
  • delete(name)/rename(source, name)
  • rename(name, newname)/create(name)
  • rename(name, newname)/rename(source, name)

Anforderungen

Anforderung Wert
Zielplattform Universell
Header fltkernel.h (fltkernel.h einschließen)
Bibliothek FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Weitere Informationen

FILE_RENAME_INFORMATION

FILE_LINK_INFORMATION

FLT_CALLBACK_DATA

FLT_FILE_NAME_INFORMATION

FLT_FILE_NAME_OPTIONS

FLT_RELATED_OBJECTS

FltGetFileNameInformation

FltGetFileNameInformationUnsafe

FltGetTunneledName

FltParseFileNameInformation

FltReferenceFileNameInformation

FltReleaseFileNameInformation

IoGetTopLevelIrp

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK