Condividi tramite


Funzione FsRtlPrepareMdlWriteEx (ntifs.h)

La routine FsRtlPrepareMdlWriteEx restituisce un elenco collegato di elenchi di descrittori di memoria (MDLs) che puntano all'intervallo specificato di dati di file memorizzati nella cache per scrivere i dati direttamente nella cache. Se il supporto della cache per la scrittura non è disponibile, la routine ripristina un'operazione di scrittura MDL basata su IRP.

Sintassi

NTSTATUS FsRtlPrepareMdlWriteEx(
  [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 un valore che specifica l'offset di byte iniziale all'interno della cache che contiene i dati.

[in] Length

Lunghezza in byte dei dati da scrivere nella 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 esclusivo o se l'intervallo da leggere è un intervallo secondario 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

Nell'output, un puntatore a un elenco collegato di elenchi di descrittori di memoria (MDLs) che puntano all'intervallo di byte all'interno dei dati memorizzati nella cache.

[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, è impostato su un NTSTATUS codice di errore appropriato. IoStatus.Information è impostato sul numero effettivo di byte bloccati dalla routine.

Valore restituito

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

Codice restituito Descrizione
STATUS_INSUFFICIENT_RESOURCES
Impossibile allocare un IRP per la scrittura basata su IRP.

Osservazioni

Se l'I/O veloce è disponibile per il file system, la routine FsRtlPrepareMdlWriteEx ignora il consueto meccanismo di scrittura IRP e restituisce un elenco collegato di elenchi di descrittori di memoria (MDL) che il chiamante può usare per scrivere dati direttamente nella cache dei file. Invece di copiare dati memorizzati nel buffer nella cache, le pagine fisiche che il chiamante sovrascriverà vengono bloccate in memoria e possono essere scritte direttamente in . FsRtlPrepareMdlWriteEx restituisce uno o più elenchi di descrittori di memoria (MDLs) che puntano all'intervallo di byte specificato.

Se l'I/O veloce non è abilitato, FsRtlPrepareMdlWriteEx genererà una preparazione di scrittura MDL basata su IRP sincrona e restituirà gli MDLs allocati dalla richiesta.

Le pagine a cui puntano gli elenchi di certificati sono bloccate in memoria, ma non sono mappate nello spazio di sistema. Il chiamante può eseguire questo mapping chiamando MmGetSystemAddressForMdlSafe.

Ogni chiamata a FsRtlPrepareMdlWriteEx deve essere seguita da una chiamata a CcMdlWriteComplete.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione ntifs.h (include Ntifs.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL PASSIVE_LEVEL

Vedere anche

CcMdlWriteComplete

CcPrepareMdlWrite

MmGetSystemAddressForMdlSafe