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 成员,通知应用程序机会性锁已断开。 应用程序还可以使用 GetOverlappedResult 和 HasOverlappedIoCompleted 等函数。
在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) |