目前使用 usbview 例子,遍历出usb 设备
但是不知道怎么跟盘符挂钩比如一个USB设备挂载到了F盘,或者他还有分区F ,H盘等

解决方案 »

  1.   

    搜“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;
    }
      

  2.   

    我也用过这个,后面采取的是用哪个例子遍历出插入的设备的,然后通过遍历出的vpid 去匹配的注册表  
    但是这个办法 好像也不是很好样  如果多个u盘插拔 会造成一些错误
      

  3.   

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

  4.   

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

  5.   


    哦,能不能发一份例子啊
    额 今天才看到 // 遍历盘符
    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() )
      

  6.   

     USB\VID_05E3&PID_0735&REV_5410是啊,两个一样的设备不是就GG了
    这个好像不会吧 , 我用的是全信息匹配  如 USB\VID_05E3&PID_0735&REV_5410
    你要是只用vpid的话 那确实会 我想请问一下USB\VID_05E3&PID_0735 这个是个创惟什么型号的芯片
      

  7.   


    for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get DeviceID /value') do (
    echo %%a
      

  8.   

    GetLogicalDrives +GetDriveType 
      

  9.   

    是啊,两个一样的设备不是就GG了
    这个好像不会吧 , 我用的是全信息匹配  如 USB\VID_05E3&PID_0735&REV_5410
    你要是只用vpid的话 那确实会 我想请问一下USB\VID_05E3&PID_0735 这个是个创惟什么型号的芯片
    http://www.linux-usb.org/usb.ids
    在这里去看嘛   vid 是买的  pid 是厂家自定义的 ,,  这个上面找不到 也就不知道怎么找了