Função FltOplockBreakToNoneEx (fltkernel.h)
A rotina FltOplockBreakToNoneEx quebra todos os bloqueios oportunistas (oplocks) imediatamente sem considerar nenhuma chave oplock.
Sintaxe
FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockBreakToNoneEx(
[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 FltOplockBreakToNoneEx . 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. Normalmente, esse sinalizador só será usado se a operação de E/S representada pelos dados de retorno de chamada que o parâmetro CallbackData apontar for uma operação de IRP_MJ_CREATE.
[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 FltOplockBreakToNoneEx .
[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 estiver 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 FltOplockBreakToNoneEx .
Valor de retorno
FltOplockBreakToNoneEx retorna um dos seguintes códigos de FLT_PREOP_CALLBACK_STATUS:
Código de retorno | Descrição |
---|---|
|
fltOplockBreakToNoneEx encontrou uma falha de alocação de pool ou uma chamada para a função FsRtlOplockBreakToNoneEx retornou um erro. FltOplockBreakToNoneEx definirá o código de erro 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. O parâmetro CallbackData aponta para esse FLT_CALLBACK_DATA. |
|
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. |
|
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 FltOplockBreakToNoneEx 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 |