FSCTL_REQUEST_BATCH_OPLOCK IOCTL (winioctl.h)

请求对文件进行批处理机会锁。

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

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

注解

此操作仅由从本地服务器请求机会锁 (oplock) 的客户端应用程序使用。 从远程服务器请求机会锁的客户端应用程序不得直接请求它们 - 网络重定向程序以透明方式为应用程序请求机会性锁。 尝试使用此操作从远程服务器请求机会锁将导致请求被拒绝。

如果需要新的 oplock 类型,则必须关闭句柄并使用 CreateFile 重新打开新句柄,并且必须使用所需的FSCTL_REQUEST_OPLOCK_XXX控制代码在新句柄上调用 DeviceIoControl。 若要在无需关闭句柄并重新打开) (可以更改 oplock 类型的句柄上请求 oplock ,请使用FSCTL_REQUEST_OPLOCK控件代码。

使用 FSCTL_REQUEST_BATCH_OPLOCK 请求对文件进行批处理机会锁。 只要持有级别 1 锁,客户端文件系统就可以在本地缓存读取数据、写入数据和处理数据。

批处理 oplock 所有者必须确认 oplock 中断 (才能在另一个句柄上通过与批处理 oplock 不兼容的任何操作之前,) 看到 中断 机会锁。 锁定断开后,系统会通知网络重定向程序不要将文件中的任何缓存数据视为有效数据。

有关详细信息,请参阅 机会锁的类型

有关各种 oplock 控制代码的比较,请参阅 FSCTL_REQUEST_OPLOCK

如果在非重叠 (同步) 模式下打开文件,FSCTL_REQUEST_BATCH_OPLOCK控制代码将失败。

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

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

另请参阅