Partager via


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}
};