FSCTL_OPBATCH_ACK_CLOSE_PENDING IOCTL (winioctl.h)
通知服务器客户端应用程序已准备好关闭文件。 在通知文件上的机会锁已准备好被破坏后,请使用此操作。
若要执行此操作,请使用以下参数调用 DeviceIoControl 函数。
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to file
FSCTL_OPBATCH_ACK_CLOSE_PENDING, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
注解
在调用此函数之前,请不要假设可用虚拟通道的数量,因为系统和其他插件可能具有保留的虚拟通道。 调用此函数后,始终检查CHANNEL_RC_TOO_MANY_CHANNELS返回代码。
有关重叠 I/O 对此操作的影响,请参阅 DeviceIoControl 主题的“备注”部分。
如果收到文件上的机会锁已准备好损坏,并且你打算尽快关闭文件时,请使用 FSCTL_OPBATCH_ACK_CLOSE_PENDING 控制代码。 此操作不请求新的机会锁。
如果不打算关闭文件,可以使用 FSCTL_OPLOCK_BREAK_ACKNOWLEDGE 或 FSCTL_OPLOCK_BREAK_ACK_NO_2 控制代码来响应通知。 如果被破坏的锁是独占机会锁,则使用前者指示文件应改为接收 2 级机会锁。 后者请求文件保持打开状态,但会丢失所有锁定。
通过使用与机会锁被断开的文件关联的 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) |