请教USB编程(急!!!)

ZHYPDW 2003-10-14 03:55:50
请问以下程序为什么不能查找到可用的USB设备信息?
开发环境:VC6,win2000sp2,win2000 DDK
程序:查找可用的USB设备信息

extern "C" {
#include <setupapi.h>
#include <hidsdi.h>
}
//注:已添加setupapi.lib,hid.lib文件到工程里

//以下为程序源码,放在一个按钮的Click事件里
CString m_strPath;
CString m_strLog;
// BOOL m_bFoundDevice;
m_strLog.Empty();

m_strLog = _T("正在查找系统中HID类的GUID标识...");
m_lstInfo.AddString(m_strLog);//m_lstInfo是ListBox控件
// 查找本系统中HID类的GUID标识
GUID guidHID;
HidD_GetHidGuid(&guidHID);
m_strLog = _T("HID类的GUID标识为:");
m_lstInfo.AddString(m_strLog);

m_strLog.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.MakeUpper();
m_lstInfo.AddString(m_strLog);

HDEVINFO hDevInfo =SetupDiGetClassDevs(&guidHID,NULL,0,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
m_lstInfo.AddString("抱歉,未找到可用设备");
return;
}

m_lstInfo.AddString(ErrStr(GetLastError())); //ErrStr是操作完成后返回信息的函数
//此时返回的信息是"重叠I/O操作在进行中"

UINT nIndex = 0;
m_strLog = _T("正在查找可用的USB设备...");
m_lstInfo.AddString(m_strLog);
SP_DEVICE_INTERFACE_DATA strtInterfaceData;
strtInterfaceData.cbSize =sizeof(SP_DEVICE_INTERFACE_DATA);
//for(int i=0;i<8;i++)
//{
BOOL bSuccess = SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&guidHID,nIndex,
&strtInterfaceData);
if (!bSuccess)
{

m_lstInfo.AddString(ErrStr(GetLastError()));
//此时返回的信息是"没有可用的数据了",
//程序运行到此就结束了,无法找到可用的USB设备
m_strLog = _T("抱歉,未找到可用的USB设备");
m_lstInfo.AddString(m_strLog);
//SetupDiDestroyDeviceInfoList(hDevInfo);
//return;
}
else
{
// 若找到了设备,则读取设备路径名
SP_DEVICE_INTERFACE_DETAIL_DATA strtDetailData;
if (!SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,
&strtDetailData,sizeof(strtDetailData),NULL,NULL))
{
m_lstInfo.AddString(_T("查找设备路径时出错!"));
//SetupDiDestroyDeviceInfoList(hDevInfo);
//return;
}
else
{
// 找到了设备路径
m_strPath = strtDetailData.DevicePath;
m_strLog.Format("可以通过路径%s访问设备",m_strPath);
m_lstInfo.AddString(m_strLog);

// 开放与设备的通信
HANDLE hCom = CreateFile(m_strPath,GENERIC_READ | GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hCom = INVALID_HANDLE_VALUE)
{
m_lstInfo.AddString(_T("无法打开通信端口"));
//SetupDiDestroyDeviceInfoList(hDevInfo);
//return;
}
else
{
// 查询设备标识
HIDD_ATTRIBUTES strtAttrib;
m_strLog = _T("正在读取设备的标识...");
m_lstInfo.AddString(m_strLog);

if (!HidD_GetAttributes(hCom,&strtAttrib))
{
m_lstInfo.AddString(_T("查询设备状态时出错!"));
//CloseHandle(hCom);
//SetupDiDestroyDeviceInfoList(hDevInfo);
//return;
}
else
{
// 将有关该设备的标识显示出来
m_strLog = _T("已读取有关该设备的标识:");
m_lstInfo.AddString(m_strLog);

// 显示供应商标识
m_strLog.Format("供应商标识:0x%x",strtAttrib.VendorID);
m_lstInfo.AddString(m_strLog);

// 显示产品标识
m_strLog.Format("产品标识:0x%x",strtAttrib.ProductID);
m_lstInfo.AddString(m_strLog);

// 显示产品版本号
m_strLog.Format("产品版本号:%d",strtAttrib.VersionNumber);
m_lstInfo.AddString(m_strLog);
}
}
// 释放资源
CloseHandle(hCom);
}
}
SetupDiDestroyDeviceInfoList(hDevInfo);
//}

//显示操作完成后返回信息的函数代码
CString CUSBCommDlg::ErrStr(DWORD ErrID)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
ErrID,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL);
CString strRet=(LPCTSTR)lpMsgBuf;
LocalFree(lpMsgBuf);
return strRet;
}
...全文
268 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunheart 2003-11-24
  • 打赏
  • 举报
回复
m
yifeng_ch 2003-11-17
  • 打赏
  • 举报
回复
关注。
ZHYPDW 2003-10-22
  • 打赏
  • 举报
回复
问题还没解决,请各位帮帮忙,谢谢!!!
会思考的草 2003-10-20
  • 打赏
  • 举报
回复
你先看看运行结果吧:注意最后一段是USB移动设备。
FriendlyName:
PhysicalDeviceObjectName:\Device\FloppyPDO0
Service:flpydisk
SerialNo.ACPI\PNP0700\3&13C0B0C5&0
Device Type:Standard floppy disk controller
StorageManagerNumber:0xffffffff StorageManagerName:
AliasName:FDC#GENERIC_FLOPPY_DRIVE#4&33bc18fa&0&0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}

FriendlyName:ELBY DVD-ROM SCSI CdRom Device
PhysicalDeviceObjectName:\Device\Scsi\ElbyVCD1Port0Path0Target0Lun0
Service:cdrom
SerialNo.ROOT\SCSIADAPTER\0000
Device Type:Virtual CloneDrive
StorageManagerNumber:0xffffffff StorageManagerName:
AliasName:SCSI#CdRom&Ven_ELBY&Prod_DVD-ROM&Rev_1.0#1&2afd7d61&0&000#{53f56308-b6bf-11d0-94f2-00a0c91efb8b}
AliasName:SCSI#CdRom&Ven_ELBY&Prod_DVD-ROM&Rev_1.0#1&2afd7d61&0&000#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}

FriendlyName:Generic STEALTH DVD SCSI CdRom Device
PhysicalDeviceObjectName:\Device\Scsi\st3wolf1Port3Path0Target0Lun0
Service:cdrom
SerialNo.X2BIOS\ST3T33\0000
Device Type:ST3WOLF SCSI Controller
StorageManagerNumber:0xffffffff StorageManagerName:
AliasName:SCSI#CdRom&Ven_Generic&Prod_STEALTH_DVD&Rev_#2&3243cb57&0&000#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
AliasName:SCSI#CdRom&Ven_Generic&Prod_STEALTH_DVD&Rev_#2&3243cb57&0&000#{53f56308-b6bf-11d0-94f2-00a0c91efb8b}

FriendlyName:
PhysicalDeviceObjectName:\Device\Harddisk1\DP(1)0-0+7
Service:
SerialNo.USBSTOR\DISK&VEN_NOKIA&PROD_5510&REV_0001\6&2197FDC9&0
Device Type:Disk drive
StorageManagerNumber:0x1 StorageManagerName:PhysDisk
AliasName:STORAGE#RemovableMedia#7&21710644&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
AliasName:STORAGE#RemovableMedia#7&21710644&0&RM#{53f5630a-b6bf-11d0-94f2-00a0c91efb8b}
AliasName:I:
AliasName:Volume{b0ea965c-ffd7-11d7-a01a-0050fc9875d0}

FriendlyName:
PhysicalDeviceObjectName:\Device\HarddiskVolume3
Service:
SerialNo.ROOT\FTDISK\0000
Device Type:Volume Manager
StorageManagerNumber:0x0 StorageManagerName:PhysDisk
AliasName:STORAGE#Volume#1&30a96598&0&Signature976D976DOffset232557600LengthFA08FC00#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
AliasName:Volume{82ca93ee-fd77-11d7-b76c-806d6172696f}

FriendlyName:
PhysicalDeviceObjectName:\Device\HarddiskVolume4
Service:
SerialNo.ROOT\FTDISK\0000
Device Type:Volume Manager
StorageManagerNumber:0x0 StorageManagerName:PhysDisk
AliasName:D:
AliasName:STORAGE#Volume#1&30a96598&0&Signature976D976DOffset32C5EF000Length2EE97F800#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
AliasName:Volume{82ca93ef-fd77-11d7-b76c-806d6172696f}

FriendlyName:
PhysicalDeviceObjectName:\Device\HarddiskVolume5
Service:
SerialNo.ROOT\FTDISK\0000
Device Type:Volume Manager
StorageManagerNumber:0x0 StorageManagerName:PhysDisk
AliasName:STORAGE#Volume#1&30a96598&0&Signature976D976DOffset61AF76600Length3362C1C00#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
AliasName:E:
AliasName:Volume{db552bef-eff9-11d7-bdfd-806d6172696f}

FriendlyName:
PhysicalDeviceObjectName:\Device\HarddiskVolume1
Service:
SerialNo.ROOT\FTDISK\0000
Device Type:Volume Manager
StorageManagerNumber:0x0 StorageManagerName:PhysDisk
AliasName:Volume{db552bec-eff9-11d7-bdfd-806d6172696f}
AliasName:STORAGE#Volume#1&30a96598&0&Signature976D976DOffset7E00LengthFA087E00#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}

FriendlyName:
PhysicalDeviceObjectName:\Device\HarddiskVolume2
Service:
SerialNo.ROOT\FTDISK\0000
Device Type:Volume Manager
StorageManagerNumber:0x0 StorageManagerName:PhysDisk
AliasName:STORAGE#Volume#1&30a96598&0&Signature976D976DOffsetFA097A00Length1384BFC00#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
AliasName:Volume{32d48352-fd65-11d7-abbb-806d6172696f}
AliasName:C:

FriendlyName:ST340016A
PhysicalDeviceObjectName:\Device\Ide\IdeDeviceP0T0L0-2
Service:disk
SerialNo.PCIIDE\IDECHANNEL\4&E3EC092&0&0
Device Type:Primary IDE Channel
Capacity:38166.7 MegaBytes SectorSize:512(0x200)
Cylinders:0(0x0),Heads:0(0x0),Sectors:0(0x0),SectorSize:0(0x0)
Warning Sector Sizes are Conflicted.
Warning Total Sectors are Conflicted:78165360(0x4a8b570):0(0x0)

DriveLetter D:
DriveLetter E:

DriveLetter C:

FriendlyName:Nokia 5510 USB Device
PhysicalDeviceObjectName:\Device\0000002e
Service:disk
SerialNo.USB\VID_0421&PID_0404\5&33F0A53A&0&2
Device Type:Nokia 5510
Capacity:60.9844 MegaBytes SectorSize:200(0x200)
Cylinders:0(0x0),Heads:0(0x0),Sectors:0(0x0),SectorSize:0(0x0)
Warning Sector Sizes are Conflicted.
Warning Total Sectors are Conflicted:124896(0x1e7e0):0(0x0)
DriveLetter I:
会思考的草 2003-10-20
  • 打赏
  • 举报
回复
或者发mail给我吧:kootebi@benq.com
会思考的草 2003-10-20
  • 打赏
  • 举报
回复
你要得到什么信息?给我mail,我给你个例子。
ZHYPDW 2003-10-20
  • 打赏
  • 举报
回复
自己up一下,急!!!
ZHYPDW 2003-10-15
  • 打赏
  • 举报
回复
请高手们帮帮忙吧,谢谢!!!
ZHYPDW 2003-10-15
  • 打赏
  • 举报
回复
谢谢大家帮忙up
tang_ghost 2003-10-15
  • 打赏
  • 举报
回复
gz
baseobject 2003-10-15
  • 打赏
  • 举报
回复
到www.driverdevelop.com问问吧!
crystal_heart 2003-10-15
  • 打赏
  • 举报
回复
up
ZHYPDW 2003-10-15
  • 打赏
  • 举报
回复
自己UP一下

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧