Sdílet prostřednictvím


Registrace předoperačních a postoperačních rutin zpětného volání.

Pokud chcete zaregistrovat rutiny zpětného volání před operací a rutiny zpětného volání po operaci, minifiltr ovladač provede jedno volání na FltRegisterFilter ve své rutině DriverEntry. Pro parametr Registration v FltRegisterFilterpředává ovladač minifiltru ukazatel na FLT_REGISTRATION strukturu. OperationRegistration člen této struktury obsahuje ukazatel na pole struktur typu FLT_OPERATION_REGISTRATION, jedna pro každý druh I/O operace, kterou musí ovladač minifiltru zpracovat.

Každá struktura FLT_OPERATION_REGISTRATION v poli, s výjimkou té poslední, obsahuje následující informace.

  • Hlavní kód funkce pro operaci. Informace o operacích vstupně-výstupních a jejich parametrech specifických pro typ požadavku naleznete v FLT_PARAMETERS.

  • Pro operace čtení a zápisu (IRP_MJ_READ a IRP_MJ_WRITE) je sada příznaků, které určují, jestli se mají ignorovat vstupně-výstupní operace uložené v mezipaměti nebo stránkovací vstupně-výstupní operace nebo obojí pro vstupně-výstupní operace založené na protokolu IRP.

  • Vstupní body pro až jednu rutinu zpětného volání před operací a jednu rutinu zpětného volání po operaci

Poslední prvek pole musí být {IRP_MJ_OPERATION_END}.

Následující příklad kódu, převzatý z ukázkového ovladače skenerového minifiltru, ukazuje pole struktur FLT_OPERATION_REGISTRATION. Ovladač minifiltru skeneru registruje rutiny pro zpětné volání před a po operaci pro IRP_MJ_CREATE a rutiny předoperačního zpětného volání pro operace IRP_MJ_CLEANUP a 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}
};