Compartilhar via


Função FsRtlCheckUpperOplock (ntifs.h)

O FsRtlCheckUpperOplock rotina fornece verificação de bloqueio oportunista (oplock) em sistemas de arquivos secundários ou em camadas quando os oplocks eles mantêm o estado de alteração. Sistemas de arquivos secundários, como redirecionadores de rede e serviços de arquivos de 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 interrupção ou 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 pendente.

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 às quais os parâmetros CompletionRoutine e PrePendIrpRoutine apontam para.

[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
de Contexto Um ponteiro de informações de contexto que foi passado no parâmetro CompletionRoutineContext para FsRtlCheckUpperOplock.
de 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 chamado 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
de Contexto Um ponteiro de informações de contexto que foi passado no parâmetro CompletionRoutineContext para FsRtlCheckUpperOplock.
de 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 do arquivo associado. Um sistema de arquivos ou driver de filtro define bits para especificar o comportamento de FsRtlCheckUpperOplock. O parâmetro sinalizadores de tem as seguintes opções:

Valor Significado
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) Retorne 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 r novamente. Todas as outras verificações de oplock superior retornarão STATUS_CANNOT_BREAK_OPLOCK.

Valor de retorno

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 interrupção foi confirmada. Se de CompletionRoutine for NULL, blocos de FsRtlCheckUpperOplock enquanto a quebra de oplock é processada em vez de retornar STATUS_PENDING.
STATUS_CANNOT_BREAK_OPLOCK A quebra de oplock não pode ser realizada. Consulte Flags para 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. de CompletionRoutine é chamado quando a interrupção do oplock é concluída. STATUS_PENDING é um código de sucesso.

Requisitos

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

Consulte também

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl