Función FltFastIoPrepareMdlWrite (fltkernel.h)

La rutina FltFastIoPrepareMdlWrite devuelve una lista vinculada de listas de descriptores de memoria (MDL) que apuntan al intervalo especificado de datos de archivo almacenados en caché para escribir datos directamente en la memoria caché.

Sintaxis

BOOLEAN FLTAPI FltFastIoPrepareMdlWrite(
        PFLT_INSTANCE    InitiatingInstance,
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  ULONG            LockKey,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

Parámetros

InitiatingInstance

Puntero de instancia opaco para el autor de la llamada. Este parámetro es obligatorio y no puede ser NULL.

[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 leer de la memoria caché.

[in] LockKey

Valor asociado al intervalo de bytes que se va a bloquear. Si el intervalo para 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 intervalo que ya está bloqueado de forma no exclusiva, 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 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

La rutina FltFastIoPrepareMdlWrite devuelve TRUE si la operación se realiza correctamente y FALSE si se produce un error en la operación.

Comentarios

FltFastIoPrepareMdlWrite es similar a FsRtlCopyWrite, salvo que FltFastIoPrepareMdlWrite no copia datos en la memoria caché. En su lugar, las páginas físicas que el autor de la llamada sobrescribirá están bloqueadas en la memoria y FltFastIoPrepareMdlWrite devuelve una o varias listas de descriptores de memoria (MDL) que apuntan al intervalo de bytes especificado. Las páginas bloqueadas permanecen bloqueadas hasta que el autor de la llamada llama a FltFastIoMdlWriteComplete.

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

Incluso si se produce un error en la llamada a FltFastIoPrepareMdlWrite , es posible que se hayan asignado uno o varios MDL. El autor de la llamada puede examinar el valor de IoStatus.Information para determinar si se ha producido. Si lo tiene, el autor de la llamada debe llamar a FltFastIoMdlWriteComplete para liberar los MDL asignados.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado fltkernel.h (incluya Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Consulte también

FltFastIoMdlWriteComplete

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe