Функция FltProcessFileLock (fltkernel.h)
Процедура FltProcessFileLock обрабатывает и завершает операцию блокировки файла.
Синтаксис
FLT_PREOP_CALLBACK_STATUS FLTAPI FltProcessFileLock(
[in] PFILE_LOCK FileLock,
[in] PFLT_CALLBACK_DATA CallbackData,
[in, optional] PVOID Context
);
Параметры
[in] FileLock
Указатель на структуру FILE_LOCK файла. Эта структура должна быть инициализирована предыдущим вызовом FltAllocateFileLock или FltInitializeFileLock.
[in] CallbackData
Указатель на структуру данных обратного вызова (FLT_CALLBACK_DATA) для операции IRP_MJ_LOCK_CONTROL .
[in, optional] Context
Указатель контекста, используемый при выполнении операции. Этот указатель контекста передается в подпрограммы обратного вызова CompleteLockCallbackDataRoutine и UnlockRoutine , которые драйвер минифильтра зарегистрировал при предыдущем вызове FltAllocateFileLock. Этот параметр является необязательным и может иметь значение NULL.
Возвращаемое значение
Функция FltProcessFileLock возвращает одно из следующих элементов.
Код возврата | Описание |
---|---|
FLT_PREOP_COMPLETE | Диспетчер фильтров выполняется с помощью CallbackData, который теперь можно завершить. |
FLT_PREOP_DISALLOW_FASTIO | CallbackData представляет собой быструю операцию ввода-вывода, а драйвер минифильтра в стеке запрещает использовать быстрый ввод-вывод для этой операции. Диспетчер фильтров не отправляет операцию ни одному из драйверов минифильтра ниже, которые запрещали операцию. В этом случае диспетчер фильтров вызывает только подпрограммы обратного вызова после операции (и обратные вызовы CompleteLockCallbackDataRoutine ) драйверов минифильтра над драйвером минифильтра, которые запрещали быстрые операции ввода-вывода. |
FLT_PREOP_PENDING | Операция блокировки выполнена. |
Комментарии
FltProcessFileLock обрабатывает операцию блокировки файла (IRP_MJ_LOCK_CONTROL). Операция блокировки может быть быстрой операцией ввода-вывода или IRP.
Для операций разблокировки диспетчер фильтров вызывает подпрограмму обратного вызова UnlockRoutine , которую вызывающий объект зарегистрировал для структуры FILE_LOCK в предыдущем вызове FltAllocateFileLock.
После завершения операции блокировки диспетчер фильтров вызывает подпрограмму обратного вызова завершения CompleteLockCallbackDataRoutine (PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE), которую вызывающий объект зарегистрировал для структуры FILE_LOCK в предыдущем вызове FltAllocateFileLock.
Если параметр CallbackData , передаваемый в FltProcessFileLock , представляет быструю операцию ввода-вывода, обратный вызов, указанный в параметре CompleteLockCallbackDataRoutine подпрограммы FltAllocateFileLock , не вызывается. Подпрограмма обратного вызова будет вызываться только в том случае, если операция ввода-вывода в CallbackData является IRP, а CompleteLockCallbackDataRoutine не имеет значения NULL.
Чтобы определить, представляет ли CallbackData быструю операцию ввода-вывода, используйте макрос FLT_IS_FASTIO_OPERATION .
Чтобы выделить и инициализировать новую структуру блокировки файлов, вызовите FltAllocateFileLock.
Чтобы освободить инициализированную структуру FILE_LOCK , вызовите FltFreeFileLock.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP с пакетом обновления 2 (SP2) |
Минимальная версия сервера | Windows Server 2003 с пакетом обновления 1 (SP1); |
Целевая платформа | Универсальное |
Верхняя часть | fltkernel.h (включая Fltkernel.h) |
Библиотека | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
См. также раздел
PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE
[PUNLOCK_ROUTINE] (.. /ntifs/nc-ntifs-punlock_routine.md