erong24
驱动牛犊
驱动牛犊
  • 注册日期2003-08-25
  • 最后登录2005-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3913回复:15

请问能不能用VC++读出USB设备的PID/VID呀,怎么读,,最好详细一点呀,,谢谢了

楼主#
更多 发布于:2003-08-26 10:13
请问能不能用VC++读出USB设备的PID/VID呀,怎么读,,最好详细一点呀,,谢谢了

最新喜欢:

jinghuirenjinghu...
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-26 12:42
首先你要确定打开了设备,然后运行下面几行程序:
USB_DEVICE_DESCRIPTOR m_DeviceDescr;
BOOL bResult = FALSE;
ULONG nBytes = 0;
bResult = DeviceIoControl(m_hDevice,//此参数是你打开的设备的句柄
IOCTL_EZUSB_GET_DEVICE_DESCRIPTOR,//词参数要根据你的驱动程序里面的定义做相应的修改
NULL,
0,
&m_DeviceDescr,
sizeof(USB_DEVICE_DESCRIPTOR),
&nBytes,
NULL);

if (bResult != TRUE)
{
CloseHandle(m_hDevice)
AfxMessageBox(\"无法读取数据!\", MB_OK);
}


简单地说就是读取设备的描述符,设备描述符里的    
USHORT idVendor;
USHORT idProduct;
两项就是vid和pid
wolfwoo22
禁止发言
禁止发言
  • 注册日期2003-03-11
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分930分
  • 威望8970点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-28 14:44
用户被禁言,该主题自动屏蔽!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-28 15:28
那是个CTL CODE,是用来告诉驱动程序你要做什么操作的,驱动程序头问建立有定义的。
wolfwoo22
禁止发言
禁止发言
  • 注册日期2003-03-11
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分930分
  • 威望8970点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-28 16:03
用户被禁言,该主题自动屏蔽!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-28 16:08
当然是只对ezusb的驱动有用了
你要用的话换成你的驱动里的相应定义即可。
eyeofsnow
驱动牛犊
驱动牛犊
  • 注册日期2003-07-31
  • 最后登录2006-01-16
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-29 09:45
哈哈,我刚好刚做过这样的程序!
我给你贴过来,参考!
1、获取RootHub句柄
hHubDevice = CreateFile(deviceName,
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL);
2、获取该Hub的节点信息
    success = DeviceIoControl(hHubDevice,
                             IOCTL_USB_GET_NODE_INFORMATION,
                              &NodeInfo,
                              sizeof(USB_NODE_INFORMATION),
                              &NodeInfo,
                              sizeof(USB_NODE_INFORMATION),
                              &nBytes,
                              NULL);
3、遍历节点,也就是usb device,获取ID
for (nPort=1; nPort <= NodeInfo.u.HubInformation.HubDescriptor.bNumberOfPorts; nPort++)
{
ULONG nConBytes;
nConBytes=sizeof(USB_NODE_CONNECTION_INFORMATION) +
            sizeof(USB_PIPE_INFO) * 30;
pNodeConInfo=(PUSB_NODE_CONNECTION_INFORMATION)malloc(nConBytes);

if (pNodeConInfo==NULL) continue;

pNodeConInfo->ConnectionIndex = nPort;
success =  DeviceIoControl(hHubDevice,
                                  IOCTL_USB_GET_NODE_CONNECTION_INFORMATION,
                                  pNodeConInfo,
                                  nConBytes,
                                  pNodeConInfo,
                                  nConBytes,
                                  &nConBytes,
                                  NULL);
4、在pNodeConInfo->DeviceDescriptor中,就有Vendor Id 和 Product Id。

呵呵,这可不局限于特定的芯片。

试试吧,希望对你有所帮助。
LIUTANG
驱动大牛
驱动大牛
  • 注册日期2001-03-30
  • 最后登录2020-12-27
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望58点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-08-29 23:04
在DDK下有一例子USBVIEW,有相关代码,阅读一下这个代码可以知道如何取USB设备的信息,原理如下:

1。首先枚举系统的所有USB控制器
2。枚举每一个控制器下连接的所有USB HUB
3.枚举每一个HUB下连接的所有设备
4。枚举每一个设备的所有端口(ENDPOINT)
说白了就是用DeviceIoControl函数向系统或底层的设备驱动发送一些标准命令,以便得到一些描述信息等东西。
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-09-19 16:34
不错,挺有用的!
kimlon
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2010-03-07
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-09-20 08:23
请问,这个DeviceIoControl函数主要是在做什么的呀????

PID和VID是什么东东呀,在做什么用的

[编辑 -  9/20/03 by  kimlon]
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2003-09-20 08:48
请问,这个DeviceIoControl函数主要是在做什么的呀????

PID和VID是什么东东呀,在做什么用的

[编辑 -  9/20/03 by  kimlon]


偶刚学的时候也对DeviceIoControl感到恐怖。现在我觉得它就是一个能够把你的应用程序,驱动程序,固件程序结合起来的东东。

比如你在应用程序中有一个IoCtl_readdata();那么你在驱动程序中也应该有相应的IoCtl_readdata();在固件中同样也要有,至少它们要实现的目的是一样的,名字可以不一样(看你怎么调用了,这我可帮不了你)

pid和vid是厂家识别号和产品识别号。 安装驱动的时候用到。 驱动的inf文件里面的pid和vid一定要和固件程序中的pid和vid相同,不然它怎么知道我是哪个硬件的驱动。

不对的地方高手请指出,一定改正。
 :D
yyx_200
禁止发言
禁止发言
  • 注册日期2001-12-24
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72283分
  • 威望361771点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-09-20 16:48
用户被禁言,该主题自动屏蔽!
erong24
驱动牛犊
驱动牛犊
  • 注册日期2003-08-25
  • 最后登录2005-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-09-20 18:34
哈哈,我刚好刚做过这样的程序!
我给你贴过来,参考!
1、获取RootHub句柄
hHubDevice = CreateFile(deviceName,
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL);
2、获取该Hub的节点信息
    success = DeviceIoControl(hHubDevice,
                             IOCTL_USB_GET_NODE_INFORMATION,
                              &NodeInfo,
                              sizeof(USB_NODE_INFORMATION),
                              &NodeInfo,
                              sizeof(USB_NODE_INFORMATION),
                              &nBytes,
                              NULL);
3、遍历节点,也就是usb device,获取ID
for (nPort=1; nPort <= NodeInfo.u.HubInformation.HubDescriptor.bNumberOfPorts; nPort++)
{
ULONG nConBytes;
nConBytes=sizeof(USB_NODE_CONNECTION_INFORMATION) +
            sizeof(USB_PIPE_INFO) * 30;
pNodeConInfo=(PUSB_NODE_CONNECTION_INFORMATION)malloc(nConBytes);

if (pNodeConInfo==NULL) continue;

pNodeConInfo->ConnectionIndex = nPort;
success =  DeviceIoControl(hHubDevice,
                                  IOCTL_USB_GET_NODE_CONNECTION_INFORMATION,
                                  pNodeConInfo,
                                  nConBytes,
                                  pNodeConInfo,
                                  nConBytes,
                                  &nConBytes,
                                  NULL);
4、在pNodeConInfo->DeviceDescriptor中,就有Vendor Id 和 Product Id。

呵呵,这可不局限于特定的芯片。

试试吧,希望对你有所帮助。








为什么我CreateFile总是不成功????
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-09-21 14:06
你的deviceName有错误嘛
erong24
驱动牛犊
驱动牛犊
  • 注册日期2003-08-25
  • 最后登录2005-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-09-21 14:43
你的deviceName有错误嘛


那该怎么设置呢?
codewarrior
禁止发言
禁止发言
  • 注册日期2002-05-23
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分5391分
  • 威望52850点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
  • 社区居民
15楼#
发布于:2003-09-23 11:51
用户被禁言,该主题自动屏蔽!
游客

返回顶部