Condividi tramite


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

Operazioni IOCTL e PNRTL basate su IRP

Operazioni di I/O basate su IRP senza buffer