Compartilhar via


FSCTL_OPLOCK_BREAK_ACK_NO_2 IOCTL (winioctl.h)

Responde à notificação de que um bloqueio oportunista em um arquivo está prestes a ser desfeito. Use essa operação para desbloquear todos os bloqueios oportunistas no arquivo, mas mantenha o arquivo aberto.

Para executar essa operação, chame a função DeviceIoControl usando os parâmetros a seguir.

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_OPLOCK_BREAK_ACK_NO_2,      // dwIoControlCode
  NULL,                             // lpInBuffer
  0,                                // nInBufferSize
  NULL,                             // lpOutBuffer
  0,                                // nOutBufferSize
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

Comentários

Essa operação é usada apenas por aplicativos cliente que solicitaram um bloqueio oportunista de um servidor local. Os aplicativos cliente que solicitam bloqueios oportunistas de servidores remotos não devem solicitá-los diretamente— o redirecionador de rede solicita de forma transparente bloqueios oportunistas para o aplicativo.

Para obter as implicações de E/S sobrepostas nessa operação, consulte a seção Comentários do tópico DeviceIoControl .

Quando você receber uma notificação de que um bloqueio oportunista em um arquivo está prestes a ser quebrado, use o código de controle FSCTL_OPLOCK_BREAK_ACK_NO_2 para indicar ao servidor que você deseja renunciar a quaisquer bloqueios oportunistas, mas planeje manter o arquivo aberto. Se a operação retornar o código de erro ERROR_IO_PENDING, o servidor concedeu um bloqueio de nível 2 no arquivo.

Uma alternativa ao uso de FSCTL_OPLOCK_BREAK_ACK_NO_2 é indicar que o aplicativo está prestes a fechar o arquivo de qualquer maneira. Use o código de controle FSCTL_OPBATCH_ACK_CLOSE_PENDING para essa resposta.

Outra alternativa, usada se o bloqueio que está sendo quebrado for um bloqueio oportunista exclusivo, é indicar que o arquivo deve receber um bloqueio oportunista de nível 2. Use o código de controle FSCTL_OPLOCK_BREAK_ACKNOWLEDGE para essa resposta.

Os aplicativos são notificados de que um bloqueio oportunista é interrompido usando o membro hEvent da estrutura OVERLAPPED associada ao arquivo no qual o bloqueio oportunista está quebrado. Os aplicativos também podem usar funções como GetOverlappedResult e HasOverlappedIoCompleted.

Em Windows 8 e Windows Server 2012, esse código é compatível com as tecnologias a seguir.

Tecnologia Com suporte
Protocolo SMB (SMB) 3.0 No
TFO (Failover transparente) do SMB 3.0 No
SMB 3.0 com compartilhamentos de arquivos de expansão (SO) No
Sistema de arquivos de Volume Compartilhado Clusterizado (CsvFS) Sim
ReFS (Sistema de Arquivos Resiliente) Sim

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho winioctl.h (inclua Windows.h)

Confira também