Função FsRtlOplockFsctrl (ntifs.h)

FsRtlOplockFsctrl executa várias operações oportunistas de bloqueio (oplock) em nome de um sistema de arquivos ou driver de filtro.

Sintaxe

NTSTATUS FsRtlOplockFsctrl(
  [in] POPLOCK Oplock,
  [in] PIRP    Irp,
  [in] ULONG   OpenCount
);

Parâmetros

[in] Oplock

Ponteiro oplock oplock opaco para o arquivo. Esse ponteiro deve ter sido inicializado por uma chamada anterior para FsRtlInitializeOplock.

[in] Irp

Ponteiro para o IRP para a operação de E/S. Esse parâmetro é necessário e não pode ser NULL.

[in] OpenCount

Número de identificadores de usuário para o arquivo, se um oplock exclusivo estiver sendo solicitado. Definir um valor diferente de zero para uma solicitação oplock de nível 2, R ou RH indica que há bloqueios de intervalo de bytes no arquivo. Para obter informações sobre tipos oplock, consulte Visão geral do Oplock.

Retornar valor

FsRtlOplockFsctrl retorna um dos seguintes valores NTSTATUS:

Código de retorno Descrição
STATUS_SUCCESS Para uma solicitação de IRP_MJ_CREATE, STATUS_SUCCESS indica que o oplock de filtro solicitado foi concedido. Para uma operação FSCTL, o significado de STATUS_SUCCESS depende do código FSCTL. Para obter mais informações, consulte as páginas de referência para os códigos FSCTL listados na seção Comentários a seguir.
STATUS_CANCELLED A operação de E/S foi cancelada. STATUS_CANCELLED é um código de erro.
STATUS_INVALID_PARAMETER O código FSCTL para a operação de E/S não era um dos valores válidos listados na seção Comentários a seguir. STATUS_INVALID_PARAMETER é um código de erro.
STATUS_OPLOCK_NOT_GRANTED Não foi possível conceder o oplock. STATUS_OPLOCK_NOT_GRANTED é um código de erro.
STATUS_PENDING Usado somente para operações FSCTL. O significado de STATUS_PENDING depende do código FSCTL. Para obter mais informações, consulte as páginas de referência para os códigos FSCTL listados na seção Comentários a seguir. STATUS_PENDING é um código de êxito.
STATUS_CANNOT_BREAK_OPLOCK Não foi possível conceder um novo oplock. O IRP é uma solicitação IRP_MJ_CREATE e FILE_OPEN_REQUIRING_OPLOCK foi especificado no parâmetro create options para a operação. STATUS_CANNOT_BREAK_OPLOCK é um código de êxito.

Comentários

Sistemas de arquivos e drivers de filtro herdados chamam FsRtlOplockFsctrl para executar várias operações oplock para uma operação de E/S de controle do sistema de arquivos ou de criação. Os minifiltros devem chamar FltOplockFsctrl em vez de FsRtlOplockFsctrl.

O IRP apontado pelo parâmetro Irp deve ser um IRP válido para uma operação de IRP_MJ_FILE_SYSTEM_CONTROL ou IRP_MJ_CREATE .

Se o IRP for uma solicitação IRP_MJ_FILE_SYSTEM_CONTROL, FsRtlOplockFsctrl poderá ser usado com um dos seguintes códigos FSCTL, que é definido em IrpSp-Parameters.FileSystemControl.FsControlCode>:

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

Se o IRP for uma solicitação IRP_MJ_CREATE , FsRtlOplockFsctrl poderá ser usado para solicitar um oplock de filtro pendente se todas as seguintes condições forem verdadeiras:

  • O valor do parâmetro OpenCount deve ser 1.
  • O valor do parâmetro DesiredAccess para a solicitação IRP_MJ_CREATE deve ser FILE_READ_ATTRIBUTES.
  • O valor do parâmetro ShareAccess para a solicitação IRP_MJ_CREATE deve ser FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.

Se a solicitação de um oplock de filtro pendente for concedida, FsRtlOplockFsctrl retornará STATUS_SUCCESS. Para obter mais informações sobre como criar parâmetros, consulte a entrada de referência para IRP_MJ_CREATE.

Filtros e sistemas de arquivos que chamam essa função devem sincronizar chamadas com o pacote oplock fornecido pelo sistema. Confira Sincronização do Oplock para obter mais informações.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Confira 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

FltOplockFsctrl

FsRtlCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL