Informazioni sui segnaposto
Un segnaposto del file system è un file che rappresenta il contenuto effettivo di un file o una directory che risiede altrove. Questa ottimizzazione consente di recuperare il contenuto reale di un file o una directory altrove e recuperarlo su richiesta. Il contenuto reale include metadati, dati file e voci di directory.
I segnaposto possono essere file o directory. Possono contenere una parte dei metadati reali del file o della directory o una parte dei dati o delle voci di directory reali. I file segnaposto sono contrassegnati come file sparse con il set di bit FILE_ATTRIBUTE_SPARSE_FILE.
In genere, un segnaposto è un punto di riparse che un minifilter del file system possiede e gestisce. Il minifiltro proprietario è l'abilitatore della virtualizzazione e consente a un segnaposto di apparire e comportarsi come un file o una directory regolare nel file system. Questi driver di virtualizzazione intercettano le richieste di I/O sui segnaposto e facilitano un comportamento simile al file system. ProjFs e File cloud sono due esempi di piattaforme di virtualizzazione in Windows che usano segnaposto.
I minifiltri proprietari dei segnaposto sono in grado di gestire in modo appropriato tali richieste di I/O per soddisfare l'I/O. Ad esempio, se un'applicazione tenta di leggere un file segnaposto disidratato, il minifilter fornisce i dati del file per soddisfare la richiesta di I/O.
I minifiltri proprietari sono in grado di fornire solo la virtualizzazione per le richieste di I/O che hanno origine sopra di loro, dalla modalità utente o dai componenti sopra di essi nello stack di I/O.
I minifilter che non possiedono il segnaposto hanno la possibilità di eseguire operazioni di I/O destinate ai filtri seguenti usando API come FltReadFile, FltWriteFile e così via. Se un minifiltro non proprietario deve inviare una richiesta di I/O mirata a un file segnaposto da sotto il minifilter proprietario, il minifiltro proprietario non sarebbe in grado di soddisfare in modo appropriato la richiesta di I/O.
Ad esempio, se un filtro rilascia un file segnaposto di destinazione fltReadFile a un file segnaposto disidratato che il minifilter proprietario non viene visualizzato, il filtro di destinazione potrebbe ottenere un blocco di zero (0s) anziché i dati effettivi perché il segnaposto potrebbe essere un file sparse. Se il sistema memorizza nella cache una lettura che ha recuperato un blocco di 0s, questa lettura inquina la cache che potrebbe danneggiare i dati del file se il sistema scarica la cache inquinata nel disco. Di conseguenza, è imperativo che i minifiltri gestiscono i segnaposto in modo appropriato.