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

FLT_CALLBACK_DATA

FLT_FILE_NAME_INFORMATION

FLT_FILE_NAME_OPTIONS

FLT_NAME_CONTROL

FLT_REGISTRATION

FltCheckAndGrowNameControl

FltGetDestinationFileNameInformation

FltGetFileNameFormat

FltGetFileNameInformation

FltGetFileNameInformationUnsafe

FltGetFileNameQueryMethod

FltParseFileName

FltParseFileNameInformation

FltPurgeFileNameInformationCache

FltRegisterFilter

PFLT_NORMALIZE_CONTEXT_CLEANUP

PFLT_NORMALIZE_NAME_COMPONENT

PFLT_NORMALIZE_NAME_COMPONENT_EX