Función FltDecodeParameters (fltkernel.h)

FltDecodeParameters devuelve punteros a la dirección de la lista de descriptores de memoria (MDL), el puntero de búfer, la longitud del búfer y los parámetros de acceso deseados para una operación de E/S. Esto evita que los controladores de minifiltro tengan una instrucción switch para encontrar la posición de estos parámetros en rutinas auxiliares que acceden a la dirección MDL, el puntero del búfer, la longitud del búfer y el acceso deseado para varios tipos de operación.

Sintaxis

NTSTATUS FLTAPI FltDecodeParameters(
  [in]            PFLT_CALLBACK_DATA CallbackData,
  [out]           PMDL               **MdlAddressPointer,
  [out]           PVOID              **Buffer,
  [out]           PULONG             *Length,
  [out, optional] LOCK_OPERATION     *DesiredAccess
);

Parámetros

[in] CallbackData

Puntero a la estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) para la operación de E/S.

[out] MdlAddressPointer

Puntero a una variable proporcionada por el autor de la llamada que recibe un puntero al miembro MdlAddress (o OutputMdlAddress) del parámetro de datos de devolución de llamada (FLT_PARAMETERS) (tenga en cuenta que este miembro es en sí mismo un puntero). Este parámetro es opcional y puede ser NULL. Si la operación de E/S no tiene un campo MDL, este parámetro recibe NULL.

[out] Buffer

Puntero a una variable proporcionada por el autor de la llamada que recibe un puntero al miembro de búfer adecuado (según el código de función principal) en la estructura de parámetros de datos de devolución de llamada (tenga en cuenta que este miembro es en sí mismo un puntero).

[out] Length

Puntero a una variable proporcionada por el autor de la llamada que recibe un puntero al miembro de longitud del búfer en la estructura de parámetros de datos de devolución de llamada. Si la operación no tiene un campo de longitud, este parámetro recibe NULL.

[out, optional] DesiredAccess

Puntero a una variable proporcionada por el autor de la llamada que recibe el tipo de acceso adecuado para este tipo de operación de E/S, una de IoReadAccess, IoWriteAccess o IoModifyAccess. IoReadAccess significa que el controlador de minifiltro puede examinar el contenido del búfer, pero no puede cambiar el contenido en su lugar. IoWriteAccess y IoModifyAccess, que son equivalentes, significan que el controlador de minifiltro tiene acceso de lectura y escritura al búfer.

Valor devuelto

FltDecodeParameters devuelve STATUS_SUCCESS o un valor NTSTATUS adecuado, como el siguiente:

Código devuelto Descripción
STATUS_INVALID_PARAMETER La estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) representa una operación de E/S que no tiene ningún parámetro de búfer. Se trata de un código de error.

Comentarios

FltDecodeParameters devuelve punteros a los parámetros de una operación de E/S, en lugar de los valores de parámetro, para que el autor de la llamada pueda modificar los valores de los parámetros si lo desea.

FltDecodeParameters se puede usar para operaciones rápidas de E/S, así como operaciones basadas en IRP. No es significativo para las operaciones de devolución de llamada de filtro del sistema de archivos (FSFilter), ya que esas operaciones no tienen parámetros de búfer.

Las operaciones IOCTL y FSCTL pueden tener uno o dos búferes, dependiendo del método de almacenamiento en búfer utilizado. En los casos en los que la operación tiene dos búferes (y dos campos de longitud), FltDecodeParameters devuelve los campos OutputBuffer, OutputBufferLength o OutputMdlAddress según corresponda.

No se devuelven todos los cuatro parámetros para cada operación de E/S. Por ejemplo, para una solicitud de IRP_MJ_READ, FltDecodeParameters establece los parámetros de salida como se indica a continuación.

Parámetro Valor
MdlAddressPointer &(CallbackData-Iopb-Parameters.Read.MdlAddress>>)
Buffer &(CallbackData-Iopb-Parameters.Read.ReadBuffer>>)
Duración &(CallbackData-Iopb-Parameters.Read.Length>>)
DesiredAccess IoWriteAccess

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado fltkernel.h (incluya Fltkernel.h)
Library FltMgr.lib
IRQL Cualquier nivel

Consulte también

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer