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
FltRequestFileInfoOnCreateCompletion
QUERY_ON_CREATE_EA_INFORMATION