Funzione FsRtlPrepareMdlWriteDev (ntifs.h)

La routine FsRtlPrepareMdlWriteDev restituisce un elenco collegato di elenchi di descrittori di memoria che puntano all'intervallo specificato di dati di file memorizzati nella cache per scrivere i dati direttamente nella cache.

Sintassi

BOOLEAN FsRtlPrepareMdlWriteDev(
  [in]             PFILE_OBJECT     FileObject,
  [in]             PLARGE_INTEGER   FileOffset,
  [in]             ULONG            Length,
  [in]             ULONG            LockKey,
  [out]            PMDL             *MdlChain,
  [out]            PIO_STATUS_BLOCK IoStatus,
  [ in, optional ] PDEVICE_OBJECT   DeviceObject
);

Parametri

[in] FileObject

Puntatore all'oggetto file.

[in] FileOffset

Puntatore a un valore che specifica l'offset dei byte iniziale all'interno della 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

Nell'output, un puntatore a un elenco collegato di elenchi di descrittori di memoria 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, viene impostato su un codice di errore NTSTATUS appropriato. IoStatus.Information è impostato sul numero effettivo di byte bloccati dalla routine.

[ in, optional ] DeviceObject

Puntatore a un oggetto dispositivo in cui viene aperto il file.

Valore restituito

La routine FsRtlPrepareMdlWriteDev restituisceTRUE se l'operazione ha esito positivo e FALSE se l'operazione non riesce.

Commenti

FsRtlPrepareMdlWriteDev è simile a FsRtlCopyWrite, ad eccezione del fatto che FsRtlPrepareMdlWriteDev non copia i dati nella cache. Al contrario, le pagine fisiche che il chiamante sovrascriveranno sono bloccate in memoria e FsRtlPrepareMdlWriteDev restituisce uno o più elenchi di descrittori di memoria che puntano all'intervallo di byte specificato. Le pagine bloccate rimangono bloccate finché il chiamante chiama FsRtlMdlWriteCompleteDev.

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

Anche se la chiamata a FsRtlPrepareMdlWriteDev ha esito negativo, potrebbe essere stato allocato uno o più mdls. Il chiamante può esaminare il valore di IoStatus.Information per determinare se si è verificato questo problema. In caso affermativo, il chiamante deve chiamare FsRtlMdlWriteCompleteDev per liberare gli MDLs allocati.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Vedi anche

FsRtlMdlWriteCompleteDev

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe