Oplock-Synchronisierung
Filter und Dateisysteme, die exklusive opportunistische Sperren (Oplocks ) anfordern, müssen Aufrufe mit dem vom System bereitgestellten oplock-Paket synchronisieren. Insbesondere müssen Aufrufe von OPLOCK-FSCTRL-Routinen (zum Einrichten von Oplocks) mit Aufrufen von Oplock-Check-Break-Routinen synchronisiert werden. Eine Liste der beiden Routinegruppen umfasst:
Oplock FSCTRL-Routinen:
- Minifilter: FltOplockFsctrl, FltOplockFsctrlEx
- Legacyfilter und Dateisysteme: FsRtlOplockFsctrl, FsRtlOplockFsctrlEx, FsRtlUpperOplockFsctrl
Oplock Check-Break-Routinen:
- Minifilter: FltCheckOplock, FltCheckOplockEx
- Legacyfilter und Dateisysteme: FsRtlCheckOplock, FsRtlCheckOplockEx, FsRtlCheckOplockEx2, FsRtlOplockBreakH
Bei der Verarbeitung einer Oplock-Anforderung müssen Filter und Dateisysteme Folgendes sicherstellen:
- E/A, die möglicherweise einen Oplock unterbrechen, können nicht parallel zur Verarbeitung der Anforderung erfolgen.
- Oplock-Anforderungen können nicht gleichzeitig mit Oplock-Unterbrechungsbestätigungen ausgeführt werden.
IRP-Aufrufe, die die Erstellung exklusiver Oplocks für denselben Dateisteuerungsblock (FCB) anfordern, sind:
- IRP_MJ_CREATE mit dem in Create.Options festgelegten FILE_OPEN_REQUIRING_OPLOCK Bit
- IRP_MJ_FILE_SYSTEM_CONTROL mit oplock-Steuerelementen
Im Folgenden sind einige Beispiele für die oplock-Synchronisierung aufgeführt:
Bei der Verarbeitung einer Oplock-Anforderung würde ein Dateisystem eine Ressource exklusiv abrufen, FsRtlOplockFsctrlEx aufrufen und die Ressource freigeben.
Beim Verarbeiten einer Oplock-Unterbrechungsbestätigung würde das Dateisystem dieselbe freigegebene Ressource abrufen, FsRtlOplockFsctrlEx aufrufen und die Ressource freigeben.
Bei der E/A-Ausführung würde das Dateisystem dieselbe freigegebene Ressource abrufen, FsRtlCheckOplockEx2 aufrufen, die E/A-Vorgänge ausführen und die Ressource freigeben.
Obere Dateisysteme sollten sicherstellen, dass sie sich zwischen Aufrufen von FsRtlCheckUpperOplock und FsRtlUpperOplockFsctrl auf ähnliche Weise synchronisieren.