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 |
---|---|
|
La instancia del controlador de minifiltro se está descomponiéndose. Se trata de un código de error. |
|
FltRequestOperationStatusCallback encontró un error de asignación de grupo. Se trata de un código de error. |
|
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 |