Condividi tramite


Metodi per l'accesso ai buffer dei dati

Una delle principali responsabilità degli stack di driver è il trasferimento dei dati tra applicazioni in modalità utente e dispositivi di un sistema. Il sistema operativo fornisce i tre metodi seguenti per l'accesso ai buffer dei dati:

I/O memorizzato nel buffer
Il sistema operativo crea un buffer di sistema non di pagina, uguale alla dimensione del buffer dell'applicazione. Per le operazioni di scrittura, gestione I/O copia i dati utente nel buffer di sistema prima di chiamare lo stack di driver. Per le operazioni di lettura, gestione I/O copia i dati dal buffer di sistema nel buffer dell'applicazione dopo che lo stack di driver completa l'operazione richiesta.

Per altre informazioni, vedere Uso dell'I/O con buffer.

I/O diretto
Il sistema operativo blocca il buffer dell'applicazione in memoria. Crea quindi un elenco di descrittori di memoria (MDL) che identifica le pagine di memoria bloccate e passa l'MDL allo stack di driver. I driver accedono alle pagine bloccate tramite MDL.

Per altre informazioni, vedere Uso di I/O diretto.

Senza buffer né I/O diretto
Il sistema operativo passa l'indirizzo iniziale e le dimensioni del buffer dell'applicazione allo stack di driver. Il buffer è accessibile solo dai driver eseguiti nel contesto del thread dell'applicazione.

Per altre informazioni, vedere Uso di i/O con buffer né diretto.

Per IRP_MJ_READ e richieste di IRP_MJ_WRITE , i driver specificano il metodo I/O usando i flag in ogni struttura DEVICE_OBJECT . Per altre informazioni, vedere Inizializzazione di un oggetto Device.

Per IRP_MJ_DEVICE_CONTROL e richieste di IRP_MJ_INTERNAL_DEVICE_CONTROL , il metodo I/O viene determinato dal valore TransferType contenuto in ogni valore IOCTL. Per altre informazioni, vedere Definizione dei codici di controllo di I/O.

Tutti i driver in uno stack di driver devono usare lo stesso metodo di accesso al buffer per ogni richiesta, tranne eventualmente per il driver di livello più alto (che può usare il metodo "nessuno", indipendentemente dal metodo usato dai driver inferiori).