我想让我的C ++ Windows应用程序卸下驱动器,并且不允许操作系统自动将其重新安装回去。
为此,我使用两个函数:CreateFile用于检索驱动器的句柄,DeviceIoControl用于对该驱动器执行不同的操作(通过从第一个函数检索的句柄)。
研究Windows API文档后,我的执行方法如下:
代码看起来像这样(为简单起见,我省略了一些变量声明):
HANDLE hVolume;
std::string volume_name = std::string("\\\\.\\D:"); //for drive with letter D
hVolume = CreateFile(
volume_name.c_str(),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
DWORD dwBytesReturned;
DeviceIoControl(
hVolume,
FSCTL_DISMOUNT_VOLUME,
NULL, 0,
NULL, 0,
&dwBytesReturned,
NULL);
DeviceIoControl(
hVolume,
IOCTL_VOLUME_OFFLINE,
NULL,
0,
NULL,
0,
&dwBytesReturned,
NULL);
CloseHandle(hVolume);
现在,这对于到目前为止我尝试过的几种不同的USB驱动器都可以正常工作。即使您双击“我的电脑”窗口中显示的驱动器D,也无法正确卸下它们,也不会将它们重新装回。
当我尝试使用CD-ROM驱动器时,事情不再起作用。有趣的是,我遇到了两个不同的错误(都在使用IOCTL_VOLUME_OFFLINE参数调用DeviceIoControl时):
有人使用IOCTL_VOLUME_OFFLINE与DeviceIoControl一起工作,并且经历了USB驱动器和CD-ROM驱动器的这种不同行为吗?还是有人知道如何以其他方式完成我想做的事情?
我正在使用Windows 7,但是根据Windows文档,此功能自Windows XP起可用。
任何指针将不胜感激。非常感谢。