Função FsRtlCheckOplock (ntifs.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
NTSTATUS FsRtlCheckOplock(
[in] POPLOCK Oplock,
[in] PIRP Irp,
[in, optional] PVOID Context,
[in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
[in, optional] POPLOCK_FS_PREPOST_IRP PostIrpRoutine
);
Parâmetros
[in] Oplock
Um ponteiro de bloqueio oportunista opaco para o arquivo. Esse ponteiro deve ter sido inicializado por uma chamada anterior para FsRtlInitializeOplock.
[in] Irp
Um ponteiro para o IRP para a operação de E/S.
[in, optional] Context
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
[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.
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:
Parâmetro | Descrição |
---|---|
Contexto | Um ponteiro de informações de contexto que foi passado no parâmetro Context para FsRtlCheckOplock. |
Irp | Um ponteiro para o IRP para a operação de E/S. |
[in, optional] PostIrpRoutine
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
);
Essa rotina tem os seguintes parâmetros:
Parâmetro | Descrição |
---|---|
Contexto | Um ponteiro de informações de contexto que foi passado no parâmetro Context para FsRtlCheckOplock. |
Irp | Um ponteiro para o IRP para a operação de E/S. |
Valor de retorno
A rotina FsRtlCheckOplock
Código de retorno | Descrição |
---|---|
STATUS_CANCELLED | O IRP foi cancelado. STATUS_CANCELLED é um código de erro. |
STATUS_CANNOT_BREAK_OPLOCK | Se o IRP for um IRP_MJ_CREATE e FILE_OPEN_REQUIRING_OPLOCK estiver no CreateOptions do IRP, a rotina não iniciará uma quebra de um bloqueio oportunista existente, mas falhará com STATUS_CANNOT_BREAK_OPLOCK. |
STATUS_OPLOCK_BREAK_IN_PROGRESS | Uma quebra de bloqueio oportunista está em andamento. O IRP é uma solicitação IRP_MJ_CREATE e FILE_COMPLETE_IF_OPLOCKED foi especificado no parâmetro de opções de criação para a operação. STATUS_OPLOCK_BREAK_IN_PROGRESS é um código de sucesso. |
STATUS_PENDING | Uma quebra de bloqueio oportunista foi iniciada, e o controle do IRP foi passado para o pacote oplock. Se CompletionRoutine for NULL, essa rotina será bloqueada enquanto a interrupção do oplock for processada, em vez de retornar STATUS_PENDING. STATUS_PENDING é um código de sucesso. |
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 Windows.
Os minifiltros devem chamar FltCheckOplock em vez de FsRtlCheckOplock.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 2000 |
da Plataforma de Destino |
Universal |
cabeçalho | ntifs.h (inclua FltKernel.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL |
NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Consulte também
FSCTL_OPBATCH_ACK_CLOSE_PENDING