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. FltCbdqInsertIo inicializa este contexto cuando la solicitud de E/S se inserta por primera vez en la cola. Este parámetro es necesario y debe ser distinto de NULL.

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.

Comentarios

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 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 por FltCbdqInsertIo.

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

Las rutinas 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 .

FltCbdqInitialize inicializa una cola de datos de devolución de llamada. 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 CbdqRemoveIo del controlador minifiltro.

Si la cola está protegida por un bloqueo de número en lugar de una variable de recurso o objeto de exclusión mutua, 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 Value
Plataforma de destino Universal
Encabezado fltkernel.h (incluya Fltkernel.h)
IRQL vea la sección Comentarios.

Consulte también

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveNextIo