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 |
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 |
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
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 |