如何获取USB设备

tanweijian2009 2009-10-19 05:30:32
插入一个USB接口的扫描仪,在不知道这个扫描仪的芯片资料情况下,怎么获取它的GUID和编写程序读取扫描仪的扫描数据
...全文
385 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuxmzc 2010-01-11
  • 打赏
  • 举报
回复
装个XP的DDK吧,里面保证有你满意的答案。
glacierful 2010-01-11
  • 打赏
  • 举报
回复
不懂。
tonyzane 2010-01-11
  • 打赏
  • 举报
回复
如果是自己做的驱动的话好办些,add device里注册一个guid接口,应用程序里枚举该guid就是了。
驱动add device 中注册接口:
status = IoRegisterDeviceInterface(pdo, &MY_HARDWARE, NULL, &dx->interfacename);
if( !NT_SUCCESS(status))
{
IoDeleteDevice(fdo);
return status;
}
KdPrint(("%wZ\n",&dx->interfacename));
IoSetDeviceInterfaceState(&dx->interfacename, TRUE);


应用程序中枚举:

HANDLE GetDeviceViaInterface( GUID* pGuid, DWORD instance)
{
// Get handle to relevant device information set
HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if(info==INVALID_HANDLE_VALUE)
{
printf("No HDEVINFO available for this GUID\n");
return NULL;
}

// Get interface data for the requested instance
SP_INTERFACE_DEVICE_DATA ifdata;
ifdata.cbSize = sizeof(ifdata);
if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata))
{
printf("No SP_INTERFACE_DEVICE_DATA available for this GUID instance\n");
SetupDiDestroyDeviceInfoList(info);
return NULL;
}

// Get size of symbolic link name
DWORD ReqLen;
SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL);
PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]);
if( ifDetail==NULL)
{
SetupDiDestroyDeviceInfoList(info);
return NULL;
}

// Get symbolic link name
ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL))
{
SetupDiDestroyDeviceInfoList(info);
delete ifDetail;
return NULL;
}

printf("Symbolic link is %s\n",ifDetail->DevicePath);
// Open file
HANDLE rv = CreateFile( ifDetail->DevicePath,
STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE| FILE_WRITE_DATA |FILE_APPEND_DATA|FILE_READ_ATTRIBUTES|FILE_WRITE_ATTRIBUTES,
FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
if( rv==INVALID_HANDLE_VALUE) rv = NULL;

delete ifDetail;
SetupDiDestroyDeviceInfoList(info);
return rv;
}
tanxs001 2010-01-08
  • 打赏
  • 举报
回复
一定需要编程方法实现吗?可以用bushound 抓取!
scxtzcnc 2009-12-24
  • 打赏
  • 举报
回复
学习
Ricky_jin 2009-11-23
  • 打赏
  • 举报
回复
怎么没人回答呢,我本打算也来学习一下的
pure412277685 2009-11-20
  • 打赏
  • 举报
回复
来学习学习!!
lovevicor 2009-11-20
  • 打赏
  • 举报
回复
想有更多的学习
运运丹 2009-11-18
  • 打赏
  • 举报
回复
要实现控制扫描仪必须知道接口芯片的型号,并编写接口芯片的程序以及上位机的应用程序来实现通信,只有上位机的程序是不够的,就算用DK2000生成了驱动,电脑能识别扫描仪,但是没接口芯片的程序,你一样没办法控制或者读取它的数据。
morrisyuan 2009-11-18
  • 打赏
  • 举报
回复
在不知道这个扫描仪的芯片资料情况下,扫描仪也是有躯动的,没有躯动你就应该不能使用这个设备(至少不能识别)
躯动有提供操作设备的函数
vivvan 2009-10-21
  • 打赏
  • 举报
回复
做这个程序先要安装DDK2000或DDKxp,GUID在注册表里可以查到,读写就用createfile、readfile、writefile
tanweijian2009 2009-10-19
  • 打赏
  • 举报
回复
哪位高手知道请指教
ziplj 2009-10-19
  • 打赏
  • 举报
回复
读取数据 就需要知道驱动的名称 以及提供给外部的 链接名称
获取GUID 应该枚举设备可以得到吧 这个我不清楚 没用过
tanweijian2009 2009-10-19
  • 打赏
  • 举报
回复
希望大家能给出相关代码代码,感谢

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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