Función FsRtlMdlReadDev (ntifs.h)
La rutina FsRtlMdlReadDev devuelve una lista de descriptores de memoria (MDL) que apunta directamente al intervalo de bytes especificado en la caché de archivos.
Sintaxis
BOOLEAN FsRtlMdlReadDev(
[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
);
Parámetros
[in] FileObject
Puntero a un objeto de archivo para el archivo almacenado en caché.
[in] FileOffset
Puntero a una variable que especifica el desplazamiento de bytes inicial dentro del archivo almacenado en 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 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 intervalo que ya está bloqueado de forma no exclusiva, el valor de este parámetro debe ser la clave para ese bloqueo noclusivo. El bloqueo debe ser mantenido por el proceso primario del subproceso que realiza la llamada. 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).
[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.
[ in, optional ] DeviceObject
Puntero a un objeto de dispositivo en el que se abre el archivo.
Valor devuelto
La rutina
Observaciones
El FsRtlMdlReadDev rutina omite el mecanismo IRP habitual y devuelve una lista vinculada de listas de descriptores de memoria (MDL) que el autor de la llamada puede usar para acceder directamente a los datos del archivo almacenados en caché. Esta operación no copia ni almacena en búfer datos y, por tanto, es mucho más rápido que una lectura normal.
La rutina es similar a CcMdlRead y FltFastIoMdlRead.
FltFastIoMdlRead, CcMdlReady FsRtlMdlReadDev bloquear las páginas que contienen los datos de archivo almacenados en caché para evitar que el sistema intercambie estas páginas al archivo de página. Las páginas permanecen bloqueadas en la memoria hasta que el autor de la llamada invoca la rutina de
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 | <= APC_LEVEL |