枚举USB设备,找到了需要的设备,怎么去打开设备!

fangchao918628 2011-10-14 09:00:48
RT,我通过Setupdi 函数去枚举的,找到了我需要的设备,但是不知道怎么去CreateFile,第一个参数不知道填什么值!
网上有人说用实例ID,用了但是返回 3,路径不正确!
哪位大大做过,知道第一个是用哪个参数么,万分感谢

备注:我需要打开的设备设被没啥资料,只给了个指令集文档,其它一些信息只能自己去获取..
...全文
532 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
StupidProgramer 2011-11-25
  • 打赏
  • 举报
回复
孤独小剑 2011-10-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fangchao918628 的回复:]
引用 1 楼 gdujian0119 的回复:
娃娃脸……
帮你顶上去……

欢迎到VC版来逛哈....
[/Quote]我不常来VC里,这你都知道
fangchao918628 2011-10-15
  • 打赏
  • 举报
回复
非常感谢各位,已经解决了,
1 Call SetupDiGetClassDevs(interface_guid, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE) to get a list of devices.
2 Call SetupDiEnumDeviceInterfaces() to get a list of available device interfaces.
3 Call SetupDiGetDeviceInterfaceDetail()

一样是这三部曲,只是开始纠结于这个GUID不知道怎么获取!
谢谢,Bokutake,oyljerry,jennyvenus老大提供的思路.....
fangchao918628 2011-10-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gdujian0119 的回复:]
娃娃脸……
帮你顶上去……
[/Quote]
欢迎到VC版来逛哈....
老猿的春天 2011-10-15
  • 打赏
  • 举报
回复
设备明知道了,就用createfile打开,readfile,writefile,操作数据
lcy_888 2011-10-14
  • 打赏
  • 举报
回复
在此学习了,顶起。
用户 昵称 2011-10-14
  • 打赏
  • 举报
回复
	g____usb_count = 0;
*devicename = 0;
//查找本系统中HID类的GUID标识
//在我的机器上应该找出来
//{4D1E55B2-F16F-11CF-88CB-001111000030}
HidD_GetHidGuid( &guidHID );

//准备查找符合HID规范的USB设备
hDevInfo = SetupDiGetClassDevs( &guidHID, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE );
if( INVALID_HANDLE_VALUE == hDevInfo )
{
//INIT;
//mul( 0 );
//MASK( "SetupDiGetClassDevs失败\r\n" );
//SHOW;
return g____usb_count;
}

// 查找USB设备接口
memset( &InterfaceData, 0, sizeof( SP_DEVICE_INTERFACE_DATA ) );
InterfaceData.cbSize = sizeof( SP_DEVICE_INTERFACE_DATA );

i = 0;

do
{
//枚举设备接口
if( !SetupDiEnumDeviceInterfaces( hDevInfo, NULL, &guidHID, i, &InterfaceData ) )
{
SetupDiDestroyDeviceInfoList( hDevInfo );
//INIT;
//mul( 0 );
//MASK( "SetupDiGetClassDevs失败\r\n" );
//SHOW;
return g____usb_count;
}

//获取设备详细信息
length = 0;
if( !SetupDiGetDeviceInterfaceDetail( hDevInfo, &InterfaceData, NULL, 0, &length, NULL ) )
{
err = GetLastError();
if( ERROR_INSUFFICIENT_BUFFER != err )
{
i++;
continue;
}
}

DetailData = ( PSP_DEVICE_INTERFACE_DETAIL_DATA )LocalAlloc( LMEM_ZEROINIT, length );
if( NULL == DetailData )
{
SetupDiDestroyDeviceInfoList( hDevInfo );
//INIT;
//mul( 0 );
//MASK( "LocalAlloc失败\r\n" );
//SHOW;
return g____usb_count;
}

DetailData->cbSize = sizeof( SP_DEVICE_INTERFACE_DETAIL_DATA );
if( !SetupDiGetDeviceInterfaceDetail( hDevInfo, &InterfaceData, DetailData, length, NULL, NULL ) )
{
LocalFree( DetailData );
i++;
continue;
}

//打开设备,获取句柄
g____usb_handle_write[ g____usb_count ] = CreateFile( DetailData->DevicePath, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, ( LPSECURITY_ATTRIBUTES )NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
oyljerry 2011-10-14
  • 打赏
  • 举报
回复
CreateFile 制定设备路径就可以了
辰岡墨竹 2011-10-14
  • 打赏
  • 举报
回复
当然不行了,用SetupDiGetDeviceInterfaceDetail获得对应Interface ID的DevicePath,
这个DevicePath是可以直接传递给CreateFile的。

http://msdn.microsoft.com/en-us/library/windows/hardware/ff551120.aspx


1 Call SetupDiGetClassDevs(interface_guid, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE) to get a list of devices.
2 Call SetupDiEnumDeviceInterfaces() to get a list of available device interfaces.
3 Call SetupDiGetDeviceInterfaceDetail() to fetch information for the actual device interface we are going to use.
4 Use the DevicePath member of the PSP_DEVICE_INTERFACE_DETAIL_DATA structure returned by the SetupDiGetDeviceInterfaceDetail() call as the devicename/filename in the CreateFile() call.
5 Call WriteFile() repeatedly to send data to the device.
6 Call CloseHandle() to close the device
一般流程是这样的。
孤独小剑 2011-10-14
  • 打赏
  • 举报
回复
娃娃脸……
帮你顶上去……

16,472

社区成员

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

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

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