FSCTL_DISMOUNT_VOLUME DeviceIoControl 操作将卸载卷。
dwIoControlCode = FSCTL_DISMOUNT_VOLUME; //操作代码
lpInBuffer = NULL; //指向输入缓冲区的指针;不曾用过;必须为NULL
nInBufferSize = 0; //输入缓冲区的大小不曾用过;必须为零
lpOutBuffer ; //指向输出缓冲区的指针;不曾用过;必须为NULL
nOutBufferSize ; //输出缓冲区的大小不曾用过;必须为零
lpBytesReturned ; //指向由DeviceIoControl函数使用的DWORD的指针
参数
【lpInBuffer】
指向输入缓冲区。不用于此操作。设置为NULL。
【nInBufferSize】
指定【lpInBuffer】指向的缓冲区的大小(以字节为单位)。不用于此操作。设置为零。
【lpOutBuffer】
指向输出缓冲区。不用于此操作。设置为NULL。
【nOutBufferSize】
指定【lpOutBuffer】指向的缓冲区的大小(以字节为单位)。不用于此操作。设置为零。
【lpBytesReturned】
指向DWORD.此值不能为NULL。尽管FSCTL_DISMOUNT_VOLUME操作不产生输出数据,【lpOutBuffer】应为NULL,但DeviceIoControl函数使用【lpBytesReturned】指向的变量。操作后,该变量的值没有意义。
返回值
如果操作成功,DeviceIoControl返回TRUE。
如果操作失败,DeviceIoControl返回FALSE。要获取扩展错误信息,请调用GetLastError.
备注
传递给DeviceIoControl的【hDevice】句柄必须是一个卷的句柄,为直接访问打开。应用程序可以通过调用CreateFile 【lpFileName】设置为如下所示的字符串来获取这样的句柄:
\\.\X:
其中X是硬盘驱动器分区字母,软盘驱动器或CD-ROM驱动器。应用程序还必须在CreateFile的【dwShareMode】参数中指定FILE_SHARE_READ和FILE_SHARE_WRITE标志。
如果指定的卷被锁定,则操作失败。
卸载的卷具有以下属性:
*没有打开的文件。
*操作系统不会“知道”音量。
一旦尝试访问卸载的卷,操作系统将尝试安装卸载的卷。例如,对GetLogicalDrives的调用将触发操作系统挂载任何未安装的卷。
当卷需要消失一段时间时,卸载卷是有用的。例如,将卷的文件系统从FAT更改为NTFS的应用程序可能会遵循以下步骤:
打开音量
2.锁定音量
3.格式化
4.锁定音量
5.卸载音量
6.关闭音量手柄
卸载操作会从FAT文件系统的“意识”中删除卷。当操作系统挂载卷时,它显示为NTFS卷。
也可以看看