Funzione FltRetrieveFileInfoOnCreateCompletionEx (fltkernel.h)

FltRetrieveFileInfoOnCreateCompletionEx esegue query per le informazioni sul file specificate al completamento della creazione del file.

Sintassi

NTSTATUS FLTAPI FltRetrieveFileInfoOnCreateCompletionEx(
  [in]  PFLT_FILTER        Filter,
  [in]  PFLT_CALLBACK_DATA Data,
  [in]  ULONG              InfoClass,
  [out] PULONG             RetInfoSize,
  [out] PVOID              *RetInfoBuffer
);

Parametri

[in] Filter

Puntatore di filtro opaco che identifica in modo univoco il driver minifilter. Viene restituito da FltRegisterFilter e rimane costante finché il driver del minifiltro viene caricato.

[in] Data

Puntatore al FLT_CALLBACK_DATA dati di callback che rappresentano l'operazione di I/O.

[in] InfoClass

Flag che indica il tipo di informazioni sul file da restituire. Si noti che i flag non possono essere combinati. I possibili valori sono i seguenti:

Contrassegno Significato
QoCFileStatInformation (0x00000001) Il file system restituirà le informazioni sullo stato del file in una struttura QUERY_ON_CREATE_FILE_STAT_INFORMATION .
QoCFileLxInformation (0x00000002) Il file system restituirà informazioni simili a Linux estese in una struttura QUERY_ON_CREATE_FILE_LX_INFORMATION .
QoCFileEaInformation (0x00000004) Il file system restituirà gli attributi estesi (EA) in una struttura QUERY_ON_CREATE_EA_INFORMATION .
QoCFileUsnInformation (0x00000008) Il file system restituirà le informazioni USN in una struttura QUERY_ON_CREATE_USN_INFORMATION .
QoCFileSecurityInformation (0x00000010) Il file system restituirà le informazioni di sicurezza dei file in una struttura QUERY_ON_CREATE_SECURITY_INFORMATION .

[out] RetInfoSize

Puntatore a un ULONG che riceve le dimensioni, in byte, del buffer a cui punta RetInfoBuffer .

[out] RetInfoBuffer

Riceve un puntatore alla struttura InfoClass richiesta. Se il file system è in grado di elaborare la richiesta ma non riesce a trovare le informazioni sul file richieste, questo parametro è impostato su NULL.

Valore restituito

Codice restituito Descrizione
STATUS_SUCCESS Il file system ha restituito correttamente le informazioni sul file richieste.
STATUS_NOT_FOUND Il file system ha elaborato la richiesta, ma le informazioni richieste non erano presenti nel file o il file system non riconosce la richiesta di informazioni in InfoClass. Il chiamante non deve usare le API tradizionali del file system per richiedere le informazioni.
STATUS_NOT_SUPPORTED Il file system non è riuscito a recuperare le informazioni richieste. Questo errore si verifica quando il file system non supporta la richiesta di informazioni o LCP associato o perché FltRequestFileInfoOnCreateCompletion non è stato chiamato durante la pre-creazione del file. Il chiamante deve invece usare le API tradizionali del file system per riprovare a richiedere le informazioni.
STATUS_UNSUCCESSFUL Il file system ha ricevuto un errore durante il tentativo di recuperare le informazioni richieste. Il chiamante può provare a richiedere le informazioni tramite le normali API del file system, ma questo probabilmente avrà esito negativo.

Commenti

FltRequestFileInfoOnCreateCompletion e FltRetrieveFileInfoOnCreateCompletionEx consentono a un minifilter di ottenere informazioni su un file durante la creazione di file, evitando così il costo delle prestazioni di una query successiva che richiederebbe un attraversamento dello stack.

  • In fase di pre-creazione, il minifilter effettua una chiamata a FltRequestFileInfoOnCreateCompletion con una combinazione di InfoClassFlags di input che identificano le informazioni richieste.
  • Il file system alloca le strutture appropriate e inserisce le informazioni richieste, se supportate, mentre elabora la creazione.
  • Dopo la creazione, il minifilter chiama FltRetrieveFileInfoOnCreateCompletionEx per ottenere le informazioni richieste nella chiamata di pre-creazione. Se il minifilter ha richiesto più di un tipo di informazioni, deve chiamare FltRetrieveFileInfoOnCreateCompletionEx una volta per ogni tipo di informazioni. Ad esempio:

// Pre-create:
NTSTATUS status;
status = FltRequestFileInfoOnCreateCompletion( Filter,
                                               CallbackData,
                                               QoCFileStatInformation
                                                | QoCFileLxInformation
                                                | QoCFileEaInformation 
                                                | QoCFileUsnInformation );

// Post-create:
NTSTATUS status;
ULONG fileStatSize, fileLxSize, fileEaSize;
QUERY_ON_CREATE_FILE_STAT_INFORMATION* fileStatInfo;
QUERY_ON_CREATE_FILE_LX_INFORMATION* fileLxInfo;
QUERY_ON_CREATE_EA_INFORMATION* fileEaInfo;
QUERY_ON_CREATE_USN_INFORMATION* fileUsnInfo;
QUERY_ON_CREATE_SECURITY_INFORMATION* fileSecurityInfo;

status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileStatInformation,
                                                  &fileStatSize,
                                                  &fileStatInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileLxInformation,
                                                  &fileLxSize,
                                                  &fileLxInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileEaInformation, 
                                                  &fileEaSize, 
                                                  &fileEaInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileUsnInformation, 
                                                  &fileUsnInfo, 
                                                  &fileUsnInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileSecurityInformation,
                                                  &fileSecurityInfo,
                                                  &fileSecurityInfo);

Una volta restituito FltRetrieveFileInfoOnCreateCompletionEx , un minifilter può scrivere nel buffer a cui punta RetInfoBuffer . Tutti i filtri precedenti al minifilter vedranno le modifiche se chiamano FltRetrieveFileInfoOnCreateCompletionEx nel tipo di informazioni modificato.

Requisiti

Requisito Valore
Client minimo supportato Windows 10, versione 1809
Intestazione fltkernel.h

Vedi anche

ECP_LIST

FLT_CALLBACK_DATA

FltRequestFileInfoOnCreateCompletion

QUERY_ON_CREATE_EA_INFORMATION

QUERY_ON_CREATE_FILE_STAT_INFORMATION

QUERY_ON_CREATE_FILE_LX_INFORMATION