Функция 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

См. также раздел

FILE_LOCK

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FltAllocateFileLock

FltCheckLockForReadAccess

FltCheckLockForWriteAccess

FltFreeFileLock

FltInitializeFileLock

FltUninitializeFileLock

FsRtlProcessFileLock

IRP_MJ_LOCK_CONTROL

PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE

[PUNLOCK_ROUTINE] (.. /ntifs/nc-ntifs-punlock_routine.md