calebzhou
驱动牛犊
驱动牛犊
  • 注册日期2004-02-22
  • 最后登录2004-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3641回复:11

请问获取USB设备的GUID 的API 是什么啊?

楼主#
更多 发布于:2004-02-29 19:15
 刚刚接触USB编程,  有个问题, 我想获得刚刚插上的USB设备的GUID , 但是查了一会没查到, 请问谁能帮我一下, 感谢!
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-04 15:29
一般你自己写驱动,自己去定义guid
larry
coolwindfly
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2004-12-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-04 15:54
查查这几个函数:
SetupDiGetClassDevs
SetupDiEnumDeviceInterfaces
SetupDiGetDeviceInterfaceDetail
coolwind
calebzhou
驱动牛犊
驱动牛犊
  • 注册日期2004-02-22
  • 最后登录2004-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-04 16:24
谢谢各位。
sheng4545
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2004-04-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-04 20:47
我在程序用下面的语句来实现获得设备的供应商id和产品id和版本号,却一直不能实现,连设备的GUID都未能获得,请高手一定要帮我啊~~在下感激不尽~~``
代码:
void CUSBPortDlg::OnSearch()
{
// TODO: Add your control notification handler code here
m_strLog.Empty();

m_strLog = _T("正在查找系统中HID类的GUID标识...\r\n");
SetDlgItemText(IDC_EDIT_REPORT,m_strLog);

// 查找本系统中HID类的GUID标识
GUID guidHID;
HidD_GetHidGuid(&guidHID);
m_strLog += _T("HID类的GUID标识为\r\n");

CString strShow;
strShow.Format("%08x-%04x-%04x-%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\r\n",
guidHID.Data1,guidHID.Data2,guidHID.Data3,guidHID.Data4[0],
guidHID.Data4[1],guidHID.Data4[2],guidHID.Data4[3],guidHID.Data4[4],
guidHID.Data4[5],guidHID.Data4[6],guidHID.Data4[7]);

m_strLog += strShow;
SetDlgItemText(IDC_EDIT_REPORT,m_strLog);

// 准备查找符合HID规范的USB设备
HDEVINFO hDevInfo = SetupDiGetClassDevs(&guidHID,NULL,0,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

UINT nIndex = 0;
m_strLog += _T("正在查找可用的USB设备...\r\n");
SetDlgItemText(IDC_EDIT_REPORT,m_strLog);

// 查找USB设备接口
for(int i=0;i<10;i++)
{
SP_DEVICE_INTERFACE_DATA strtInterfaceData;
BOOL bSuccess = SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&guidHID,0,
&strtInterfaceData);
if (!bSuccess)
{
m_strLog += _T("抱歉,未找到可用的USB设备");
SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}

// 若找到了设备,则读取设备路径名
SP_DEVICE_INTERFACE_DETAIL_DATA strtDetailData;
if (!SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,
&strtDetailData,sizeof(strtDetailData),NULL,NULL))
{
AfxMessageBox(_T("查找设备路径时出错!"));
SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}

// 找到了设备路径
m_strPath = strtDetailData.DevicePath;
strShow.Format("可以通过路径%s访问设备\r\n",m_strPath);
m_strLog += strShow;
SetDlgItemText(IDC_EDIT_REPORT,m_strLog);

// 开放与设备的通信
HANDLE hCom = CreateFile(m_strPath,GENERIC_READ | GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hCom = INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("无法打开通信端口"));
SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}

// 查询设备标识
HIDD_ATTRIBUTES strtAttrib;
m_strPath += _T("正在读取设备的标识...\r\n");
SetDlgItemText(IDC_EDIT_REPORT,m_strPath);

if (!HidD_GetAttributes(hCom,&strtAttrib))
{
AfxMessageBox(_T("查询设备状态时出错!"));
CloseHandle(hCom);
SetupDiDestroyDeviceInfoList(hDevInfo);
}

// 将有关该设备的标识显示出来
m_strPath += _T("已读取,见右边所示\r\n");
SetDlgItemText(IDC_EDIT_REPORT,m_strPath);

// 显示供应商标识
strShow.Format("0x%x",strtAttrib.VendorID);
SetDlgItemText(IDC_ID_VENDOR,strShow);

// 显示产品标识
strShow.Format("0x%x",strtAttrib.ProductID);
SetDlgItemText(IDC_ID_PRODUCT,strShow);

// 显示产品版本号
strShow.Format("%d",strtAttrib.VersionNumber);
SetDlgItemText(IDC_ID_VERSION,strShow);

// 释放资源
CloseHandle(hCom);
SetupDiDestroyDeviceInfoList(hDevInfo);
}
}

同时我已经把hid.dll和setupapi.dll加入到工程中来了啊,还是不行~~~
我的就是你的,也是大家的,那你的呢?
sheng4545
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2004-04-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-04 20:56
可能代码有点长,伤害了您的眼睛,我对此深表歉意~~~~~
小弟苦想了好几天,还是找不出是什么问题,小弟也是刚接触usb方面的东西!~~还望各位高手多多指教~~~

我的emai:sheng4545@eyou.com
不过最近病毒邮件病毒比较猖狂,所以还望各位大哥大姐写标题的时候加上"usb"字样,小弟感激不尽~~~
我的就是你的,也是大家的,那你的呢?
author22
驱动小牛
驱动小牛
  • 注册日期2003-08-20
  • 最后登录2018-04-07
  • 粉丝0
  • 关注0
  • 积分391分
  • 威望85点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-05 15:52
我看过这个程序,不过在我的计算机上面也找不到设备。就算连U盘也检测不到。我自己挂上的USB设备也检测不到。可能是程序的问题。
我的Vc代码仓库:[url]http://sh.b211.net[/url]
calebzhou
驱动牛犊
驱动牛犊
  • 注册日期2004-02-22
  • 最后登录2004-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-05 16:17

回author22, sheng4545:
我前阵子也是比较痛苦的, 不过好在有同事指导了一下, 在XP DDK下, 有一个文件, 路径是: /XPDDK/src/general/tamaster/exe/notify  , 里面的文件看一看, 你会受启发的。  
sheng4545
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2004-04-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-06 19:13
谢谢你的建议,但是我在我自己的机子上找不到什么XPDDK啊~~
那个是不是一个下载的什么软件啊~~~
还是装xp操作系统的时候就装好了呢??
我的就是你的,也是大家的,那你的呢?
calebzhou
驱动牛犊
驱动牛犊
  • 注册日期2004-02-22
  • 最后登录2004-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-03-06 20:00
XP DDK 是微软的driver develop kit , 是要重新安装的软件, 比较大, 不知道微软的网站有没有, 我是装公司的。 你最好装一下,很实用的。 比较大哦!
junki
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2007-11-30
  • 粉丝0
  • 关注0
  • 积分124分
  • 威望13点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-03-17 10:50
Module:

Public Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type

Form:
    Dim HidGuid As GUID
    Result = HidD_GetHidGuid(HidGuid)    
    
    GUIDString = _
        Hex$(HidGuid.Data1) & \"-\" & _
        Hex$(HidGuid.Data2) & \"-\" & _
        Hex$(HidGuid.Data3) & \"-\"
    
    For Count = 0 To 7
        \'Ensure that each of the 8 bytes in the GUID displays two characters.
        If HidGuid.Data4(Count) >= &H10 Then
            GUIDString = GUIDString & Hex$(HidGuid.Data4(Count)) & \" \"
        Else
            GUIDString = GUIDString & \"0\" & Hex$(HidGuid.Data4(Count)) & \" \"
        End If
    Next Count    
   Msgbox GUIDString \'GUIDString is GUID information
coolwuya
驱动牛犊
驱动牛犊
  • 注册日期2004-06-29
  • 最后登录2007-08-24
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望21点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-03-17 13:13
HID的设备直接用HidD_GetHidGuid就可以获得GUID

当然,你要再检测PID,VID看是否是你自己的设备

[编辑 -  3/17/05 by  coolwuya]
USB开发交流
游客

返回顶部