Inscription de routines de rappel de préopération et de post-opération
Pour inscrire des routines de rappel de préopération et des routines de rappel après opération, un pilote minifilter effectue un seul appel à FltRegisterFilter dans sa routine DriverEntry . Pour le paramètre Registration dans FltRegisterFilter, le pilote minifilter passe un pointeur vers une structure FLT_REGISTRATION . Le membre OperationRegistration de cette structure contient un pointeur vers un tableau de structures FLT_OPERATION_REGISTRATION , une pour chaque type d’opération d’E/S que le pilote minifilter doit filtrer.
Chaque structure FLT_OPERATION_REGISTRATION dans le tableau, à l’exception de la dernière, contient les informations suivantes :
Code de la fonction principale pour l’opération. Consultez FLT_PARAMETERS pour plus d’informations sur les opérations d’E/S et leurs paramètres spécifiques au type de requête.
Pour les opérations de lecture et d’écriture (IRP_MJ_READ et IRP_MJ_WRITE), un ensemble d’indicateurs qui spécifient s’il faut ignorer les E/S mises en cache ou les E/S de pagination ou les deux pour les opérations d’E/S basées sur IRP
Points d’entrée pour jusqu’à une routine de rappel de préopération et une routine de rappel postopération
Le dernier élément du tableau doit être {IRP_MJ_OPERATION_END}.
L’exemple de code suivant, qui est extrait de l’exemple de pilote minifilter scanner, montre un tableau de structures FLT_OPERATION_REGISTRATION. L’exemple de pilote minifilter du scanneur enregistre des routines de rappel de préopération et de postopération pour les routines de rappel de IRP_MJ_CREATE et de préopération pour les opérations de IRP_MJ_CLEANUP et 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}
};