阅读:3913回复:15
请问能不能用VC++读出USB设备的PID/VID呀,怎么读,,最好详细一点呀,,谢谢了
请问能不能用VC++读出USB设备的PID/VID呀,怎么读,,最好详细一点呀,,谢谢了
|
|
最新喜欢:jinghu... |
沙发#
发布于: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 |
|
板凳#
发布于:2003-08-28 14:44
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2003-08-28 15:28
那是个CTL CODE,是用来告诉驱动程序你要做什么操作的,驱动程序头问建立有定义的。
|
|
地下室#
发布于:2003-08-28 16:03
用户被禁言,该主题自动屏蔽! |
|
5楼#
发布于:2003-08-28 16:08
当然是只对ezusb的驱动有用了
你要用的话换成你的驱动里的相应定义即可。 |
|
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。 呵呵,这可不局限于特定的芯片。 试试吧,希望对你有所帮助。 |
|
7楼#
发布于:2003-08-29 23:04
在DDK下有一例子USBVIEW,有相关代码,阅读一下这个代码可以知道如何取USB设备的信息,原理如下:
1。首先枚举系统的所有USB控制器 2。枚举每一个控制器下连接的所有USB HUB 3.枚举每一个HUB下连接的所有设备 4。枚举每一个设备的所有端口(ENDPOINT) 说白了就是用DeviceIoControl函数向系统或底层的设备驱动发送一些标准命令,以便得到一些描述信息等东西。 |
|
8楼#
发布于:2003-09-19 16:34
不错,挺有用的!
|
|
9楼#
发布于:2003-09-20 08:23
请问,这个DeviceIoControl函数主要是在做什么的呀????
PID和VID是什么东东呀,在做什么用的 [编辑 - 9/20/03 by kimlon] |
|
10楼#
发布于:2003-09-20 08:48
请问,这个DeviceIoControl函数主要是在做什么的呀???? 偶刚学的时候也对DeviceIoControl感到恐怖。现在我觉得它就是一个能够把你的应用程序,驱动程序,固件程序结合起来的东东。 比如你在应用程序中有一个IoCtl_readdata();那么你在驱动程序中也应该有相应的IoCtl_readdata();在固件中同样也要有,至少它们要实现的目的是一样的,名字可以不一样(看你怎么调用了,这我可帮不了你) pid和vid是厂家识别号和产品识别号。 安装驱动的时候用到。 驱动的inf文件里面的pid和vid一定要和固件程序中的pid和vid相同,不然它怎么知道我是哪个硬件的驱动。 不对的地方高手请指出,一定改正。 :D |
|
11楼#
发布于:2003-09-20 16:48
用户被禁言,该主题自动屏蔽! |
|
12楼#
发布于:2003-09-20 18:34
哈哈,我刚好刚做过这样的程序! 为什么我CreateFile总是不成功???? |
|
13楼#
发布于:2003-09-21 14:06
你的deviceName有错误嘛
|
|
14楼#
发布于:2003-09-21 14:43
你的deviceName有错误嘛 那该怎么设置呢? |
|
禁止发言
|
15楼#
发布于:2003-09-23 11:51
用户被禁言,该主题自动屏蔽! |