USB设备对应盘符,怎么知道USB挂载了那些盘符

时间的幽默 2017-08-16 08:19:14
目前使用 usbview 例子,遍历出usb 设备
但是不知道怎么跟盘符挂钩

比如一个USB设备挂载到了F盘,或者他还有分区F ,H盘等
...全文
1642 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2018-08-31
  • 打赏
  • 举报
回复
引用 14 楼 d2262272d 的回复:
话说 楼主在整什么啊, 去年8月 整到今年8月了 还没整出来 ???还没结贴
可能问题还没有解决吧?
worldy 2018-08-28
  • 打赏
  • 举报
回复
GetLogicalDrives +GetDriveType
窝米逗佛~ 2018-08-28
  • 打赏
  • 举报
回复
话说 楼主在整什么啊, 去年8月 整到今年8月了 还没整出来 ???还没结贴
窝米逗佛~ 2018-08-28
  • 打赏
  • 举报
回复
引用 10 楼 qq_34039820 的回复:
USB\VID_05E3&PID_0735&REV_5410

[quote=引用 7 楼 d2262272d 的回复:]
[quote=引用 6 楼 Carlyle123 的回复:]
[quote=引用 3 楼 d2262272d 的回复:]
我也用过这个,后面采取的是用哪个例子遍历出插入的设备的,然后通过遍历出的vpid 去匹配的注册表
但是这个办法 好像也不是很好样 如果多个u盘插拔 会造成一些错误

是啊,两个一样的设备不是就GG了[/quote]
这个好像不会吧 , 我用的是全信息匹配 如 USB\VID_05E3&PID_0735&REV_5410
你要是只用vpid的话 那确实会 [/quote]

我想请问一下USB\VID_05E3&PID_0735 这个是个创惟什么型号的芯片[/quote]
http://www.linux-usb.org/usb.ids
在这里去看嘛 vid 是买的 pid 是厂家自定义的 ,, 这个上面找不到 也就不知道怎么找了
Eleven 2018-08-24
  • 打赏
  • 举报
回复

for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get DeviceID /value') do (
echo %%a
qq_34039820 2018-08-23
  • 打赏
  • 举报
回复
USB\VID_05E3&PID_0735&REV_5410

引用 7 楼 d2262272d 的回复:
[quote=引用 6 楼 Carlyle123 的回复:]
[quote=引用 3 楼 d2262272d 的回复:]
我也用过这个,后面采取的是用哪个例子遍历出插入的设备的,然后通过遍历出的vpid 去匹配的注册表
但是这个办法 好像也不是很好样 如果多个u盘插拔 会造成一些错误

是啊,两个一样的设备不是就GG了[/quote]
这个好像不会吧 , 我用的是全信息匹配 如 USB\VID_05E3&PID_0735&REV_5410
你要是只用vpid的话 那确实会 [/quote]

我想请问一下USB\VID_05E3&PID_0735 这个是个创惟什么型号的芯片
窝米逗佛~ 2017-09-13
  • 打赏
  • 举报
回复
哦,能不能发一份例子啊[/quote] 额 今天才看到

// 遍历盘符
void CGetBusRelationshipHandle::getRegistryDiskInfo()
{
	HKEY hKey; //定义有关的hKey,在查询结束时要关闭。
	LPCTSTR path = "SYSTEM\\CurrentControlSet\\Services\\disk\\Enum";
	LONG return0 = ( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, path, 0, KEY_READ, &hKey ) );
	if ( return0 != ERROR_SUCCESS )
	{
		int err = GetLastError();
		//		MessageBox( "错误:无法打开有关的键!" );
		cout << "错误:无法打开有关的键!" << endl;
	}

	TCHAR portName[ 255 ], commName[ 255 ];
	DWORD dwLong, dwSize;
	int i = 0;
	while ( 1 )
	{
		dwLong = dwSize = sizeof( portName ) / sizeof( TCHAR );
		if ( ::RegEnumValue( hKey, i, portName, &dwLong, NULL, NULL, ( PUCHAR )commName, &dwSize ) == ERROR_NO_MORE_ITEMS )
		{
			break;
		}
		else
		{
			mapDevice.insert( make_pair( strToLower(commName), portName ) );
		}
		i++;
	}
	//cout << commName << endl;
}
	deviceDesc = DriverNameToDeviceDesc( driverKeyName, deviceID, strChild );
MAPDEVICE::iterator iter = mapDevice.find( strChild );
			if ( iter != mapDevice.end() )
时间的幽默 2017-08-25
  • 打赏
  • 举报
回复
引用 7 楼 d2262272d 的回复:
[quote=引用 6 楼 Carlyle123 的回复:] [quote=引用 3 楼 d2262272d 的回复:] 我也用过这个,后面采取的是用哪个例子遍历出插入的设备的,然后通过遍历出的vpid 去匹配的注册表 但是这个办法 好像也不是很好样 如果多个u盘插拔 会造成一些错误
是啊,两个一样的设备不是就GG了[/quote] 这个好像不会吧 , 我用的是全信息匹配 如 USB\VID_05E3&PID_0735&REV_5410 你要是只用vpid的话 那确实会 [/quote] 哦,能不能发一份例子啊
窝米逗佛~ 2017-08-23
  • 打赏
  • 举报
回复
引用 6 楼 Carlyle123 的回复:
[quote=引用 3 楼 d2262272d 的回复:] 我也用过这个,后面采取的是用哪个例子遍历出插入的设备的,然后通过遍历出的vpid 去匹配的注册表 但是这个办法 好像也不是很好样 如果多个u盘插拔 会造成一些错误
是啊,两个一样的设备不是就GG了[/quote] 这个好像不会吧 , 我用的是全信息匹配 如 USB\VID_05E3&PID_0735&REV_5410 你要是只用vpid的话 那确实会
赵4老师 2017-08-17
  • 打赏
  • 举报
回复
百度搜相关关键字。
窝米逗佛~ 2017-08-17
  • 打赏
  • 举报
回复
我也用过这个,后面采取的是用哪个例子遍历出插入的设备的,然后通过遍历出的vpid 去匹配的注册表 但是这个办法 好像也不是很好样 如果多个u盘插拔 会造成一些错误
赵4老师 2017-08-17
  • 打赏
  • 举报
回复
搜“devcon”? 仅供参考:
#include "stdafx.h"
using namespace std;
struct {
   UINT type;           LPCSTR name;
} DriveTypeFlags [] = {// GetDriveType返回码与人可读字符串对照表
   {DRIVE_UNKNOWN     ,"未知"        },
   {DRIVE_NO_ROOT_DIR ,"无效路经"    },
   {DRIVE_REMOVABLE   ,"可移动"      },
   {DRIVE_FIXED       ,"固定"        },
   {DRIVE_REMOTE      ,"网络驱动器"  },
   {DRIVE_CDROM       ,"CD-ROM"      },
   {DRIVE_RAMDISK     ,"随机存取磁盘"},
   {0                 , NULL         },
};
int _tmain() {
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
        cerr << _T("Fatal Error: MFC initialization failed") << endl;
        return -1;
    }

   // 获取逻辑驱动器字符串- a:\<null>b:\<null>c:\<null>...z:\<null><null>
   // 还可以用GetLogicalDrives以位图形式代替字符串形式获取信息
    TCHAR buf[200];
    DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);

    string msg = "逻辑驱动器:\n";
    for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) {
        LPCTSTR sDrivePath = s;
        msg += sDrivePath;
        msg += " ";
        UINT uDriveType = GetDriveType(sDrivePath);
        for (int i=0; DriveTypeFlags[i].name; i++) {
            if (uDriveType == DriveTypeFlags[i].type) {
                msg += DriveTypeFlags[i].name;
                break;//
            }
        }
        msg += '\n';
    }
    cout << msg.c_str();
    return 0;
}
时间的幽默 2017-08-17
  • 打赏
  • 举报
回复
引用 3 楼 d2262272d 的回复:
我也用过这个,后面采取的是用哪个例子遍历出插入的设备的,然后通过遍历出的vpid 去匹配的注册表 但是这个办法 好像也不是很好样 如果多个u盘插拔 会造成一些错误
是啊,两个一样的设备不是就GG了
时间的幽默 2017-08-17
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
搜“devcon”? 仅供参考:
#include "stdafx.h"
using namespace std;
struct {
   UINT type;           LPCSTR name;
} DriveTypeFlags [] = {// GetDriveType返回码与人可读字符串对照表
   {DRIVE_UNKNOWN     ,"未知"        },
   {DRIVE_NO_ROOT_DIR ,"无效路经"    },
   {DRIVE_REMOVABLE   ,"可移动"      },
   {DRIVE_FIXED       ,"固定"        },
   {DRIVE_REMOTE      ,"网络驱动器"  },
   {DRIVE_CDROM       ,"CD-ROM"      },
   {DRIVE_RAMDISK     ,"随机存取磁盘"},
   {0                 , NULL         },
};
int _tmain() {
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
        cerr << _T("Fatal Error: MFC initialization failed") << endl;
        return -1;
    }

   // 获取逻辑驱动器字符串- a:\<null>b:\<null>c:\<null>...z:\<null><null>
   // 还可以用GetLogicalDrives以位图形式代替字符串形式获取信息
    TCHAR buf[200];
    DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);

    string msg = "逻辑驱动器:\n";
    for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) {
        LPCTSTR sDrivePath = s;
        msg += sDrivePath;
        msg += " ";
        UINT uDriveType = GetDriveType(sDrivePath);
        for (int i=0; DriveTypeFlags[i].name; i++) {
            if (uDriveType == DriveTypeFlags[i].type) {
                msg += DriveTypeFlags[i].name;
                break;//
            }
        }
        msg += '\n';
    }
    cout << msg.c_str();
    return 0;
}
遍历类型。。。
时间的幽默 2017-08-16
  • 打赏
  • 举报
回复
用硬件信息不是很靠谱,如 芯片ID+厂商ID+序列号 有一些是没有序列号的

2,640

社区成员

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

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