Função FsRtlCheckUpperOplock (ntifs.h)

A rotina FsRtlCheckUpperOplock fornece verificação oportunista de bloqueio (oplock) em sistemas de arquivos secundários ou em camadas quando os oplocks mantêm o estado de alteração. Sistemas de arquivos secundários, como redirecionadores de rede e serviços de arquivos clustering, chamam FsRtlCheckUpperOplock quando um oplock mantido em um sistema de arquivos inferior pelo sistema de arquivos secundário, altera o estado. Uma alteração de estado pode ocorrer por uma quebra ou por uma atualização. FsRtlCheckUpperOplock interromperá o oplock do sistema de arquivos superior, se necessário, para confirmar o novo estado de oplock inferior. O chamador também pode fornecer retornos de chamada opcionais para notificações de confirmação de interrupção e status pendentes.

Sintaxe

NTSTATUS FsRtlCheckUpperOplock(
  [in]           POPLOCK                       Oplock,
  [in]           ULONG                         NewLowerOplockState,
  [in, optional] PVOID                         CompletionRoutineContext,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
                 POPLOCK_FS_PREPOST_IRP        PrePendRoutine,
  [in]           ULONG                         Flags
);

Parâmetros

[in] Oplock

Um ponteiro oplock oplock opaco para o arquivo. Esse ponteiro deve ter sido inicializado por uma chamada anterior para FsRtlInitializeOplock.

[in] NewLowerOplockState

Um valor que representa o oplock solicitado mantido em um sistema de arquivos inferior por um sistema de arquivos secundário. Esta é uma combinação OR bit a bit do seguinte:

Valor Significado
OPLOCK_LEVEL_CACHE_READ Indica um tipo de leitura de oplock (R).
OPLOCK_LEVEL_CACHE_WRITE Indica um tipo de Gravação oplock (W).
OPLOCK_LEVEL_CACHE_HANDLE Indica um tipo de identificador de oplock (H).

[in, optional] CompletionRoutineContext

Um ponteiro para informações de contexto definidas pelo chamador a serem passadas para as rotinas de retorno de chamada para as quais os parâmetros CompletionRoutine e PrePendIrpRoutine apontam.

[in, optional] CompletionRoutine

Um ponteiro para uma rotina de retorno de chamada fornecida pelo chamador. Se uma quebra de bloqueio oportunista estiver em andamento, essa rotina será chamada quando a interrupção for concluída. Esse parâmetro é opcional e pode ser NULL. Se for NULL, o chamador será colocado em um estado de espera até que a quebra de bloqueio oportunista seja concluída.

As descrições de declaração e parâmetro dessa rotina são as seguintes:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      _In_ PVOID Context,
      _In_opt_ PIRP Irp
      );
Parâmetro Descrição
Contexto Um ponteiro de informações de contexto que foi passado no parâmetro CompletionRoutineContext para FsRtlCheckUpperOplock.
Irp Um ponteiro opcional para o IRP para a operação de E/S. FsRtlCheckUpperOplock sempre definirá isso como NULL.

PrePendRoutine

Um ponteiro para uma rotina de retorno de chamada fornecida pelo chamador a ser chamada se FsRtlCheckUpperOplock retornar STATUS_PENDING. Esse parâmetro é opcional e pode ser NULL.

As descrições de declaração e parâmetro dessa rotina são as seguintes:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      _In_ PVOID Context,
      _in_opt_ PIRP Irp
      );
Parâmetro Descrição
Contexto Um ponteiro de informações de contexto que foi passado no parâmetro CompletionRoutineContext para FsRtlCheckUpperOplock.
Irp Um ponteiro opcional para o IRP para a operação de E/S. FsRtlCheckUpperOplock sempre definirá isso como NULL.

[in] Flags

Uma máscara de bits para a operação de E/S de arquivo associada. Um sistema de arquivos ou driver de filtro define bits para especificar o comportamento de FsRtlCheckUpperOplock. O parâmetro Flags tem as seguintes opções:

Valor Significado
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) Retornará STATUS_CANNOT_BREAK_OPLOCK se o valor de NewLowerOplockState resultar em qualquer quebra de oplock.
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) Interrompa somente os oplocks superiores de Leitura (R) e notifique os titulares do R de que eles podem solicitar novamente o R. Todas as outras verificações de oplock superior retornarão STATUS_CANNOT_BREAK_OPLOCK.

Retornar valor

FsRtlCheckUpperOplock retorna um código NTSTATUS apropriado, como um dos seguintes:

Código de retorno Descrição
STATUS_SUCCESS Uma quebra de oplock não é necessária ou a quebra foi confirmada. Se CompletionRoutine for NULL, FsRtlCheckUpperOplock bloqueará enquanto a quebra de oplock for processada em vez de retornar STATUS_PENDING.
STATUS_CANNOT_BREAK_OPLOCK A quebra de oplock não pode ser realizada. Consulte Sinalizadores para obter condições que restringem uma interrupção.
STATUS_PENDING Uma quebra de bloqueio oportunista está em andamento. Se fornecido, PrePendIrpRoutine é chamado como uma notificação da operação pendente. CompletionRoutine é chamado quando a quebra de oplock é concluída. STATUS_PENDING é um código de êxito.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8.1
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

Confira também

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl