FSCTL_DISMOUNT_VOLUME IOCTL (winioctl.h)
无论卷当前是否正在使用,都卸载卷。 有关详细信息,请参阅“备注”部分。
若要执行此操作,请使用以下参数调用 DeviceIoControl 函数。
C++ |
---|
BOOL DeviceIoControl( (HANDLE) hDevice, // handle to a volume (DWORD) FSCTL_DISMOUNT_VOLUME, // dwIoControlCodeNULL, // lpInBuffer0, // nInBufferSizeNULL, // lpOutBuffer0, // nOutBufferSize(LPDWORD) lpBytesReturned, // number of bytes returned (LPOVERLAPPED) lpOverlapped // OVERLAPPED structure ); |
言论
无论任何其他进程是否都使用该卷,FSCTL_DISMOUNT_VOLUME 控制代码将尝试卸载卷,如果这些进程不持有卷上的锁,这些进程可能会产生不可预知的结果。 有关锁定卷的信息,请参阅 FSCTL_LOCK_VOLUME。
传递给 DeviceIoControl 的 hDevice 句柄必须是卷的句柄,才能直接访问。 若要检索卷句柄,请调用 CreateFile,并将 lpFileName 参数设置为以下形式的字符串:
\\.\X:
其中,X 是硬盘驱动器分区号、软盘驱动器或 CD-ROM 驱动器。 应用程序还必须在 CreateFile的 dwShareMode 参数中指定 FILE_SHARE_READ 和 FILE_SHARE_WRITE 标志。
如果指定的卷是系统卷或包含页面文件,则操作将失败。
如果指定的卷被另一个进程锁定,操作将失败。 若要防止另一个进程锁定卷,请在打开卷后立即将其锁定。
卸载的卷具有以下属性:
- 没有打开的文件。
- 操作系统会检测卷。
当卷需要消失一段时间时,卸载卷非常有用。 例如,将卷文件系统从 FAT 文件系统更改为 NTFS 文件系统的应用程序可能会使用以下过程。
更改卷文件系统
- 打开卷。
- 锁定卷。
- 设置卷的格式。
- 卸载卷。
- 解锁卷。
- 关闭卷句柄。
在 Windows 8 和 Windows Server 2012 中,以下技术支持此代码。
科技 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 不 |
SMB 3.0 透明故障转移 (TFO) | 不 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 不 |
群集共享卷文件系统 (CsvFS) | 请参阅批注 |
在 CsvF 上,发出卸载的节点将看到正常的卸载序列。 在所有其他节点上,FS 将使所有打开的文件失效。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [仅限桌面应用] |
支持的最低服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | winioctl.h (包括 Windows.h) |