Registrar rutinas de devolución de llamada de preoperación y postoperación
Para registrar rutinas de devolución de llamada de preoperación y rutinas de devolución de llamada posteriores a la operación, un controlador de minifiltro realiza una sola llamada a FltRegisterFilter en su rutina DriverEntry . Para el parámetro Registration en FltRegisterFilter, el controlador de minifiltro pasa un puntero a una estructura de FLT_REGISTRATION . El miembro OperationRegistration de esta estructura contiene un puntero a una matriz de estructuras de FLT_OPERATION_REGISTRATION , una para cada tipo de operación de E/S que el controlador de minifiltro debe filtrar.
Cada FLT_OPERATION_REGISTRATION estructura de la matriz, excepto la última, contiene la siguiente información:
Código de función principal para la operación. Consulte FLT_PARAMETERS para obtener información sobre las operaciones de E/S y sus parámetros específicos del tipo de solicitud.
Para las operaciones de lectura y escritura (IRP_MJ_READ y IRP_MJ_WRITE), un conjunto de marcas que especifican si se omitirá la E/S almacenada en caché o la E/S de paginación o ambas para las operaciones de E/S basadas en IRP.
Puntos de entrada para hasta una rutina de devolución de llamada de preoperación y una rutina de devolución de llamada posterior a la operación
El último elemento de la matriz debe ser {IRP_MJ_OPERATION_END}.
En el ejemplo de código siguiente, que se toma del controlador de minifiltro de ejemplo scanner, se muestra una matriz de estructuras de FLT_OPERATION_REGISTRATION. El controlador de minifiltro de ejemplo scanner registra rutinas de devolución de llamada de preoperación y postoperación para IRP_MJ_CREATE y rutinas de devolución de llamada de preoperación para IRP_MJ_CLEANUP y operaciones de IRP_MJ_WRITE.
const FLT_OPERATION_REGISTRATION Callbacks[] = {
{IRP_MJ_CREATE,
0,
ScannerPreCreate,
ScannerPostCreate},
{IRP_MJ_CLEANUP,
0,
ScannerPreCleanup,
NULL},
{IRP_MJ_WRITE,
0,
ScannerPreWrite,
NULL},
{IRP_MJ_OPERATION_END}
};