Share via


codice di controllo FSCTL_FILE_LEVEL_TRIM

Il codice di controllo FSCTL_FILE_LEVEL_TRIM fornisce un metodo per tagliare gli intervalli di dati con in un file. Gli intervalli di ritaglio dei file vengono convertiti nel dispositivo di archiviazione sottostante che consente di ottimizzare l'organizzazione delle risorse per migliorare le prestazioni di accesso. Una richiesta di FSCTL_FILE_LEVEL_TRIM consente a un file di disco virtuale di rimanere allocato a una dimensione fissa mentre l'archiviazione fisica di ridimensionamento corrisponde agli intervalli di dati liberati sul disco virtuale.

Per eseguire questa operazione, chiamare FltFsControlFile o ZwFsControlFile con i parametri seguenti.

Parametri

  • Istanza [in]: Solo FltFsControlFile . Puntatore istanza opaca per il chiamante. Questo parametro è obbligatorio e non può essere NULL.

  • FileObject [in]: Solo FltFsControlFile . Puntatore a oggetti file al file con i dati da tagliare. Questo parametro è obbligatorio e non può essere NULL.

  • FileHandle [in]: ZwFsControlFile solo. Handle di file del file con i dati da tagliare. Questo parametro è obbligatorio e non può essere NULL.

  • FsControlCode [in]: Codice di controllo per l'operazione. Usare FSCTL_FILE_LEVEL_TRIM per questa operazione.

  • InputBuffer [in]: puntatore a una struttura FILE_LEVEL_TRIM che contiene una matrice di intervalli di tagli per il file.

  • InputBufferLength [in]: Dimensioni, in byte, del buffer a cui punta il parametro InputBuffer . Questo valore deve essere almeno sizeof(FILE_LEVEL_TRIM).

  • OutputBuffer [out]: puntatore a una struttura di FILE_LEVEL_TRIM_OUTPUT facoltativa che riceve il risultato dell'operazione di taglio.

  • OutputBufferLength [out]: Dimensioni, in byte, del buffer a cui punta il parametro OutputBuffer . Questo valore deve essere almeno sizeof(FILE_LEVEL_TRIM_OUTPUT) se FILE_LEVEL_TRIM_OUTPUT è incluso in OutputBuffer. In caso contrario, questo valore è impostato su 0.

Blocco dello stato

FltFsControlFile o ZwFsControlFile restituisce STATUS_SUCCESS o eventualmente uno dei valori seguenti.

Codice Significato
STATUS_INVALID_PARAMETER Il file da tagliare è compresso o crittografato, la lunghezza del buffer di input o di output non è valida o non vengono specificati intervalli di taglio.
STATUS_INSUFFICIENT_RESOURCES Non è riuscita un'allocazione di risorse interna.
STATUS_FILE_LOCK_CONFLICT Un intervallo di ritaglio fa parte di un intervallo di byte bloccato in precedenza.
STATUS_VOLUME_DISMOUNTED Il volume in cui risiede il file non è montato.
STATUS_PURGE_FAILED L'eliminazione della cache non è riuscita per un intervallo di taglio.
STATUS_NO_RANGES_PROCESSED Non sono stati elaborati intervalli nella matrice dell'intervallo di taglio.

Commenti

L'esecuzione di tagli su determinati dispositivi di archiviazione può migliorare significativamente le prestazioni di scrittura future. Trim restituisce anche le risorse al pool di allocazione nei sistemi di archiviazione con provisioning sottile. Quando i file vengono eliminati in un disco virtuale, le dimensioni del file del disco virtuale stesso non vengono modificate. Gli intervalli di dati liberati sul disco virtuale non vengono eliminati nell'archiviazione fisica in cui risiede il file del disco virtuale. Un dispositivo disco virtuale può inviare una notifica al file system che alcuni intervalli di dati in un file di disco virtuale possono essere ritagliati nel dispositivo di archiviazione fisica con una richiesta di FSCTL_FILE_LEVEL_TRIM . Il file system emetterà quindi una richiesta di taglio all'archiviazione fisica. Una richiesta di FSCTL_FILE_LEVEL_TRIM può essere rilasciata anche dalle applicazioni di servizio che gestiscono i file di scambio di database o memoria.

Il codice di controllo FSCTL_FILE_LEVEL_TRIM tenterà di tagliare gli intervalli di byte selezionati di un file da un dispositivo di archiviazione. Gli intervalli di byte sono contenuti nella matrice Range nella struttura FILE_LEVEL_TRIM . Incluso nella matrice Range sono una o più strutture FILE_LEVEL_TRIM_RANGE .

L'inclusione di intervalli sovrapposti nella matrice di intervallo non è necessariamente una condizione di errore. Ciò dipende dal modo in cui l'elaborazione dell'estensione viene gestita dall'archiviazione sottostante.

Gli intervalli ritagliati vengono eliminati come pagine dalla cache del file system. Per corrispondere alle dimensioni della pagina della cache, la lunghezza di un intervallo di ritaglio viene impostata su un multiplo di PAGE_SIZE. Inoltre, se un offset di intervallo di ritaglio non inizia a un limite di pagina, viene allineato al limite di pagina successivo. Con questi vincoli, le lunghezze dell'intervallo di taglio ridurranno quando gli offset non sono allineati a pagine o lunghezze non sono più dimensioni di pagina. Una lunghezza dell'intervallo di taglio può ridurre a 0 se la lunghezza originale è minore di due pagine e l'offset non è allineato a pagina.

Se un intervallo di ritaglio viene specificato o modificato a pagina oltre la fine del file (EOF), l'intervallo viene ignorato. Tuttavia, un offset di intervallo allineato prima di EOF, ma con una lunghezza estesa in passato EOF verrà modificato in una dimensione di pagina multipla <= EOF.

Il livello di file non è supportato per i file compressi o crittografati (file con ATTRIBUTE_FLAG_COMPRESSION_MASK o ATTRIBUTE_FLAG_ENCRYPTED set di attributi).

Viene eseguito un taglio di file all'esterno di qualsiasi transazione. Impossibile eseguire il rollback dell'operazione di taglio.

Con i file sparse (file con il set di attributi ATTRIBUTE_FLAG_SPARSE ), viene ignorato un intervallo di ritaglio in una parte non allocata del file.

Se incluso in OutputBuffer, il membro NumRangesProcessed del FILE_LEVEL_TRIM_OUTPUT indicherà il numero di intervalli di taglio elaborati correttamente. Se si verifica un errore durante l'elaborazione degli intervalli di taglio, NumRangesProcessed specifica l'indice iniziale degli intervalli rimanenti non elaborati, terminando con il membro NumRanges di FILE_LEVEL_TRIM - 1.

Requisiti

Tipo di requisito Requisito
Client minimo supportato Windows 8
Intestazione Ntifs.h (include Ntifs.h o Fltkernel.h)

Vedi anche

FILE_LEVEL_TRIM

FILE_LEVEL_TRIM_OUTPUT

FILE_LEVEL_TRIM_RANGE

FltCreateFile

FltFsControlFile

ZwCreateFile

ZwFsControlFile