PFLT_GENERATE_FILE_NAME Rückruffunktion (fltkernel.h)
Ein Minifiltertreiber, der Dateinamen für den Namenscache des Filter-Managers bereitstellt, kann eine Routine vom Typ PFLT_GENERATE_FILE_NAME als GenerateFileNameCallback-Routine des Minifiltertreibers registrieren.
Syntax
PFLT_GENERATE_FILE_NAME PfltGenerateFileName;
NTSTATUS PfltGenerateFileName(
[in] PFLT_INSTANCE Instance,
[in] PFILE_OBJECT FileObject,
[in, optional] PFLT_CALLBACK_DATA CallbackData,
[in] FLT_FILE_NAME_OPTIONS NameOptions,
[out] PBOOLEAN CacheFileNameInformation,
[out] PFLT_NAME_CONTROL FileName
)
{...}
Parameter
[in] Instance
Undurchsichtiger instance Zeiger für den Minifiltertreiber instance, für den diese Rückrufroutine registriert ist.
[in] FileObject
Ein Zeiger auf ein Dateiobjekt für die Datei, deren Name angefordert wird.
[in, optional] CallbackData
Ein Zeiger auf die Rückrufdatenstruktur für den Vorgang, bei dem dieser Name angefordert wird. Dieser Parameter ist NULL , wenn FltGetFileNameInformationUnsafe aufgerufen wird, um den Namen der Datei abzurufen.
[in] NameOptions
FLT_FILE_NAME_OPTIONS Wert, der das Namensformat, die Abfragemethode und die Flags für diese Abfrage mit Den Dateinameninformationen angibt.
[out] CacheFileNameInformation
Ein Zeiger auf einen booleschen Wert, der angibt, ob dieser Name zwischengespeichert werden kann. Legen Sie bei der Ausgabe auf TRUE fest, wenn der Name zwischengespeichert werden kann. andernfalls auf FALSE festgelegt.
[out] FileName
Ein Zeiger auf eine vom Filter-Manager zugewiesene FLT_NAME_CONTROL Struktur, um den Dateinamen bei der Ausgabe zu empfangen.
Rückgabewert
Diese Rückrufroutine gibt STATUS_SUCCESS oder einen entsprechenden NTSTATUS-Wert zurück.
Hinweise
Ein Minifiltertreiber, der Dateinamen für den Namenscache des Filter-Managers bereitstellt, kann eine Routine vom Typ PFLT_GENERATE_FILE_NAME als GenerateFileNameCallback-Routine des Minifiltertreibers registrieren.
Um diese Rückrufroutine zu registrieren, speichert der Minifiltertreiber die Adresse einer Routine vom Typ PFLT_GENERATE_FILE_NAME im GenerateFileNameCallback-Member der FLT_REGISTRATION Struktur, die der Minifiltertreiber als Parameter an FltRegisterFilter übergibt.
Der Filter-Manager ruft diese Rückrufroutine auf, damit der Minifiltertreiber Dateinamenanforderungen anderer Minifiltertreiber darüber im Minifiltertreiber instance Stapels abfangen kann. Mit dieser Rückrufroutine und der PFLT_NORMALIZE_NAME_COMPONENT Rückrufroutine kann der Minifiltertreiber eigene Dateinameninformationen bereitstellen.
Um zu bestimmen, welches Dateinamenformat angefordert wird, rufen Sie FltGetFileNameFormat für den Parameter NameOptions auf.
Vor Windows 8 wird diese Rückrufroutine nur für geöffnete Dateinamen und kurze Dateinamen aufgerufen. Wenn der Filter-Manager eine Anforderung für einen normalisierten Dateinamen empfängt, ruft er diese Rückrufroutine auf, um den geöffneten Dateinamen anzufordern. Anschließend wird der PFLT_NORMALIZE_NAME_COMPONENT Rückruf des Minifiltertreibers aufgerufen, um jede Komponente im Dateinamen zu normalisieren.
Ab Windows 8 wird diese Rückrufroutine auch für normalisierte Namen aufgerufen. Wenn der Filter-Manager eine Anforderung für einen normalisierten Dateinamen empfängt, ruft er diese Rückrufroutine mit FLT_FILE_NAME_NORMALIZED im Parameter NameOptions auf. Wenn der Minifilter STATUS_SUCCESS von diesem Rückruf zurückgibt, wird der PFLT_NORMALIZE_NAME_COMPONENT Rückruf des Minifilters nicht aufgerufen. Wenn der Minifilter einen Fehlercode zurückgibt (z. B. STATUS_NOT_SUPPORTED), ruft der Filter-Manager diese Rückrufroutine erneut auf und fordert den geöffneten Dateinamen an. Der Filter-Manager ruft dann den PFLT_NORMALIZE_NAME_COMPONENT Rückruf des Minifiltertreibers auf, um die einzelnen Komponenten im Dateinamen zu normalisieren.
Wenn diese Rückrufroutine aufgerufen wird, generiert der Minifiltertreiber basierend auf den Dateinameninformationen des Dateisystems für die Datei eigene Dateinameninformationen. Um die Dateinameninformationen des Dateisystems für eine Datei abzurufen, rufen Sie FltGetFileNameInformation, FltGetFileNameInformationUnsafe oder FltGetDestinationFileNameInformation auf.
Bei geöffneten Dateinamen sollten die generierten Dateinameninformationen Volumeinformationen enthalten. Für eine Remotedatei sollte sie auch Freigabeinformationen enthalten.
Es folgt ein Beispiel für einen geöffneten Dateinamen für eine Remotedatei:
\Device\LanManRedirector\MyServer\MyShare\Docume~1\MyUser\My Documents\TestRe~1.txt:stream1
Weitere Informationen zu Dateinamenformaten finden Sie in den Referenzeinträgen für FLT_FILE_NAME_INFORMATION und FltParseFileNameInformation.
Nachdem er die Dateinameninformationen generiert hat, muss der Minifiltertreiber FltCheckAndGrowNameControl aufrufen, um zu überprüfen, ob die FLT_NAME_CONTROL Struktur, auf die der FileName-Parameter verweist, einen Namenspuffer enthält, der groß genug ist, um den generierten Dateinamen aufzunehmen. Wenn der Namenspuffer zu klein ist, ersetzt FltCheckAndGrowNameControl ihn durch einen größeren Puffer. Der Minifiltertreiber speichert dann die Dateinameninformationen im Namenspuffer und gibt zurück.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Kopfzeile | fltkernel.h (include Fltkernel.h) |
IRQL | PASSIVE_LEVEL |
Weitere Informationen
FltGetDestinationFileNameInformation
FltGetFileNameInformationUnsafe
FltPurgeFileNameInformationCache