//卸载USB设备
BOOL CUDlg::UninstallUSB(char szDriveName)
{
/**********************************************************
基本流程如下:
1.打开该卷标设备
2.锁定当前卷
3.关闭所有该卷上打开的所有文件
4.卸载该卷
5.解除该卷的锁定
6.关闭设备
7.删除卷标盘符
说明:由于当该卷标磁盘上的文件被打开时,23步骤有时会失败,所以
为了达到强制关闭的目的,封掉了235步骤
**********************************************************/
char VolumeName[] = ":";
HANDLE Device;
DWORD BytesReturned;
//初始化该卷标设备(类似":")
VolumeName[4] = szDriveName;
//打开该卷标的设备,不存在则返回
Device = CreateFile( VolumeName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL);
if(Device==INVALID_HANDLE_VALUE)
{
return 1;
}
//锁定需要卸载的卷
/*if (!DeviceIoControl( Device, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &BytesReturned, NULL ))
{
return 2;
}
*/
//关闭该卷上打开的所有文件
/*if (!DeviceIoControl( Device, IOCTL_FILE_DISK_CLOSE_FILE, NULL, 0, NULL, 0, &BytesReturned, NULL ))
{
return 3;
}
*/
//卸载该卷
if (!DeviceIoControl( Device, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0, &BytesReturned, NULL ))
{
return 4;
}
//解除对该卷的锁定
/*if (!DeviceIoControl( Device, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &BytesReturned, NULL ))
{
return 5;
}
*/
//关闭设备HANDLE
CloseHandle(Device);
//删除虚拟盘符,系统中看到的盘符应该消失
if (!DefineDosDevice( DDD_REMOVE_DEFINITION, &VolumeName[4], NULL ))
{
return 6;
}
return 0;
}
出自:http://hi.baidu.com/cifra/blog/item/6eb6ac30da3a4191a9018ed2.html