Determinazione del metodo di memorizzazione nel buffer per un'operazione di I/O
Come i driver di dispositivo, i file system sono responsabili del trasferimento dei dati tra le applicazioni in modalità utente e i dispositivi di un sistema. Il sistema operativo fornisce i tre metodi seguenti per l'accesso ai buffer di dati:
In I/O memorizzato nel buffer, il gestore di I/O alloca un buffer di sistema per l'operazione da un pool non di paging. Il gestore di I/O copia i dati da questo buffer di sistema nel buffer utente dell'applicazione e viceversa, nel contesto del thread che ha avviato l'operazione di I/O.
In I/O diretto, il gestore di I/O esegue il probe e blocca il buffer utente. Crea quindi un elenco di descrittori di memoria (MDL) per eseguire il mapping del buffer bloccato. Il gestore di I/O accede al buffer nel contesto del thread che ha avviato l'operazione di I/O.
In I/O né memorizzato nel buffer né diretto, il gestore di I/O non alloca un buffer di sistema e non blocca o esegue il mapping del buffer utente. In alternativa, passa semplicemente l'indirizzo virtuale dello spazio utente originale del buffer allo stack del file system. I driver sono responsabili dell'esecuzione nel contesto del thread di avvio e della validità degli indirizzi del buffer.
I driver minifilter devono convalidare qualsiasi indirizzo nello spazio utente prima di provare a usarlo. Gestione I/O e gestione filtri non convalidano tali indirizzi e non convalidano i puntatori incorporati nei buffer passati ai driver minifilter.
Tutti i file system Microsoft standard non usano né I/O memorizzati nel buffer né diretti per la maggior parte dell'elaborazione di I/O.
Per altre informazioni sui metodi di buffering, vedere Metodi per l'accesso ai buffer di dati.
Per le operazioni di I/O basate su IRP, il metodo di buffering usato è specifico dell'operazione ed è determinato dai fattori seguenti:
Tipo di operazione di I/O da eseguire
Valore del membro Flags della struttura DEVICE_OBJECT per il volume del file system
Per le operazioni di controllo I/O (IOCTL) e CONTROLLO FILE SYSTEM (SSHTL), il valore del parametro TransferType passato alla macro CTL_CODE quando è stato definito IOCTL o MAPPINGTL
Le operazioni di I/O veloci con buffer usano sempre operazioni di I/O non memorizzate nel buffer né dirette.
Le operazioni di callback del file system non dispongono di buffer.
Contenuto della sezione
Operazioni che possono essere IRP-Based o operazioni di I/O veloci
Operazioni di I/O basate su IRP che obbediscono ai flag oggetto dispositivo
Operazioni di I/O basate su IRP che usano sempre operazioni di I/O memorizzate nel buffer
Operazioni di I/O basate su IRP che usano sempre né i/o memorizzati nel buffer né diretto