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 值。
注解
传递给 DeviceIoControl 的 hDevice 句柄必须是卷的句柄,该句柄已打开以供直接访问。 若要检索此句柄,请调用 CreateFile ,并将 lpFileName 参数设置为以下格式的字符串:
\。\X:
其中 X 是硬盘驱动器分区号、软盘驱动器或 CD-ROM 驱动器。 应用程序还必须在 CreateFile 的 dwShareMode 参数中指定FILE_SHARE_READ和FILE_SHARE_WRITE标志。
如果指定的卷是系统卷或包含页文件,则操作将失败。
如果卷上有任何打开的文件,此操作将失败。 相反,此操作成功表示没有打开的文件。
对于需要在一段时间内以独占方式访问卷的应用程序(例如,磁盘实用工具和备份程序),此操作非常有用。
锁定的卷将保持锁定状态,直到发生以下情况之一:
- 应用程序使用 FSCTL_UNLOCK_VOLUME 控制代码来解锁卷。
- 句柄直接通过 CloseHandle 关闭,或者在进程终止时间接关闭。
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) |