怎么实现弹出USB设备,而不是从系统中卸载

agu 2006-11-30 11:39:00
通常对USB的卸载操作,但我现在项目需要做一个"弹出"USB设备操作.就相当于在"我的电脑"里选中USB设备的盘符,单击鼠标右键,在单击"弹出"菜单项.这个"弹出"操作和从当前的系统中,通过在单击任务栏下的USB设备卸载是不同的.请问高手,应该怎么实现这样的操作,谢谢!
...全文
558 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_ghm 2006-12-07
  • 打赏
  • 举报
回复
我现在也在弄一个和Usb有关的问题。希望大家能够帮忙:一台电脑上多个u盘,系统通过什么怎样标识我要拔除的是其中的哪一个u盘呢???????
gaopl_8278 2006-12-01
  • 打赏
  • 举报
回复
我这里有不卸载U盘,但是会把U盘的卷(逻辑盘符)卸载掉,虽然你的U盘本身还在,但卷没有了,你是无法正常使用的.在我的电脑中看不到,但是在磁盘管理中能看到,但是它没有逻辑盘符,即使你给它手动分配新的盘符也是不能用的,除非你重新做卸载卷的逆操作.我把代码贴出来你看看吧.
名称:卸载指定的磁盘卷标
功能:对参数指定的磁盘卷标进行卸载,使其不能被用户使用
输入:DriveLetter 驱动器号(例如F)
输出:0-成功
作者:zhaojingfeng
**************************************************************************/
int UnMountVolume(char DriveLetter)
{
/**********************************************************
基本流程如下:
1.打开该卷标设备
2.锁定当前卷
3.关闭所有该卷上打开的所有文件
4.卸载该卷
5.解除该卷的锁定
6.关闭设备
7.删除卷标盘符
说明:由于当该卷标磁盘上的文件被打开时,23步骤有是会失败,所以
为了达到强制关闭的目的,封掉了235步骤
**********************************************************/
char VolumeName[] = "\\\\.\\ :";
HANDLE Device;
DWORD BytesReturned;

//初始化该卷标设备(类似"\\\\.\\F:")
VolumeName[4] = DriveLetter;

//打开该卷标的设备,不存在则返回
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;
}
这代码不是我写的,我写的是直接卸载U盘,所以有问题自己再摸索.
shawnwan 2006-12-01
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。
不懂,学习下
agu 2006-12-01
  • 打赏
  • 举报
回复
现在我能做到发现USB设备,能卸载USB设备,但是弹出功能还没有搞定呀?各位高手给点建议,看了MSDN的DDK,用CMAPI CONFIGRET WINAPI
CM_Request_Device_Eject(
IN DEVINST dnDevInst,
OUT PPNP_VETO_TYPE pVetoType,
OUT LPTSTR pszVetoName,
IN ULONG ulNameLength,
IN ULONG ulFlags
);能卸载USB设备,但怎么弹出,却找不到......
7teeth 2006-12-01
  • 打赏
  • 举报
回复
关注
agu 2006-11-30
  • 打赏
  • 举报
回复
http://blog.csdn.net/feifei1018/archive/2005/09/28/491087.aspx

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧