Compartilhar via


Função FltOplockBreakH (fltkernel.h)

O FltOplockBreakH quebras de rotina CACHE_HANDLE_LEVEL bloqueios oportunistas (oplocks).

Sintaxe

FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockBreakH(
  [in]           POPLOCK                                 Oplock,
  [in]           PFLT_CALLBACK_DATA                      CallbackData,
  [in]           ULONG                                   Flags,
  [in, optional] PVOID                                   Context,
  [in, optional] PFLTOPLOCK_WAIT_COMPLETE_ROUTINE        WaitCompletionRoutine,
  [in, optional] PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);

Parâmetros

[in] Oplock

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

[in] CallbackData

Um ponteiro para a estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) para a operação de E/S.

[in] Flags

Uma máscara de bits para a operação de E/S do arquivo associado. Um driver de minifiltro define bits para especificar o comportamento de FltOplockBreakH . O parâmetro sinalizadores de tem as seguintes opções:

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

Permite que uma quebra de oplock prossiga sem bloquear ou aguardar a operação que causou a interrupção do oplock.

OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)

Permite que CACHE_HANDLE_LEVEL quebras de oplock prossiga independentemente da chave oplock.

[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 WaitCompletionRoutine e PrePostCallbackDataRoutine apontam para.

[in, optional] WaitCompletionRoutine

Um ponteiro para uma rotina de retorno de chamada fornecida pelo chamador. Se uma quebra de oplock 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 interrupção do oplock seja concluída.

Essa rotina é declarada da seguinte maneira:

typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
    );

Essa rotina tem os seguintes parâmetros:

CallbackData

Um ponteiro para a estrutura de dados de retorno de chamada para a operação de E/S.

Contexto

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

[in, optional] PrePostCallbackDataRoutine

Um ponteiro para uma rotina de retorno de chamada fornecida pelo chamador a ser chamada se a operação de E/S precisar ser pendente. A rotina é chamada antes do pacote oplock aguardar o IRP. Esse parâmetro é opcional e pode ser NULL.

Essa rotina é declarada da seguinte maneira:

typedef VOID
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
      );

Essa rotina tem os seguintes parâmetros:

CallbackData

Um ponteiro para a estrutura de dados de retorno de chamada para a operação de E/S.

Contexto

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

Valor de retorno

FltOplockBreakH retorna um dos seguintes códigos de FLT_PREOP_CALLBACK_STATUS:

Código de retorno Descrição
FLT_PREOP_COMPLETE
fltOplockBreakH encontrou uma falha de alocação de pool ou uma chamada para a função FsRtlOplockBreakH retornou um erro. FltOplockBreakH definirá o código de erro no membro status da estrutura IO_STATUS_BLOCK. A estrutura de IO_STATUS_BLOCK é especificada no membro IoStatus da estrutura de dados de retorno de chamada FLT_CALLBACK_DATA. O parâmetro CallbackData aponta para esse FLT_CALLBACK_DATA.
FLT_PREOP_PENDING
Uma interrupção de oplock foi iniciada, o que fez com que o Gerenciador de Filtros postava a operação de E/S em uma fila de trabalho. A operação de E/S é representada pelos dados de retorno de chamada aos quais o parâmetro CallbackData aponta.
FLT_PREOP_SUCCESS_WITH_CALLBACK
Os dados de retorno de chamada aos quais o parâmetro CallbackData não estavam pendentes e a operação de E/S foi executada imediatamente. Lembre-se de que, se o chamador especificado OPLOCK_FLAG_COMPLETE_IF_OPLOCKED no parâmetro Flags, uma quebra de oplock poderá realmente estar em andamento, mesmo que a operação de E/S não esteja pendente. Para determinar se essa é a situação, o chamador deve verificar se há STATUS_OPLOCK_BREAK_IN_PROGRESS no Status membro da estrutura IO_STATUS_BLOCK. A estrutura de IO_STATUS_BLOCK é especificada no membro IoStatus da estrutura de dados de retorno de chamada FLT_CALLBACK_DATA.

Observações

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

Requisitos

Requisito Valor
de cliente com suporte mínimo A rotina FltOplockBreakH está disponível a partir do Windows 7.
da Plataforma de Destino Universal
cabeçalho fltkernel.h (inclua Fltkernel.h)
biblioteca FltMgr.lib
de DLL Fltmgr.sys
IRQL <= APC_LEVEL

Consulte também

FLT_CALLBACK_DATA

FltInitializeOplock

FsRtlOplockBreakH

IO_STATUS_BLOCK