PFLT_GENERATE_FILE_NAME funzione di callback (fltkernel.h)
Un driver minifilter che fornisce nomi di file per la cache dei nomi del gestore filtri può registrare una routine di tipo PFLT_GENERATE_FILE_NAME come routine GenerateFileNameCallback del driver minifilter.
Sintassi
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
)
{...}
Parametri
[in] Instance
Puntatore dell'istanza opaca per l'istanza del driver minifilter per cui è registrata questa routine di callback.
[in] FileObject
Puntatore a un oggetto file per il file il cui nome viene richiesto.
[in, optional] CallbackData
Puntatore alla struttura dei dati di callback per l'operazione durante la quale viene richiesto questo nome. Questo parametro è NULL quando fltGetFileNameInformationUnsafe viene chiamato per recuperare il nome del file.
[in] NameOptions
FLT_FILE_NAME_OPTIONS valore che specifica il formato del nome, il metodo di query e i flag per questa query di informazioni sul nome file.
[out] CacheFileNameInformation
Puntatore a un valore booleano che specifica se questo nome può essere memorizzato nella cache. Impostare su TRUE nell'output se il nome può essere memorizzato nella cache; impostare su FALSE in caso contrario.
[out] FileName
Puntatore a una struttura di gestione filtri allocata FLT_NAME_CONTROL per ricevere il nome del file nell'output.
Valore restituito
Questa routine di callback restituisce STATUS_SUCCESS o un valore NTSTATUS appropriato.
Commenti
Un driver minifilter che fornisce nomi di file per la cache dei nomi del gestore filtri può registrare una routine di tipo PFLT_GENERATE_FILE_NAME come routine GenerateFileNameCallback del driver minifilter.
Per registrare questa routine di callback, il driver minifilter archivia l'indirizzo di una routine di tipo PFLT_GENERATE_FILE_NAME nel membro GenerateFileNameCallback della struttura FLT_REGISTRATION che il driver minifilter passa come parametro a FltRegisterFilter.
Gestione filtri chiama questa routine di callback per consentire al driver minifilter di intercettare le richieste di nome file da altri driver minifilter sopra di esso nello stack di istanze del driver minifilter. Utilizzando questa routine di callback e la routine di callback PFLT_NORMALIZE_NAME_COMPONENT , il driver minifilter può fornire le proprie informazioni sul nome file.
Per determinare il formato del nome file richiesto, chiamare FltGetFileNameFormat sul parametro NameOptions .
Prima di Windows 8, questa routine di callback viene chiamata solo per i nomi di file aperti e i nomi di file brevi. Quando gestione filtri riceve una richiesta per un nome di file normalizzato, chiama questa routine di callback per richiedere il nome file aperto. Chiama quindi il driver minifilter PFLT_NORMALIZE_NAME_COMPONENT callback per normalizzare ogni componente nel nome del file.
A partire da Windows 8, questa routine di callback viene chiamata anche per i nomi normalizzati. Quando gestione filtri riceve una richiesta per un nome di file normalizzato, chiama questa routine di callback con FLT_FILE_NAME_NORMALIZED specificato nel parametro NameOptions . Se il minifilter restituisce STATUS_SUCCESS da questo callback, il callback del minifilter PFLT_NORMALIZE_NAME_COMPONENT non verrà chiamato. Se il minifilter restituisce un codice di errore, ad esempio STATUS_NOT_SUPPORTED, il gestore filtri chiamerà di nuovo questa routine di callback, richiedendo il nome del file aperto. Il gestore filtri chiamerà quindi il callback del driver minifilter PFLT_NORMALIZE_NAME_COMPONENT per normalizzare ogni componente nel nome del file.
Quando questa routine di callback viene richiamata, il driver minifilter genera le proprie informazioni sul nome file, in base alle informazioni sul nome file del file system per il file. Per ottenere le informazioni sul nome file del file system per un file, chiamare FltGetFileNameInformation, FltGetFileNameInformationUnsafe o FltGetDestinationFileNameInformation.
Per i nomi di file aperti, le informazioni sul nome file generate devono includere informazioni sul volume. Per un file remoto, deve includere anche informazioni di condivisione.
Di seguito è riportato un esempio di nome file aperto per un file remoto:
\Device\LanManRedirector\MyServer\MyShare\Docume~1\MyUser\My Documents\TestRe~1.txt:stream1
Per altre informazioni sui formati di nome file, vedere le voci di riferimento per FLT_FILE_NAME_INFORMATION e FltParseFileNameInformation.
Dopo aver generato le informazioni sul nome file, il driver minifilter deve chiamare FltCheckAndGrowNameControl per verificare se la struttura FLT_NAME_CONTROL a cui punta il parametro FileName contiene un buffer dei nomi sufficientemente grande da contenere il nome file generato. Se il buffer dei nomi è troppo piccolo, FltCheckAndGrowNameControl lo sostituisce con uno più grande. Il driver minifilter archivia quindi le informazioni sul nome del file nel buffer dei nomi e restituisce.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Desktop |
Intestazione | fltkernel.h (include Fltkernel.h) |
IRQL | PASSIVE_LEVEL |
Vedi anche
FltGetDestinationFileNameInformation
FltGetFileNameInformationUnsafe
FltPurgeFileNameInformationCache