阅读:1658回复:5
USB读写问题求救:
为什么打开USB设备失败:
我自己定义的CLASSGUID如下: DEFINE_GUID(GUID_CLASS_D12_BULK, 0x77f49320, 0x16ef, 0x11d2, 0xad, 0x51, 0x00, 0x60, 0x97, 0xb5, 0x14, 0xdd); 主程序如下: //获取设备的信息集 HDEVINFO HardwareDeviceInfo; LPGUID pGuid = (LPGUID)&GUID_CLASS_D12_BULK; HardwareDeviceInfo=SetupDiGetClassDevs(pGuid, //任意一个指向安装类或接口类的GUID NULL, //任意指向一个字符串,它过滤返回的设备 NULL, //给出与该设备信息集的成员有关的任何用户接口所用的顶层窗口句柄 DIGCF_PRESENT|DIGCF_INTERFACEDEVICE); //给出构造设备信息集时所用到的控制操作 //返回设备信息集的一个设备接口元素的环境结构 //SP_DEVICE_INTERFACE_DATA deviceInterfaceData ; SP_INTERFACE_DEVICE_DATA deviceInterfaceData ; int NumberDevices; NumberDevices = 4; deviceInterfaceData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA ); for(int i = 0;i < NumberDevices;i++) { SetupDiEnumDeviceInterfaces(HardwareDeviceInfo,//指向包含要返回其接口设备信息集,即调用SetupDiGetClassDevs函数时的返回值 0, //任意指向一个SP_DEVINFO_DATA的结构 pGuid, //指向一个GUID,它标识了所请求接口的设备接口类 i, //制定设备信息集中的设备接口列表中的一个基于零的索引 &deviceInterfaceData); //指向一个分配给调用程序的缓存区,指向标识一个请求设备的接口 } //获得设备路径名 ULONG predictedLength = 0; ULONG requiredLength = 0; SetupDiGetInterfaceDeviceDetail(HardwareDeviceInfo,//指向一个包含接口及其下属设备的设备信息集 &deviceInterfaceData,//指向标识接口的一个结构,即通过调用SetupDiEnumDeviceInterfaces函数的返回参数 NULL, //指向一缓存区,用于接收指定接口的信息,如果下值为零,则该值必须为空 0, //标识DeviceInterfaceDetailData缓存区大小 &requiredLength,//指向一个分配给调用程序的变量,用于接收DeviceInterfaceDetailData缓存区的大小 NULL); //指向一缓存区,用于接收所请求接口的设备信息 predictedLength = requiredLength; functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(predictedLength ); if(!SetupDiGetInterfaceDeviceDetail(HardwareDeviceInfo, &deviceInterfaceData, functionClassDeviceData,//指向一缓存区,用于接收指定接口的信息,如果下值为零,则该值必须为空 predictedLength, &requiredLength, NULL)) { MessageBox(\"获得USB设备路径失败,请检查USB设备或端口是否连接正确???\",\"设备路径提示框\",MB_ICONSTOP); return INVALID_HANDLE_VALUE; // return false; } //打开设备 hUsbDevice=CreateFile(functionClassDeviceData->DevicePath,//Pointer to a null-terminated string that specifies //the name of the object (file, communications resource, disk device, console, or directory) to create or open. GENERIC_READ|GENERIC_WRITE,//Specifies the type of access to the object FILE_SHARE_READ|FILE_SHARE_WRITE,//Specifies how the object can be shared NULL, //Ignored; set to NULL OPEN_EXISTING,//Specifies which action to take on files that exist 0, //Specifies the file attributes and flags for the file NULL); if(hUsbDevice==INVALID_HANDLE_VALUE) { AfxMessageBox(\"打开USB设备失败,请确认各项参数设置是否正确???\"); //CloseHandle(hUsbDevice); return false; } AfxMessageBox(\"打开USB设备成功\"); |
|
最新喜欢:![]() |
沙发#
发布于:2003-07-29 22:24
这个GUID_CLASS_D12_BULK应该和你驱动里面建立symbollink的guid是一致的。
|
|
板凳#
发布于:2003-07-29 22:40
我的驱动程序中设置的symbolicname的GUID和这个GUID_CLASS_D12_BULKS是一致的,但我在注册表中看到的SYMBOLICNAME与我设置的不一样,当我把GUID_CLASS_D12_BULKS设置为注册表中的symbolicname对应的GUID时,还是提示找不到设备?
|
|
地板#
发布于:2003-07-29 23:31
Why not try driverwizard or windriver?Dear friend.
|
|
地下室#
发布于:2005-08-01 23:26
这个DEFINE_GUID(GUID_CLASS_D12_BULK,
0x77f49320, 0x16ef, 0x11d2, 0xad, 0x51, 0x00, 0x60, 0x97, 0xb5, 0x14, 0xdd); 应该在那里定义? 我怎么找到我的那些代码? 我的注册表里的ClassGUID为36FC9E60-C465-11CF-8056-444553540000,我又该怎么做??? |
|
5楼#
发布于:2007-09-12 10:28
我和楼主情况是一样的
驱动程序中设置的symbolicname的GUID和这个GUID_CLASS_D12_BULKS是一致的,但是在注册表HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\ENUM\USB下面找到我所用的USB控制芯片对应的PID和VID,里面有个GUID是a5dcbf10-6530-11d2...........,到底该用哪个GUID?SetupDiEnumDeviceInterfaces()函数返回失败,大侠们帮助分析一下这是什么原因,老问题了,我尽量把情况说的明了一点,以后遇到这一类问题的朋友们也可以节省时间,少走弯路 |
|