netskiff
驱动牛犊
驱动牛犊
  • 注册日期2004-04-25
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2457回复:12

加急!!!请问得到U盘的SymbolicLink后(或得到Pid Vid),程序如何得到系统的盘符?

楼主#
更多 发布于:2004-10-19 22:28
我已经得到了SymbolicLink,如:
\\?\USB#Vid_0ed1&Pid_7634#5044910541E30994#{a5dcbf10-6530-11d2-901f-00c04fb951ed}

程序如何得到系统的盘符?注册表中有相关的信息吗?

最新喜欢:

lsq77lsq77
netskiff
驱动牛犊
驱动牛犊
  • 注册日期2004-04-25
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-20 08:54
各位高手,给个建议就行。
zblaoshu
驱动牛犊
驱动牛犊
  • 注册日期2004-08-13
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-25 09:33
用你的GUIDa5dcbf10-6530-11d2-901f-00c04fb951ed,用这个函数
int GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath)
{
HDEVINFO hDevInfoSet;
SP_DEVICE_INTERFACE_DATA ifdata;
PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail;
int nCount;
BOOL bResult;

// 取得一个该GUID相关的设备信息集句柄
hDevInfoSet = ::SetupDiGetClassDevs(lpGuid, // class GUID
NULL, // 无关键字
NULL, // 不指定父窗口句柄
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // 目前存在的设备

// 失败...
if(hDevInfoSet == INVALID_HANDLE_VALUE)
{
return 0;
}

// 申请设备接口数据空间
pDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, INTERFACE_DETAIL_SIZE);

pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

nCount = 0;
bResult = TRUE;

// 设备序号=0,1,2... 逐一测试设备接口,到失败为止
while (bResult)
{
ifdata.cbSize=sizeof(ifdata);

// 枚举符合该GUID的设备接口
bResult = ::SetupDiEnumDeviceInterfaces(
hDevInfoSet, // 设备信息集句柄
NULL, // 不需额外的设备描述
lpGuid, // GUID
(ULONG)nCount, // 设备信息集里的设备序号
&ifdata); // 设备接口信息

if(bResult)
{
// 取得该设备接口的细节(设备路径)
bResult = SetupDiGetInterfaceDeviceDetail(
hDevInfoSet, // 设备信息集句柄
&ifdata, // 设备接口信息
pDetail, // 设备接口细节(设备路径)
INTERFACE_DETAIL_SIZE, // 输出缓冲区大小
NULL, // 不需计算输出缓冲区大小(直接用设定值)
NULL); // 不需额外的设备描述

if(bResult)
{
// 复制设备路径到输出缓冲区
::strcpy(pszDevicePath[nCount], pDetail->DevicePath);

// 调整计数值
nCount++;
}
}
}

// 释放设备接口数据空间
::GlobalFree(pDetail);

// 关闭设备信息集句柄
::SetupDiDestroyDeviceInfoList(hDevInfoSet);

return nCount;
}
netskiff
驱动牛犊
驱动牛犊
  • 注册日期2004-04-25
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-25 10:30
好几天没来了,zblaoshu回答得代码还没看懂,不过给分先了,
多谢zblaoshu了,希望论坛里的高手都能像zblaoshu这样,
这样论坛才有发展,才能有更多的人参与。
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-10-25 11:14
这个代码只能得到设备路径,也就是跟你已经得到的东西一样,得到盘符这个问题我已经找了很久了,反正现在还没能得到。
我不是你的天使,我不懂你的天堂
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-10-25 11:17
不过如果你并不需要把VID和盘符对应起来的话,可以通过另外一个GUID找到当前电脑上接的U盘的盘符,不过不能同时得到对应的VID和盘符,这之间的联系我还没找到。
我不是你的天使,我不懂你的天堂
netskiff
驱动牛犊
驱动牛犊
  • 注册日期2004-04-25
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-10-25 15:39
说的极是,我看了一下代码,它把所有这个GUID的路径得到了,但是对应关系没有。
USBVIEW里面只是得到的信息:
1、某个U盘查在Hub的哪个端口
2、Hub上USB设备的信息,如PID VID等
这个设备如果是U盘,在系统里应该会分配一个盘符,USB View里没有去寻找盘符。
看了很多帖子,有些说的不清,有些根本没有理解怎么回事,真是觉得微软太恶心了,这种信息应该在注册表或什么地方能取到才对呀。

[编辑 -  10/25/04 by  netskiff]

[编辑 -  10/25/04 by  netskiff]
zblaoshu
驱动牛犊
驱动牛犊
  • 注册日期2004-08-13
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-10-25 16:16
也是,我现在也正在找他们之间的对应关系
在CSDN上找到一个
1  ZwCreateFile打开标卷设备得到句柄。  
2  ObReferenceObjectByHandle通过步骤1得到的句柄得到设备对象  
3  用SetupApi通过GUID得到USB设备连接名  
4  ZwCreateFile打开设备  
5  ObReferenceObjectByHandle通过步骤1得到的句柄得到设备对象  
对比两次得到的设备对象是否相同  
可是这几个API我都不会用
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-10-25 16:23
呵呵,不会用的话查查MSDN里面有没有写,或者去查查网上有没有使用这个函数的例子,我一会儿看看去.
我不是你的天使,我不懂你的天堂
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-10-29 00:15
这个东西比较麻烦啊,98、me和2k都不同,需要扫描注册表啊!
netskiff
驱动牛犊
驱动牛犊
  • 注册日期2004-04-25
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-11-05 11:38
扫描那些信息阿
zxwitsme
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2006-04-20
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-11-05 15:08
请问cecily:
可以通过另外一个GUID找到当前电脑上接的U盘的盘符
这个怎么得到啊?谢谢
MacWin
驱动中牛
驱动中牛
  • 注册日期2002-12-16
  • 最后登录2009-05-27
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望44点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-11-10 15:12
98下找注册表,2K/XP下用CFGMGR32.LIB和setupapi.LIB
Chen
游客

返回顶部