FSCTL_OPLOCK_BREAK_ACK_NO_2 IOCTL (winioctl.h)

对如下通知进行响应:文件的机会锁即将中断。 使用此操作可解锁文件上的所有机会锁,但保持文件打开状态。

若要执行此操作,请使用以下参数调用 DeviceIoControl 函数。

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
);

注解

此操作仅由已从本地服务器请求机会锁的客户端应用程序使用。 从远程服务器请求机会性锁的客户端应用程序不得直接请求它们-网络重定向程序以透明方式请求应用程序的机会性锁。

有关重叠 I/O 对此操作的影响,请参阅 DeviceIoControl 主题的“备注”部分。

当你收到文件上的机会锁即将被破坏的通知时,请使用 FSCTL_OPLOCK_BREAK_ACK_NO_2 控制代码向服务器指示你希望放弃任何机会性锁,但计划使文件保持打开状态。 如果操作 ERROR_IO_PENDING返回错误代码,则服务器已对文件授予 2 级锁。

使用 FSCTL_OPLOCK_BREAK_ACK_NO_2 的一种替代方法是指示应用程序即将关闭该文件。 对此响应使用 FSCTL_OPBATCH_ACK_CLOSE_PENDING 控制代码。

另一种替代方法(如果锁损坏是独占机会锁)是指示文件应改为接收 2 级机会锁。 对此响应使用 FSCTL_OPLOCK_BREAK_ACKNOWLEDGE 控制代码。

通过使用与机会锁断开的文件关联的 OVERLAPPED 结构的 hEvent 成员,通知应用程序机会性锁已断开。 应用程序还可以使用 GetOverlappedResultHasOverlappedIoCompleted 等函数。

在Windows 8和Windows Server 2012中,以下技术支持此代码。

技术 支持
服务器消息块 (SMB) 3.0 协议
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CSV)
弹性文件系统 (ReFS)

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 winioctl.h (包括 Windows.h)

另请参阅