Função FltOplockFsctrl (fltkernel.h)
FltOplockFsctrl executa várias operações oportunistas de bloqueio (oplock) em nome de um driver de minifiltro.
Sintaxe
FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockFsctrl(
[in] POPLOCK Oplock,
[in] PFLT_CALLBACK_DATA CallbackData,
[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 FltInitializeOplock.
[in] CallbackData
Ponteiro para a estrutura de FLT_CALLBACK_DATA 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
FltOplockFsctrl retorna FLT_PREOP_PENDING para algumas operações 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. Caso contrário, FltOplockFsctrl retornará FLT_PREOP_COMPLETE.
Comentários
Um driver de minifiltro chama FltOplockFsctrl para executar várias operações de bloqueio oportunistas para uma operação de E/S de controle do sistema de arquivos ou de criação.
A estrutura FLT_CALLBACK_DATA apontada pelo parâmetro CallbackData deve representar uma operação de IRP_MJ_FILE_SYSTEM_CONTROL ou IRP_MJ_CREATE baseada em IRP.
Se a operação for uma operação IRP_MJ_FILE_SYSTEM_CONTROL, FltOplockFsctrl poderá ser usado com os seguintes códigos FSCTL:
- 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
O código FSCTL é definido no membro FsControlCode da estrutura FLT_PARAMETERS para a operação. Para obter mais informações sobre FsControlCode e outros parâmetros de IRP_MJ_FILE_SYSTEM_CONTROL, consulte FLT_PARAMETERS para IRP_MJ_FILE_SYSTEM_CONTROL.
Para obter mais informações sobre bloqueios oportunistas, consulte a documentação do SDK do Microsoft Windows.
Se a operação for uma solicitação IRP_MJ_CREATE , FltOplockFsctrl poderá ser usado para solicitar um bloqueio oportunista 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 é FILE_READ_ATTRIBUTES. Esse parâmetro é definido no membro SecurityContext da estrutura FLT_PARAMETERS da operação. Para obter mais informações, consulte FLT_PARAMETERS para IRP_MJ_CREATE.
- O valor do parâmetro ShareAccess para a operação de IRP_MJ_CREATE é FILE_SHARE_READ, FILE_SHARE_WRITE ou FILE_SHARE_DELETE. Esse parâmetro é definido no membro ShareAccess da estrutura FLT_PARAMETERS para a operação. Para obter mais informações, consulte FLT_PARAMETERS para IRP_MJ_CREATE.
Filtros e sistemas de arquivos que chamam essa função devem sincronizar chamadas no pacote oplock fornecido pelo sistema. Consulte Sincronização do Oplock para obter mais informações.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Cabeçalho | fltkernel.h (inclua Fltkernel.h) |
Biblioteca | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
Confira também
FLT_PARAMETERS para IRP_MJ_CREATE
FLT_PARAMETERS para IRP_MJ_FILE_SYSTEM_CONTROL
FSCTL_OPBATCH_ACK_CLOSE_PENDING