FSCTL_LOCK_VOLUME IOCTL (winioctl.h)

如果卷未被使用,则锁定该卷。 只能通过锁定卷的文件对象的句柄访问锁定卷 (*hDevice) 。 有关详细信息,请参见“备注”部分。

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

BOOL DeviceIoControl(
  (HANDLE) hVolume,            // handle to a volume
  (DWORD) FSCTL_LOCK_VOLUME,   // dwIoControlCode
  NULL,                        // lpInBuffer
  0,                           // nInBufferSize
  NULL,                        // lpOutBuffer
  0,                           // nOutBufferSize
  (LPDWORD) lpBytesReturned,   // number of bytes returned
  NULL                         // OVERLAPPED structure
);

如果请求成功,Irp-IoStatus.Status> 设置为 STATUS_SUCCESS。

否则,状态为相应的错误条件作为 NTSTATUS 代码。

有关详细信息,请参阅 NTSTATUS 值

注解

传递给 DeviceIoControlhDevice 句柄必须是卷的句柄,该句柄已打开以供直接访问。 若要检索此句柄,请调用 CreateFile ,并将 lpFileName 参数设置为以下格式的字符串:

\。\X:

其中 X 是硬盘驱动器分区号、软盘驱动器或 CD-ROM 驱动器。 应用程序还必须在 CreateFiledwShareMode 参数中指定FILE_SHARE_READFILE_SHARE_WRITE标志。

如果指定的卷是系统卷或包含页文件,则操作将失败。

如果卷上有任何打开的文件,此操作将失败。 相反,此操作成功表示没有打开的文件。

对于需要在一段时间内以独占方式访问卷的应用程序(例如,磁盘实用工具和备份程序),此操作非常有用。

锁定的卷将保持锁定状态,直到发生以下情况之一:

在锁定卷之前,系统会将所有缓存的数据刷新到卷。 例如,延迟写入缓存中保存的任何数据都写入卷。

NTFS 文件系统将锁定的卷视为已卸除的卷。 FSCTL_DISMOUNT_VOLUME控制代码的功能类似,但在卸载之前不检查打开的文件。 请注意,如果没有成功的锁定操作,任何进程都可以随时重新装载已卸除的卷。 例如,这不是执行卷备份的理想状态。

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

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

在 CsvFs 锁定卷上,仅在发出锁定请求的节点上发送 PNP 通知。 仅当 NTFS 顶部的 CsvFs 筛选器看不到任何打开的文件时,锁定才会成功。

获取 CSV 卷上的锁后,必须先关闭用于锁定该卷的句柄,然后才能打开该卷的句柄。 使用 FSCTL_UNLOCK_VOLUME 解锁卷是不够的。

要求

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

另请参阅

CloseHandle

CreateFile

DeviceIoControl

FSCTL_DISMOUNT_VOLUME

FSCTL_UNLOCK_VOLUME

卷管理控制代码