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

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

\\.\X

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

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

如果指定的卷被另一个进程锁定,操作将失败。 若要防止另一个进程锁定卷,请在打开卷后立即将其锁定。

卸载的卷具有以下属性:

  • 没有打开的文件。
  • 操作系统会检测卷。
一旦尝试访问该卷,操作系统就会尝试装载卸载的卷。 例如,调用 GetLogicalDrives 会触发操作系统装载卸载的卷。

当卷需要消失一段时间时,卸载卷非常有用。 例如,将卷文件系统从 FAT 文件系统更改为 NTFS 文件系统的应用程序可能会使用以下过程。

更改卷文件系统

  1. 打开卷。
  2. 锁定卷。
  3. 设置卷的格式。
  4. 卸载卷。
  5. 解锁卷。
  6. 关闭卷句柄。
卸载操作会从 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)

另请参阅

CreateFile

DeviceIoControl

ExitThread

FSCTL_LOCK_VOLUME

GetLogicalDrives

卷管理控制代码