Compartir a través de


Función FltCbdqRemoveIo (fltkernel.h)

FltCbdqRemoveIo quita un elemento determinado de una cola de datos de devolución de llamada del controlador de minifiltro.

Sintaxis

PFLT_CALLBACK_DATA FLTAPI FltCbdqRemoveIo(
  [in, out] PFLT_CALLBACK_DATA_QUEUE            Cbdq,
  [in]      PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);

Parámetros

[in, out] Cbdq

Puntero a una cola de datos de devolución de llamada segura para cancelación. Esta cola debe haberse inicializado llamando a FltCbdqInitialize.

[in] Context

Puntero de contexto para el elemento que se va a quitar. Este contexto se inicializa mediante fltCbdqInsertIo cuando la solicitud de E/S se inserta por primera vez en la cola. Este parámetro es necesario y debe ser distinto deNULL.

Valor devuelto

FltCbdqRemoveIo devuelve un puntero a la estructura de datos de devolución de llamada de la solicitud de E/S que se quitó de la cola. Si no se encuentra ninguna solicitud de E/S coincidente o si la cola está vacía, FltCbdqRemoveIo devuelve NULL.

Observaciones

FltCbdqRemoveIo quita la estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) de una operación de E/S determinada de una cola de datos de devolución de llamada del controlador de minifiltro. fltCbdqRemoveIo solo se puede usar para eliminar una estructura de datos de devolución de llamada que tenga asociada una estructura de de contexto contexto. Esta asociación se crea cuando la estructura de datos de devolución de llamada se inserta en la cola de datos de devolución de llamada FltCbdqInsertIo.

Los controladores de minifiltro pueden usar las rutinas de FltCbdqXxx para implementar una cola de datos de devolución de llamada para las operaciones de E/S basadas en IRP. Con estas rutinas, los controladores de minifiltro pueden hacer que sus colas sean seguras; el sistema controla de forma transparente la cancelación de E/S para los controladores de minifiltro.

Las rutinas de FltCbdqXxx solo se pueden usar para las operaciones de E/S basadas en IRP. Para determinar si una estructura de datos de devolución de llamada determinada representa una operación de E/S basada en IRP, use la macro FLT_IS_IRP_OPERATION.

Una cola de datos de devolución de llamada se inicializa mediante FltCbdqInitialize. FltCbdqRemoveIo usa las rutinas proporcionadas en la tabla de distribución de la cola para bloquear la cola y quitar la estructura de datos de devolución de llamada de la cola. La operación de eliminación se realiza mediante la rutina de devolución de llamada del controlador de minifiltro CbdqRemoveIo.

Si la cola está protegida por un de bloqueo de número en lugar de un objeto de exclusión mutua o variable de recurso, el autor de la llamada de FltCbdqRemoveIo se puede ejecutar en IRQL <= DISPATCH_LEVEL. Si se usa una exclusión mutua o un recurso, el autor de la llamada debe ejecutarse en IRQL <= APC_LEVEL.

Existe una posible carrera entre el administrador de filtros que elimina una solicitud de E/S cancelada y el controlador de filtro lo quita porque se completó. Es importante tener en cuenta que el contexto de solicitud sigue siendo válido después de quitarse por primera vez, lo que provocará un error en un segundo intento de eliminación.

Requisitos

Requisito Valor
de la plataforma de destino de Universal
encabezado de fltkernel.h (incluya Fltkernel.h)
irQL Consulte la sección Comentarios.

Consulte también

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

fltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveNextIo