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 |