lujunql
驱动小牛
驱动小牛
  • 注册日期2004-06-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1572回复:10

在应用程序中如何打开USB设备!!

楼主#
更多 发布于:2004-07-08 16:31
我在应用程序中得到USB设备的GUID和VID,PID后如何得到该设备的名称(SymbolicName),以便用CreateFile打开!
lujunql
驱动小牛
驱动小牛
  • 注册日期2004-06-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-10 07:52
郁闷!为何程序运行到那儿就出错了!GUID肯定是正确的!为何?
为何呢?请有经验的大哥给指点指点吧!
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-09 22:06
后来我把预处理的头文件加到openbyinf.cpp中,错误没有了,但还是link不上,郁闷!
darydl
驱动小牛
驱动小牛
  • 注册日期2003-06-29
  • 最后登录2017-05-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-07-09 21:05
对啊
我的里面也没有
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-09 19:43
应该没有吧,在我做的驱动的测试程序中使用都没有问题。那个SetupDiGetClassDevs函数应该是被Driverworks封装起来了,看不到啊

[编辑 -  7/9/04 by  bobbysun2000]
darydl
驱动小牛
驱动小牛
  • 注册日期2003-06-29
  • 最后登录2017-05-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-07-09 18:49
SetupDiGetClassDevs那里就出了问题吧!
darydl
驱动小牛
驱动小牛
  • 注册日期2003-06-29
  • 最后登录2017-05-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2004-07-09 18:46
你出现的错误是vc中的常见错误,但对应于和硬件通信的程序中,很可能是你的openbyinf.cpp的结构虽然是没有语法错误但是与应用程序不匹配。你可以改改openbyinf.cpp。
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-09 17:26
darydl兄,为什么我把openbyinf.cpp加入我的工程,就出现下面的错误?
f:\vcprog\usb_test\openbyintf.cpp(54) : fatal error C1010: unexpected end of file while looking for precompiled header directive
lujunql
驱动小牛
驱动小牛
  • 注册日期2004-06-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-07-09 16:15
我的程序是这样的
//得到该GUID的句柄
hDevInfo = SetupDiGetClassDevs(&Guid,NULL,NULL,
DIGCF_PRESENT|DIGCF_DEVICEINTERFACE);
if(hDevInfo==NULL)
{
return NULL;
}
SP_DEVICE_INTERFACE_DATA DevInterfaceData;
DevInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
DevInterfaceData.InterfaceClassGuid=Guid;
BOOL bSuccess = SetupDiEnumDeviceInterfaces
hDevInfo,NULL,&Guid,index, &DevInterfaceData);//index=11;
//bSuccess返回值为0
if (!bSuccess)
{
SetupDiDestroyDeviceInfoList(hDevInfo);
return NULL;
}
SetupDiGetDeviceInterfaceDetail(hDevInfo,
&DevInterfaceData, NULL, 0,
&requiredLength, NULL);
detailData=(PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc
(requiredLength);
detailData->cbSize =sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

if( !SetupDiGetDeviceInterfaceDetail(hDevInfo,
&DevInterfaceData,
detailData, requiredLength,
NULL, NULL))
{
SetupDiDestroyDeviceInfoList(hDevInfo);
delete detailData;
return NULL;
}
else
{
............
}
.........
到SetupDiEnumDeviceInterfaces 时返回值是0,为啥啊!各位老大帮帮忙吧!是否还有其他的办法可以得到设备名称呢???
lujunql
驱动小牛
驱动小牛
  • 注册日期2004-06-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-07-09 09:18
谢谢你!我的设备如果使用WIN2000的通用USB驱动呢!
darydl
驱动小牛
驱动小牛
  • 注册日期2003-06-29
  • 最后登录2017-05-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2004-07-08 21:42
一般说来,你可以创建一个基于对话框的Application,要将你驱动程序中的ioctrl。h  interface。h openbyinf。cpp加入其中。
首先利用一个中断请求来启动设备,检测到设备后开始初始化设备:
hDevice = OpenByInterface( &ClassGuid, 0, &dError);
其中OpenByInterface(&ClassGuid,0,&Error)函数采用Guid接口方式与WDM通信,其中ClassGuid式设备的GUID,0是设备的序号,pError存放应用程序打开设备时的错误编号,返回值是设备的句柄号。
  然后在线程中进入你所需要的传输。
游客

返回顶部