Función FltCbdqInsertIo (fltkernel.h)
FltCbdqInsertIo inserta la estructura de datos de devolución de llamada para una operación de E/S en una cola de datos de devolución de llamada del controlador de filtro.
Sintaxis
NTSTATUS FLTAPI FltCbdqInsertIo(
[in, out] PFLT_CALLBACK_DATA_QUEUE Cbdq,
[in] PFLT_CALLBACK_DATA Cbd,
[in, optional] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
[in, optional] PVOID InsertContext
);
Parámetros
[in, out] Cbdq
Puntero a la cola de datos de devolución de llamada segura para cancelación del autor de la llamada. Esta cola debe haberse inicializado llamando a FltCbdqInitialize.
[in] Cbd
Puntero a la estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) para la operación de E/S que se va a poner en cola. La operación debe ser una operación de E/S basada en IRP.
[in, optional] Context
Variable proporcionada por el autor de la llamada que recibe un puntero de contexto opaco para la solicitud de E/S. Los controladores de filtro pueden usar este puntero para identificar un elemento específico de la cola para que se pueda quitar llamando a FltCbdqRemoveIo. Si el controlador de filtro no es necesario para quitar solicitudes de E/S concretas de la cola, este parámetro puede ser NULL.
[in, optional] InsertContext
Puntero de contexto que se va a pasar a la rutina de devolución de llamada CbdqInsertIo del controlador de filtro.
Valor devuelto
FltCbdqInsertIo devuelve STATUS_SUCCESS cuando la estructura de datos de devolución de llamada se insertó en la cola de datos de devolución de llamada o en un valor NTSTATUS adecuado, como el siguiente:
Código devuelto | Descripción |
---|---|
STATUS_FLT_CBDQ_DISABLED | La estructura de datos de devolución de llamada no se insertó en la cola de datos de devolución de llamada porque la cola está deshabilitada actualmente. Para volver a habilitar la cola, llame a FltCbdqEnable. Se trata de un código de error. |
Nota
En el caso de éxito, FltCbdqInsertIo devuelve cualquier devolución de llamada insertIo del filtro; Por ejemplo, un filtro puede devolver STATUS_SUCCESS o STATUS_PENDING para indicar que se ha realizado correctamente. Es importante que el filtro sea autocongruente en el valor que use para indicar que se ha realizado correctamente.
Comentarios
FltCbdqInsertIo inserta la estructura de datos de devolución de llamada (FLT_CALLBACK_DATA) especificada en una cola de datos de devolución de llamada del controlador de filtro.
- Tenga en cuenta que hay una posible condición de carrera entre un controlador de filtro que inserta los datos de devolución de llamada y el IRP asociado que se va a cancelar. Esto se puede evitar invocando inmediatamente la rutina de cancelación de la cola si el IRP ya se ha cancelado.
Los controladores de filtro pueden usar las rutinas FltCbdqXxx para implementar una cola de datos de devolución de llamada para operaciones de E/S basadas en IRP. Mediante el uso de estas rutinas, los controladores de filtro 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 filtro.
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 .
Una cola de datos de devolución de llamada se inicializa mediante una llamada a FltCbdqInitialize. FltCbdqInsertIo usa las funciones proporcionadas en la tabla de distribución de la cola para bloquear la cola e insertar la estructura de datos de devolución de llamada en la cola. La propia operación de inserción se realiza mediante la rutina CbdqInsertIo de la cola.
Consulte FltCbdqInitialize para obtener más información sobre cómo crear una cola de datos de devolución de llamada. Use FltCbdqRemoveIo para quitar una solicitud de E/S determinada de la cola o FltCbdqRemoveNextIo para quitar la siguiente solicitud de E/S disponible.
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 FltCbdqInsertIo 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.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Encabezado | fltkernel.h (incluya Fltkernel.h) |
IRQL | vea la sección Comentarios. |