Funzione FsRtlMdlReadEx (ntifs.h)

La routine FsRtlMdlReadEx esegue una lettura MDL memorizzata nella cache veloce. Se i dati richiesti non vengono memorizzati nella cache, la routine torna a un'operazione di lettura MDL basata su IRP.

Sintassi

NTSTATUS FsRtlMdlReadEx(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  ULONG            LockKey,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

Parametri

[in] FileObject

Puntatore all'oggetto file.

[in] FileOffset

Puntatore a una variabile che specifica l'offset dei byte iniziale all'interno del file memorizzato nella cache che contiene i dati.

[in] Length

Lunghezza in byte dei dati da leggere dalla cache.

[in] LockKey

Valore associato all'intervallo di byte da bloccare. Se l'intervallo da bloccare si sovrappone a un altro intervallo già bloccato con un blocco non non esclusivo oppure se l'intervallo da leggere è un sottoinsieme di un altro intervallo già bloccato in modo non esclusivo, il valore in questo parametro deve essere la chiave per tale blocco non esclusivo Il blocco deve essere mantenuto dal processo padre del thread chiamante. In caso contrario, questo parametro non ha alcun effetto.

[out] MdlChain

Indirizzo di una variabile che riceve un puntatore a un elenco collegato di elenchi di descrittori di memoria (MDL). MdlChain deve essere inizializzato su NULL prima della chiamata a FsRtlMdlReadEx.

[out] IoStatus

Puntatore a una struttura IO_STATUS_BLOCK che, nell'output, contiene lo stato del trasferimento. Se l'operazione ha esito positivo, IoStatus.Status è impostato su STATUS_SUCCESS. In caso contrario, viene impostato su un codice di errore NTSTATUS appropriato. IoStatus.Information è impostato sul numero effettivo di byte bloccati dalla routine.

Valore restituito

FsRtlMdlReadEx restituisce STATUS_SUCCESS o un valore NTSTATUS appropriato, ad esempio uno dei seguenti:

Codice restituito Descrizione
STATUS_INSUFFICIENT_RESOURCES Impossibile allocare l'IRP per una lettura basata su IRP.

Commenti

Se l'I/O veloce è disponibile dal file system, la routine FsRtlMdlReadEx ignora il consueto meccanismo di lettura IRP e restituisce un elenco collegato di elenchi di descrittori di memoria (MDL) che il chiamante può usare per accedere direttamente ai dati dei file memorizzati nella cache. Questa operazione non copia o memorizza nel buffer i dati e pertanto è molto più veloce di una lettura normale. Se l'I/O veloce non è abilitato, FsRtlMdlReadEx genererà una lettura MDL basata su IRP sincrona e restituirà gli elenchi di dati mdls dalla richiesta.

Le pagine descritte dagli ELENCHI di dati dati sono bloccate in memoria, ma non mappate nello spazio di sistema. Il chiamante può eseguire questo mapping chiamando MmGetSystemAddressForMdlSafe.

Analogamente a CcMdlRead, la routine FsRtlMdlReadEx blocca le pagine che contengono i dati dei file memorizzati nella cache per impedire al sistema di scambiare queste pagine nel file di pagina. Le pagine rimangono bloccate in memoria fino a quando il chiamante richiama la routine CcMdlReadComplete .

Requisiti

Requisito Valore
Client minimo supportato Windows 8
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Vedi anche

CcMdlRead

CcMdlReadComplete

IO_STATUS_BLOCK

MmGetSystemAddressForMdlSafe