卸载指定的磁盘卷标_风雨人生路_百度空间

//卸载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



郑重声明:资讯 【卸载指定的磁盘卷标_风雨人生路_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——