Función FltGetSwappedBufferMdlAddress (fltkernel.h)
La rutina FltGetSwappedBufferMdlAddress devuelve la dirección de la lista de descriptores de memoria (MDL) de un búfer intercambiado por un controlador de minifiltro.
Sintaxis
PMDL FltGetSwappedBufferMdlAddress(
[in] PFLT_CALLBACK_DATA CallbackData
);
Parámetros
[in] CallbackData
Puntero a la estructura de datos de devolución de llamada para la operación.
Valor devuelto
FltGetSwappedBufferMdlAddress devuelve la dirección MDL del búfer intercambiado por el autor de la llamada. FltGetSwappedBufferMdlAddress devuelve NULL en los casos siguientes:
- La operación es una operación de E/S rápida. En una operación de E/S rápida, el búfer no puede tener una MDL.
- El búfer que ha intercambiado el autor de la llamada no tiene una MDL.
- El controlador minifiltro no ha intercambiado búferes en la rutina de devolución de llamada de preoperación.
Comentarios
Un controlador de minifiltro que intercambia en un nuevo búfer en una rutina de devolución de llamada de preoperación puede obtener la dirección MDL del búfer llamando a FltGetSwappedBufferMdlAddress desde la rutina de devolución de llamada de postoperación correspondiente.
La rutina FltGetSwappedBufferMdlAddress es necesaria porque la rutina de devolución de llamada de postoperación recibe una estructura de datos de devolución de llamada que contiene el búfer original y la dirección MDL, no las que se intercambiaron por la rutina de devolución de llamada previa de la llamada del autor de la llamada.
Es posible que FltGetSwappedBufferMdlAddress devuelva un valor MDL distinto de NULL aunque el autor de la llamada no haya creado una MDL para el búfer en el que ha intercambiado. Esto sucede cuando se crea un MDL para el búfer mediante un controlador de minifiltro, un controlador de filtro heredado o un controlador del sistema de archivos que está debajo del autor de la llamada en el controlador de minifiltro o la pila de controladores del sistema de archivos.
También es posible que FltGetSwappedBufferMdlAddress devuelva un valor MDL que no sea NULL aunque el autor de la llamada no intercambie en un nuevo búfer en su rutina de devolución de llamada de preoperación. Esto sucede en las operaciones, como la paginación de E/S, donde el búfer es NULL y el autor de la llamada intercambia en una nueva dirección MDL.
El Administrador de filtros libera automáticamente la MDL para el búfer que el autor de la llamada ha intercambiado cuando la rutina de devolución de llamada de postoperación devuelve. Para evitar que esta MDL se libere, llame a FltRetainSwappedBufferMdlAddress.
FltGetSwappedBufferMdlAddress solo se puede llamar desde una rutina de devolución de llamada de postoperación.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Encabezado | fltkernel.h (incluya Fltkernel.h) |
Library | FltMgr.lib |
Archivo DLL | Fltmgr.sys |
IRQL | Cualquier nivel |