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