Compartilhar via


Macro FsRtlCheckOplock (rxprocs.h)

A rotina FsRtlCheckOplock sincroniza o IRP para uma operação de E/S de arquivo com o estado oplock (bloqueio oportunista) atual do arquivo.

Sintaxe

void FsRtlCheckOplock(
   A1,
   A2,
   A3,
   A4,
   A5
);

Parâmetros

A1

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

A2

Um ponteiro para o IRP para a operação de E/S.

A3

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 PostIrpRoutine apontam.

A4

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 o bloqueio oportunista seja concluído.

Essa rotina é declarada da seguinte maneira:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      IN PVOID Context,
      IN PIRP Irp
      );

Essa rotina tem os seguintes parâmetros:

Context

Um ponteiro de informações de contexto que foi passado no parâmetro Context para FsRtlCheckOplock.

de Irp

Um ponteiro para o IRP para a operação de E/S.

A5

Um ponteiro para uma rotina de retorno de chamada fornecida pelo chamador a ser chamada se a operação de E/S for postada em uma fila de trabalho. Esse parâmetro é opcional e pode ser NULL.

Essa rotina é declarada da seguinte maneira:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      IN PVOID Context,
      IN PIRP Irp
      );

Context

Um ponteiro de informações de contexto que foi passado no parâmetro Context para FsRtlCheckOplock.

de Irp

Um ponteiro para o IRP para a operação de E/S.

Valor de retorno

Nenhum

Observações

FsRtlCheckOplock sincroniza o IRP para uma operação de E/S com o estado de bloqueio oportunista atual de um arquivo de acordo com as seguintes condições:

  • Se a operação de E/S fizer com que o bloqueio oportunista interrompa, a quebra de bloqueio oportunista será iniciada.
  • Se a operação de E/S não puder continuar até que a quebra de bloqueio oportunista seja concluída, FsRtlCheckOplock retornará STATUS_PENDING e chamará a rotina de retorno de chamada para a qual o parâmetro PostIrpRoutine aponta.
Se um driver de filtro ou sistema de arquivos usar bloqueios oportunistas, ele deverá chamar FsRtlCheckOplock de qualquer rotina de expedição para operações de E/S que possam causar quebras de bloqueio oportunistas. Essa regra se aplica aos seguintes tipos de operações de E/S, pois essas operações podem causar quebras de bloqueio oportunistas:

IRP_MJ_CLEANUP

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_LOCK_CONTROL

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_WRITE

Para obter informações detalhadas sobre bloqueios oportunistas, consulte a documentação do SDK do Microsoft Windows.

Os minifiltros devem chamar FltCheckOplock em vez de FsRtlCheckOplock.

Requisitos

Requisito Valor
de cliente com suporte mínimo Essa rotina está disponível no Microsoft Windows 2000 e versões posteriores de sistemas operacionais Windows.
da Plataforma de Destino Universal
cabeçalho rxprocs.h (inclua FltKernel.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Consulte também

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockFsctrl

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock