Função FltProcessFileLock (fltkernel.h)

A rotina FltProcessFileLock processa e conclui uma operação de bloqueio de arquivo.

Sintaxe

FLT_PREOP_CALLBACK_STATUS FLTAPI FltProcessFileLock(
  [in]           PFILE_LOCK         FileLock,
  [in]           PFLT_CALLBACK_DATA CallbackData,
  [in, optional] PVOID              Context
);

Parâmetros

[in] FileLock

Ponteiro para a estrutura FILE_LOCK do arquivo. Essa estrutura deve ter sido inicializada por uma chamada anterior para FltAllocateFileLock ou FltInitializeFileLock.

[in] CallbackData

Ponteiro para a estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) para a operação de IRP_MJ_LOCK_CONTROL .

[in, optional] Context

Ponteiro de contexto a ser usado ao concluir a operação. Esse ponteiro de contexto é passado para as rotinas de retorno de chamada CompleteLockCallbackDataRoutine e UnlockRoutine que o driver de minifiltro registrou em uma chamada anterior para FltAllocateFileLock. Esse parâmetro é opcional e pode ser NULL.

Retornar valor

FltProcessFileLock retorna um dos seguintes.

Código de retorno Descrição
FLT_PREOP_COMPLETE O Gerenciador de Filtros é feito com CallbackData, que agora pode ser concluído.
FLT_PREOP_DISALLOW_FASTIO O CallbackData representa uma operação de E/S rápida e um driver de minifiltro na pilha não permitiu que a E/S rápida fosse usada para essa operação. O Gerenciador de Filtros não envia a operação para nenhum driver de minifiltro abaixo daquele que não permitiu a operação. Nesse caso, o Gerenciador de Filtros chama apenas as rotinas de retorno de chamada postoperation (e retornos de chamada CompleteLockCallbackDataRoutine ) dos drivers de minifiltro acima do driver de minifiltro que não permitiu a operação de E/S rápida.
FLT_PREOP_PENDING A operação de bloqueio foi pendente.

Comentários

FltProcessFileLock processa uma operação de bloqueio de arquivo (IRP_MJ_LOCK_CONTROL). A operação de bloqueio pode ser uma operação rápida baseada em E/S ou IRP.

Para operações de desbloqueio, o Gerenciador de Filtros chama a rotina de retorno de chamada UnlockRoutine que o chamador registrou para a estrutura FILE_LOCK em uma chamada anterior para FltAllocateFileLock.

Quando a operação de bloqueio é concluída, o Gerenciador de Filtros chama a rotina de retorno de chamada de conclusão CompleteLockCallbackDataRoutine (PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE) que o chamador registrou para a estrutura FILE_LOCK em uma chamada anterior para FltAllocateFileLock.

Quando o parâmetro CallbackData passado para FltProcessFileLock representa uma operação de E/S rápida, o retorno de chamada especificado no parâmetro CompleteLockCallbackDataRoutine da rotina FltAllocateFileLock não é invocado. Somente quando a operação de E/S em CallbackData for um IRP e CompleteLockCallbackDataRoutine não for NULL, a rotina de retorno de chamada será chamada.

Para determinar se CallbackData representa uma operação de E/S rápida, use a macro FLT_IS_FASTIO_OPERATION .

Para alocar e inicializar uma nova estrutura de bloqueio de arquivo, chame FltAllocateFileLock.

Para liberar uma estrutura de FILE_LOCK inicializada, chame FltFreeFileLock.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP com SP2
Servidor mínimo com suporte Windows Server 2003 com SP1
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
Biblioteca FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Confira também

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