Registrieren von Preoperations- und Postoperation-Rückrufroutinen

Um Rückrufroutinen vor der Operation und Rückrufroutinen nach der Operation zu registrieren, führt ein Minifiltertreiber einen einzelnen Aufruf von FltRegisterFilter in seiner DriverEntry-Routine durch. Für den Parameter Registration in FltRegisterFilter übergibt der Minifiltertreiber einen Zeiger auf eine FLT_REGISTRATION-Struktur . Der Member OperationRegistration dieser Struktur enthält einen Zeiger auf ein Array von FLT_OPERATION_REGISTRATION Strukturen, einen für jeden Typ von E/A-Vorgängen, den der Minifiltertreiber filtern muss.

Jede FLT_OPERATION_REGISTRATION Struktur im Array mit Ausnahme der letzten enthält die folgenden Informationen:

  • Der Hauptfunktionscode für den Vorgang. Informationen zu E/A-Vorgängen und deren anforderungstypspezifischen Parametern finden Sie unter FLT_PARAMETERS .

  • Für Lese- und Schreibvorgänge (IRP_MJ_READ und IRP_MJ_WRITE) eine Reihe von Flags, die angeben, ob zwischengespeicherte E/A- oder Paging-E/A-Vorgänge oder beides für IRP-basierte E/A-Vorgänge ignoriert werden sollen

  • Einstiegspunkte für bis zu eine Voroperationsrückrufroutine und eine Postoperation-Rückrufroutine

Das letzte Element im Array muss {IRP_MJ_OPERATION_END} sein.

Das folgende Codebeispiel, das aus dem Scanner-Beispiel-Minifiltertreiber stammt, zeigt ein Array von FLT_OPERATION_REGISTRATION Strukturen. Der Scanner-Beispiel-Minifiltertreiber registriert Preoperations- und Postoperation-Rückrufroutinen für IRP_MJ_CREATE- und Präoperationsrückrufroutinen für IRP_MJ_CLEANUP und IRP_MJ_WRITE Vorgänge.

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