Função FsRtlOplockFsctrl (ntifs.h)
FsRtlOplockFsctrl executa várias operações de bloqueio oportunista (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.
Valor de retorno
FsRtlOplockFsctrl retorna um dos seguintes valores NTSTATUS:
Código de retorno | Descrição |
---|---|
STATUS_SUCCESS | Para uma solicitação 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 foi 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 sucesso. |
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 de opções de criação para a operação. STATUS_CANNOT_BREAK_OPLOCK é um código de sucesso. |
Observações
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 de sistema de arquivos ou criação. Os minifiltros devem chamar FltOplockFsctrl em vez de FsRtlOplockFsctrl.
O IRP apontado pelo parâmetro irp
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:
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
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 no pacote oplock fornecido pelo sistema. Consulte de sincronização oplock para obter mais informações.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino |
Universal |
cabeçalho | ntifs.h (inclua Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL |
NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Consulte também
FSCTL_OPBATCH_ACK_CLOSE_PENDING