Функция 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 (include Fltkernel.h) |
библиотеки |
FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
См. также
PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE
[PUNLOCK_ROUTINE](.. /ntifs/nc-ntifs-punlock_routine.md