Condividi tramite


Registrazione di routine di preoperazione e postoperazione

Per registrare routine di callback preoperazione e routine di callback di post-operazione, un driver minifilter effettua una singola chiamata a FltRegisterFilter nella routine DriverEntry. Per il parametro Registration in FltRegisterFilter, il driver minifilter passa un puntatore a una struttura FLT_REGISTRATION . Il membro OperationRegistration di questa struttura contiene un puntatore a una matrice di strutture FLT_OPERATION_REGISTRATION , una per ogni tipo di operazione di I/O che il driver minifilter deve filtrare.

Ogni struttura FLT_OPERATION_REGISTRATION nella matrice, ad eccezione dell'ultima, contiene le informazioni seguenti:

  • Codice della funzione principale per l'operazione. Vedere FLT_PARAMETERS per informazioni sulle operazioni di I/O e sui parametri specifici della richiesta.

  • Per operazioni di lettura e scrittura (IRP_MJ_READ e IRP_MJ_WRITE), un set di flag che specificano se ignorare l'I/O memorizzato nella cache o il paging di I/O o entrambe per le operazioni di I/O basate su IRP

  • Punti di ingresso per un massimo di routine di callback di preoperazione e una routine di callback post-operatorio

L'ultimo elemento della matrice deve essere {IRP_MJ_OPERATION_END}.

L'esempio di codice seguente, tratto dal driver minifilter di esempio scanner, mostra una matrice di strutture FLT_OPERATION_REGISTRATION. Il driver minifilter di esempio scanner registra routine di callback preoperazione e postoperazione per IRP_MJ_CREATE e routine di callback di preoperazione per operazioni di IRP_MJ_CLEANUP e 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}
};