阅读:2457回复:12
加急!!!请问得到U盘的SymbolicLink后(或得到Pid Vid),程序如何得到系统的盘符?
我已经得到了SymbolicLink,如:
\\?\USB#Vid_0ed1&Pid_7634#5044910541E30994#{a5dcbf10-6530-11d2-901f-00c04fb951ed} 程序如何得到系统的盘符?注册表中有相关的信息吗? |
|
最新喜欢:![]() |
沙发#
发布于:2004-10-20 08:54
各位高手,给个建议就行。
|
|
板凳#
发布于: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; } |
|
地板#
发布于:2004-10-25 10:30
好几天没来了,zblaoshu回答得代码还没看懂,不过给分先了,
多谢zblaoshu了,希望论坛里的高手都能像zblaoshu这样, 这样论坛才有发展,才能有更多的人参与。 |
|
地下室#
发布于:2004-10-25 11:14
这个代码只能得到设备路径,也就是跟你已经得到的东西一样,得到盘符这个问题我已经找了很久了,反正现在还没能得到。
|
|
|
5楼#
发布于:2004-10-25 11:17
不过如果你并不需要把VID和盘符对应起来的话,可以通过另外一个GUID找到当前电脑上接的U盘的盘符,不过不能同时得到对应的VID和盘符,这之间的联系我还没找到。
|
|
|
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] |
|
7楼#
发布于:2004-10-25 16:16
也是,我现在也正在找他们之间的对应关系
在CSDN上找到一个 1 ZwCreateFile打开标卷设备得到句柄。 2 ObReferenceObjectByHandle通过步骤1得到的句柄得到设备对象 3 用SetupApi通过GUID得到USB设备连接名 4 ZwCreateFile打开设备 5 ObReferenceObjectByHandle通过步骤1得到的句柄得到设备对象 对比两次得到的设备对象是否相同 可是这几个API我都不会用 |
|
8楼#
发布于:2004-10-25 16:23
呵呵,不会用的话查查MSDN里面有没有写,或者去查查网上有没有使用这个函数的例子,我一会儿看看去.
|
|
|
9楼#
发布于:2004-10-29 00:15
这个东西比较麻烦啊,98、me和2k都不同,需要扫描注册表啊!
|
|
10楼#
发布于:2004-11-05 11:38
扫描那些信息阿
|
|
11楼#
发布于:2004-11-05 15:08
请问cecily:
可以通过另外一个GUID找到当前电脑上接的U盘的盘符 这个怎么得到啊?谢谢 |
|
12楼#
发布于:2004-11-10 15:12
98下找注册表,2K/XP下用CFGMGR32.LIB和setupapi.LIB
|
|
|