FltProcessFileLock-Funktion (fltkernel.h)
Die FltProcessFileLock-Routine verarbeitet und schließt einen Dateisperrvorgang ab.
Syntax
FLT_PREOP_CALLBACK_STATUS FLTAPI FltProcessFileLock(
[in] PFILE_LOCK FileLock,
[in] PFLT_CALLBACK_DATA CallbackData,
[in, optional] PVOID Context
);
Parameter
[in] FileLock
Zeiger auf die FILE_LOCK-Struktur für die Datei. Diese Struktur muss durch einen vorherigen Aufruf von FltAllocateFileLock oder FltInitializeFileLock initialisiert worden sein.
[in] CallbackData
Zeiger auf die Rückrufdatenstruktur (FLT_CALLBACK_DATA) für den IRP_MJ_LOCK_CONTROL-Vorgang .
[in, optional] Context
Kontextzeiger, der beim Abschließen des Vorgangs verwendet werden soll. Dieser Kontextzeiger wird an die Rückrufroutinen CompleteLockCallbackDataRoutine und UnlockRoutine übergeben, die der Minifiltertreiber in einem vorherigen Aufruf von FltAllocateFileLock registriert hat. Dieser Parameter ist optional und kann NULL sein.
Rückgabewert
FltProcessFileLock gibt eine der folgenden Rückgaben zurück.
Rückgabecode | Beschreibung |
---|---|
FLT_PREOP_COMPLETE | Der Filter-Manager erfolgt mit dem Rückrufdaten, der jetzt abgeschlossen werden kann. |
FLT_PREOP_DISALLOW_FASTIO | CallbackData stellt einen schnellen E/A-Vorgang dar, und ein Minifiltertreiber im Stapel hat die Verwendung der schnellen E/A für diesen Vorgang nicht zugelassen. Der Filter-Manager sendet den Vorgang nicht an Minifiltertreiber unterhalb des Vorgangs, der den Vorgang nicht zugelassen hat. In diesem Fall ruft der Filter-Manager nur die Postoperation-Rückrufroutinen (und CompleteLockCallbackDataRoutine-Rückrufe ) der Minifiltertreiber über dem Minifiltertreiber auf, die den schnellen E/A-Vorgang nicht zugelassen haben. |
FLT_PREOP_PENDING | Der Sperrvorgang wurde geschrieben. |
Hinweise
FltProcessFileLock verarbeitet einen Dateisperrvorgang (IRP_MJ_LOCK_CONTROL). Der Sperrvorgang kann ein schneller E/A- oder IRP-basierter Vorgang sein.
Für Entsperrvorgänge ruft der Filter-Manager die UnlockRoutine-Rückrufroutine-Routine auf, die der Aufrufer für die FILE_LOCK-Struktur in einem vorherigen Aufruf von FltAllocateFileLock registriert hat.
Nach Abschluss des Sperrvorgangs ruft der Filter-Manager die Rückrufroutine (CompleteLockCallbackDataRoutine) (PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE) auf, die der Aufrufer für die FILE_LOCK-Struktur in einem vorherigen Aufruf von FltAllocateFileLock registriert hat.
Wenn der an FltProcessFileLock übergebene CallbackData-Parameter einen schnellen E/A-Vorgang darstellt, wird der im CompleteLockCallbackDataRoutine-Parameter der FltAllocateFileLock-Routine angegebene Rückruf nicht aufgerufen. Nur wenn der E/A-Vorgang in CallbackData ein IRP ist und CompleteLockCallbackDataRoutine nicht NULL ist, wird die Rückrufroutine aufgerufen.
Verwenden Sie das Makro FLT_IS_FASTIO_OPERATION, um zu bestimmen, ob callbackData einen schnellen E/A-Vorgang darstellt.
Um eine neue Dateisperrstruktur zuzuordnen und zu initialisieren, rufen Sie FltAllocateFileLock auf.
Um eine initialisierte FILE_LOCK-Struktur frei zu geben, rufen Sie FltFreeFileLock auf.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP mit SP2 |
Unterstützte Mindestversion (Server) | Windows Server 2003 mit SP1 |
Zielplattform | Universell |
Header | fltkernel.h (include Fltkernel.h) |
Bibliothek | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
Weitere Informationen
PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE
[PUNLOCK_ROUTINE] (.. /ntifs/nc-ntifs-punlock_routine.md