Compartir a través de


Función FsRtlPrepareMdlWriteEx (ntifs.h)

La rutina FsRtlPrepareMdlWriteEx devuelve una lista vinculada de listas de descriptores de memoria (MDL) que apuntan al intervalo especificado de datos de archivos almacenados en caché para escribir datos directamente en la memoria caché. Si la compatibilidad con la memoria caché para la escritura no está disponible, la rutina se revierte a una operación de escritura MDL basada en IRP.

Sintaxis

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

Parámetros

[in] FileObject

Puntero al objeto de archivo.

[in] FileOffset

Puntero a un valor que especifica el desplazamiento de bytes inicial dentro de la memoria caché que contiene los datos.

[in] Length

Longitud en bytes de los datos que se van a escribir en la memoria caché.

[in] LockKey

Valor asociado al intervalo de bytes que se va a bloquear. Si el intervalo que se va a bloquear se superpone a otro intervalo que ya está bloqueado con un bloqueo noclusivo, o si el intervalo que se va a leer es un subrango de otro rango que ya está bloqueado de forma noclusiva, el valor de este parámetro debe ser la clave para ese bloqueo noclusivo. El proceso primario del subproceso que realiza la llamada debe mantener el bloqueo. De lo contrario, este parámetro no tiene ningún efecto.

[out] MdlChain

En la salida, un puntero a una lista vinculada de listas de descriptores de memoria (MDL) que apuntan al intervalo de bytes dentro de los datos almacenados en caché.

[out] IoStatus

Puntero a una estructura de IO_STATUS_BLOCK que, en la salida, contiene el estado de la transferencia. Si la operación se realiza correctamente, ioStatus.Status se establece en STATUS_SUCCESS. De lo contrario, se establece en un código de error NTSTATUS adecuado. ioStatus.Information se establece en el número real de bytes que la rutina bloqueó correctamente.

Valor devuelto

FsRtlPrepareMdlWriteEx devuelve STATUS_SUCCESS o un valor de NTSTATUS adecuado , como uno de los siguientes:

Código devuelto Descripción
STATUS_INSUFFICIENT_RESOURCES
No se pudo asignar un IRP para la escritura basada en IRP.

Observaciones

Si la E/S rápida está disponible para el sistema de archivos, el FsRtlPrepareMdlWriteEx rutina omitirá el mecanismo de escritura IRP habitual y devolverá una lista vinculada de listas de descriptores de memoria (MDL) que el autor de la llamada puede usar para escribir datos directamente en la caché de archivos. En lugar de copiar datos almacenados en búfer en la memoria caché, las páginas físicas que sobrescribirá el autor de la llamada se bloquean en la memoria y se pueden escribir directamente. FsRtlPrepareMdlWriteEx devuelve una o varias listas de descriptores de memoria (MDL) que apuntan al intervalo de bytes especificado.

Si la E/S rápida no está habilitada, FsRtlPrepareMdlWriteEx generará una preparación de escritura MDL basada en IRP sincrónica y devolverá las MDL asignadas a partir de la solicitud.

Las páginas a las que apuntan los MDL están bloqueadas en la memoria, pero no están asignadas en el espacio del sistema. El autor de la llamada puede realizar esta asignación llamando a MmGetSystemAddressForMdlSafe.

Cada llamada a FsRtlPrepareMdlWriteEx debe ir seguida de una llamada a CcMdlWriteComplete.

Requisitos

Requisito Valor
de la plataforma de destino de Universal
encabezado de ntifs.h (incluya Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL PASSIVE_LEVEL

Consulte también

CcMdlWriteComplete

CcPrepareMdlWrite

MmGetSystemAddressForMdlSafe