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)
群集共享卷文件系统 (CSV) 查看注释
 

在 CsvFs 上,发出卸载的节点将看到正常的卸载序列。 在所有其他节点上,FS 将使所有打开的文件失效。

要求

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

另请参阅

CreateFile

DeviceIoControl

ExitThread

FSCTL_LOCK_VOLUME

GetLogicalDrives

卷管理控制代码