Compartir a través de


Función FltRequestOperationStatusCallback (fltkernel.h)

FltRequestOperationStatusCallback devuelve información de estado para la operación de E/S especificada.

Sintaxis

NTSTATUS FLTAPI FltRequestOperationStatusCallback(
  [in]           PFLT_CALLBACK_DATA                 Data,
  [in]           PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine,
  [in, optional] PVOID                              RequesterContext
);

Parámetros

[in] Data

Puntero a la estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) para la operación de E/S. Este parámetro es obligatorio y no puede ser NULL.

[in] CallbackRoutine

Puntero a una rutina de devolución de llamada a la que el Administrador de filtros llama después de que IoCallDriver devuelva. Este parámetro es obligatorio y no puede ser NULL.

[in, optional] RequesterContext

Puntero de contexto que se va a pasar a CallbackRoutine. Este parámetro es opcional y puede ser NULL.

Valor devuelto

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

Código devuelto Descripción
STATUS_FLT_DELETING_OBJECT
La instancia del controlador de minifiltro se está descomponiéndose. Se trata de un código de error.
STATUS_INSUFFICIENT_RESOURCES
FltRequestOperationStatusCallback encontró un error de asignación de grupo. Se trata de un código de error.
STATUS_INVALID_PARAMETER
Se llamó a FltRequestOperationStatusCallback desde una rutina que no era una rutina de devolución de llamada de preoperación (PFLT_PRE_OPERATION_CALLBACK) o la operación de E/S era una solicitud de IRP_MJ_CLOSE. Se trata de un código de error.

Comentarios

Un controlador de minifiltro puede llamar a FltRequestOperationStatusCallback para una operación de E/S basada en IRP para obtener el valor de estado que IoCallDriver devolvió para la operación.

La mayoría de los controladores de minifiltro nunca necesitan llamar a FltRequestOperationStatusCallback. Normalmente, un controlador de minifiltro solo llama a esta rutina para determinar si se concedió un interbloqueo solicitado.

Solo se puede llamar a FltRequestOperationStatusCallback desde una rutina de devolución de llamada (PFLT_PRE_OPERATION_CALLBACK) del controlador de minifiltro.

Solo se puede llamar a FltRequestOperationStatusCallback para operaciones no basadas en IRP IRP_MJ_CLOSE. Para determinar si la operación es una operación basada en IRP, use la macro FLT_IS_IRP_OPERATION .

Si la operación basada en IRP es una solicitud IRP_MJ_CLOSE, se devuelve STATUS_INVALID_PARAMETER.

FltRequestOperationStatusCallback copia el contenido del bloque de parámetros de E/S (FLT_IO_PARAMETER_BLOCK) en el miembro Iopb de los datos de devolución de llamada (FLT_CALLBACK_DATA), y se trata de los datos de devolución de llamada que el Administrador de filtros pasará a la rutina especificada en el parámetro CallbackRoutine . Los datos copiados representan una instantánea del bloque de parámetros de E/S en el momento en que la rutina de devolución de llamada de preoperación (PFLT_PRE_OPERATION_CALLBACK) llama a FltRequestOperationStatusCallback. Si la rutina de devolución de llamada de preoperación cambia el bloque de parámetros de E/S después de llamar a FltRequestOperationStatusCallback, el bloque de parámetros de E/S que el Administrador de filtros pasa a CallbackRoutine será diferente del bloque de parámetros de E/S que el controlador de filtro pasa a la pila de controladores cuando llama a IoCallDriver.

En el código de ejemplo siguiente de una rutina de devolución de llamada de preoperación se muestra cómo puede ocurrir esto:

PFLT_CALLBACK_DATA Data;
PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine;
PVOID RequesterContext;
...
if (iopb->MajorFunction == IRP_MJ_READ) {
    FltRequestOperationStatusCallback (Data, CallbackRoutine, RequesterContext);
 Data->Iopb->Parameters.Read.ReadBuffer = newBuffer;
    ...
}

En el ejemplo, el búfer de lectura se cambia después de la llamada a FltRequestOperationStatusCallback, por lo que cuando el Administrador de filtros llama a CallbackRoutine, pasará un puntero al búfer antiguo en lugar del nuevo.

El Administrador de filtros llama a callbackRoutine dado en el contexto del subproceso de origen en IRQL <= APC_LEVEL.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado fltkernel.h (incluya Fltkernel.h)
Library Fltmgr.lib
Archivo DLL Fltmgr.sys
IRQL <= APC_LEVEL

Consulte también

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

IoCallDriver

PFLT_GET_OPERATION_STATUS_CALLBACK

PFLT_PRE_OPERATION_CALLBACK