FSCTL_OPLOCK_BREAK_ACKNOWLEDGE IOCTL (winioctl.h)

对如下通知进行响应:文件的独占机会锁即将中断。 使用此操作可指示文件应接收级别 2 的机会锁。

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

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_OPLOCK_BREAK_ACKNOWLEDGE,   // 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_ACKNOWLEDGE 是响应应用程序文件上的级别 1、批处理或筛选器机会锁已损坏的通知。 它向服务器指示应用程序应接收 2 级机会性锁。 如果操作 ERROR_IO_PENDING返回错误代码,则服务器已对文件授予应用程序 2 级锁。

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

另一种方法是通过 FSCTL_OPLOCK_BREAK_ACK_NO_2 控制代码请求保持文件打开状态,但丢失所有锁定。

通过使用与机会锁断开的文件关联的 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)

另请参阅