cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:6166回复:25

怎样根据U盘的设备路径得到盘符???

楼主#
更多 发布于:2004-10-08 23:30
我使用a5dcbf10-6530-11d2-901f-00c04fb951ed这个GUID得到了U盘的设备路径,但是用这个设备路径作为CreateFile的参数得到一个HANDLE为0x0000077c,把这个HANDLE做参数给DeviceIOControl结果是不支持请求,但是通过盘符作为CreateFile的参数得到的HANDLE也为0x0000077c,做参数给DeviceIOControl可以得到正确结果。请问我现在想从设备路径得到对应的盘符该怎么得到????

[编辑 -  10/9/04 by  cecily]

最新喜欢:

zxwitsmezxwits...
我不是你的天使,我不懂你的天堂
zxwitsme
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2006-04-20
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-09 08:39
通过guid无法得到盘符,不过可以用其他的方法
for( TCHAR cLetter = _T('C'); cLetter <= _T('Z'); cLetter++ )
{
CString sDrive (cLetter);
sDrive += _T(":\\");
if(GetDriveType(sDrive)==DRIVE_REMOVABLE)
{
m_UDisk=sDrive;
//MessageBox(m_UDisk,"udisk:",0);
break;
}
}
前提是你没有移动硬盘存在.
问你一下,你通过盘符createfile,然后再DeviceIoControl是怎么成功的?能发代码发给我看看吗?谢谢
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-09 09:02
我想 应该用SetupDiGetDeviceInterfaceDetail函数得到
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-09 09:08
1楼的谢谢,不过你说的这个方法我用过,但在将U盘格式化成硬盘形式时,就找不到了,因为你这个方法得到的盘会被判断成硬盘而不是U盘。所以必须用别的方法来实现。你想知道的是分两步,一步通过盘符来createfile得到一个句柄,二步把这个句柄传给DeviceIoControl就可以了,我这里就是这么实现的。

[编辑 -  10/10/04 by  cecily]
我不是你的天使,我不懂你的天堂
zxwitsme
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2006-04-20
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-10-09 12:08
createfile打开盘符以后,再用DeviceIoControl进行I/O操作,DeviceIoControl的第二个参数你是用的Scsi指令吗?我用Scsi指令老是返回0.也就是老是失败:(
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-10-09 12:30
a5dcbf10-6530-11d2-901f-00c04fb951ed

u盘和硬盘的GUID一样吗?
符号连接名一样吗?
我想应该可以区分开来
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
fgf1014
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2005-10-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-10-09 15:53
我使用a5dcbf10-6530-11d2-901f-00c04fb951ed这个GUID得到了U盘的设备路径,但是用这个设备路径作为CreateFile的参数得到一个HANDLE为0x0000077c,把这个HANDLE做参数给DeviceIOControl结果是不支持请求,但是通过盘符作为CreateFile的参数得到的HANDLE也为0x0000077c,做参数给DeviceIOControl可以得到正确结果。请问我现在想从设备路径得到对应的盘符该怎么得到????

[编辑 -  10/9/04 by  cecily]

用这个GUID:53f56307-b6bf-11d0-94f2-00a0c91efb8b,不要用a5dcbf10-6530-11d2-901f-00c04fb951ed,具体是为什么我也不知道,还请高手们指点。用前一个GUID会把你电脑中的所有物理硬盘都找出来,哪个是U盘还要自己想办法区分。
另外,我认为CreateFile得到的HANDLE是系统随机分配的一个数值,不同环境下同一设备的handle可能是不同的值,所以去看handle的值是否相同是没有意义的。
wozhuce
驱动小牛
驱动小牛
  • 注册日期2004-04-02
  • 最后登录2005-11-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-10-09 22:16
fgf1014兄,我用的是2k系统,你说的两个GUID我怎么都没找到阿,你能告诉我它怎么找吗?另外,我在注册表中看到{{36FC9E60-C465-11CF-8056-444553540000}很像U盘GUID,但是我用它时,SetupDiGetClassDevs返回错误87。希望能得到大虾的指点!非常感谢!
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-10-10 10:25
zxwitsme,我用的参数是IOCTL一类的。
snowStart,U盘的GUID应该和硬盘的不同的,不过我说的分不出来是说的用GetDriveType这个函数在我把U盘格式化成硬盘形式时,这个函数会把U盘判断成硬盘。
fgf1014,你说的这个GUID不能得到U盘的VID和PID,这个GUID得到的设备路径中不包括这个信息的。我现在麻烦的就是要同时得到VID和能打开设备的句柄(给DeviceIoControl用)。
wozhuce,fgf014说的这个GUID在系统中是有的,我也找到了,这个GUID可以得到盘的名称等等信息,fgf1014说的没错。你找到的这个{{36FC9E60-C465-11CF-8056-444553540000}GUID是表示USB一类设备的,要用来获得盘的信息好象是不行的,如果你要得到VID、PID就用我说的那个,如果你要得到盘的一些名称信息就用fgf1014的那个。你在注册表中搜索一下应该能找到的。我说的在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\{a5dcbf10-6530-11d2-901f-00c04fb951ed},fgf1014说的在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
 

我不是你的天使,我不懂你的天堂
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-10-10 10:28
目前我暂时用我说的GUID得到VID,用fgf1014提到的那个得到设备句柄,但是这样并不能保证能对应起来,如果电脑上不只一个U盘的话,就没办法确定谁是谁了,最好是能用一个GUID怎么获得这两种信息,才能保证取到的确实是同一个U盘的信息。
我不是你的天使,我不懂你的天堂
wozhuce
驱动小牛
驱动小牛
  • 注册日期2004-04-02
  • 最后登录2005-11-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-10-10 14:37
cecily兄,你好,非常感谢你的指点,刚才看来是我找错地方了。谢谢你的指点!
fgf1014
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2005-10-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-10-10 14:59
{a5dcbf10-6530-11d2-901f-00c04fb951ed}应该就是U盘的GUID,而{53f56307-b6bf-11d0-94f2-00a0c91efb8b}则是硬盘的GUID,之所以用后者也能找到U盘,是因为把U盘当做了普通的硬盘。用前一个GUID得到HANDLE后调用DeviceIOControl会出错,我想应该还是在打开USB时哪个地方不对,我还没有搞清楚。哪位仁兄搞定了请share一下,谢谢!!!
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-10-10 17:24
wozhuce,我不是“兄”,是姐,呵呵*^_^*
fgf1014,用{53f56307-b6bf-11d0-94f2-00a0c91efb8b}是可以得到硬盘和U盘的路径的,两者都可以得到,而且,如果你用这个GUID得到的路径,然后用createfile来得到设备句柄调用DeviceIOControl就不会出错。如果你要调用DeviceIOControl,可以用{53f56307-b6bf-11d0-94f2-00a0c91efb8b}来得到设备句柄。具体原因我不是特别清楚,但是猜想可能是因为{53f56307-b6bf-11d0-94f2-00a0c91efb8b}是针对磁盘的GUID,被系统作为盘符一类的东东,而{a5dcbf10-6530-11d2-901f-00c04fb951ed}更底层一点,用DeviceIOControl的参数是不能直接操作的。
我不是你的天使,我不懂你的天堂
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-10-10 17:33
现在又有新问题了,win98下得到的设备路径中没有vid信息,该怎么得到设备的vid???
我不是你的天使,我不懂你的天堂
zxwitsme
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2006-04-20
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-10-10 18:00
楼主你好,你是用53f56307-b6bf-11d0-94f2-00a0c91efb8b得到U盘Handle然后操作的吗?
你所用的ioctl是指IOCTL_SCSI_PASS_THROUGH这类scsi指令吗?
搞了个把月和U盘通信了,还没搞好,准备采用其他的方式了,555
wozhuce
驱动小牛
驱动小牛
  • 注册日期2004-04-02
  • 最后登录2005-11-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-10-11 08:15
cecily姐,哈哈,罪过!罪过!。。。很是抱歉啊!你说的哪个GUID确实管用,非常感谢!
 
 
yuanyuan0101
驱动牛犊
驱动牛犊
  • 注册日期2004-09-03
  • 最后登录2004-11-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-10-11 09:24
请问楼主姐姐,guid 是在哪里查询到的 ??我现在有个usb的modem已经安装了驱动,我怎么才能查到它属于的guid呢
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-10-11 10:23
zxwitsme,我是用的你说的这种方法,可以得到的,如果你单是要得到可以操作U盘的句柄的话,其实用盘符来得到最简单,而且管用,呵呵……我原来就是用盘符得到句柄的,不过现在因为要得到别的信息才用这些方法。
yuanyuan0101,你看我发的第三贴,GUID可以在注册表中找到,具体的GUID要看你需要什么样的信息,要用相应的GUID,不同的信息可能需要不同的GUID才能得到,我的第三帖中提到了两个GUID,里面包含了注册表中所在的路径,你到这些路径下去找就可以找到了,内容如下:
[wozhuce,fgf014说的这个GUID在系统中是有的,我也找到了,这个GUID可以得到盘的名称等等信息,fgf1014说的没错。你找到的这个{{36FC9E60-C465-11CF-8056-444553540000}GUID是表示USB一类设备的,要用来获得盘的信息好象是不行的,如果你要得到VID、PID就用我说的那个,如果你要得到盘的一些名称信息就用fgf1014的那个。你在注册表中搜索一下应该能找到的。我说的在HKEY_LOCAL_MACHINESYSTEMControlSet001ControlDeviceClasses{a5dcbf10-6530-11d2-901f-00c04fb951ed},fgf1014说的在HKEY_LOCAL_MACHINESYSTEMControlSet001ControlDeviceClasses{53f56307-b6bf-11d0-94f2-00a0c91efb8b}]







我不是你的天使,我不懂你的天堂
yuanyuan0101
驱动牛犊
驱动牛犊
  • 注册日期2004-09-03
  • 最后登录2004-11-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-10-11 11:08
谢谢楼主,,我是找到我usb modem的 guid了,可是把它用在 SetupDiEnumDeviceInterfaces中的返回值是 0,错误是:因为找不到该设备,为什么呢》我查到的的guid是4D36E96D-E325-11CE-BFC1-08002BE10318
yuanyuan0101
驱动牛犊
驱动牛犊
  • 注册日期2004-09-03
  • 最后登录2004-11-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-10-11 11:36
楼主姐姐,其实我是想用CreateFile来打开usb modem,可是它的第一个参数,我无法获取,,因为找不到它的路径,
上一页
游客

返回顶部