junki
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2007-11-30
  • 粉丝0
  • 关注0
  • 积分124分
  • 威望13点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:5326回复:4

急,请问如何获取USB设备的路径,非HID类型

楼主#
更多 发布于:2005-05-12 10:22
请问我该如何在程序中实现,请给出实现方法与思路;
或者给出VB源程序,解决立即给分。

万分感谢!

最新喜欢:

tmgui00000tmgui0...
Biii38
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2014-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-12 10:51
ClassGuid = GUID_CLASS_USB_DEVICE

SetupDiGetClassDevs(ClassGuid,
                   nil,
                   0,
                   DIGCF_PRESENT or DIGCF_DEVICEINTERFACE );
SetupDiEnumDeviceInfo
SetupDiGetDeviceRegistryProperty
SetupDiDestroyDeviceInfoList

MSDN
yonge
驱动牛犊
驱动牛犊
  • 注册日期2004-11-09
  • 最后登录2005-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-12 17:46
用这个函数试试

// GetDeviceViaInterface: Open a handle via a device interface

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)
{
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 and pipe

HANDLE rv = CreateFile(ifDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( rv==INVALID_HANDLE_VALUE) rv = NULL;

delete ifDetail;
SetupDiDestroyDeviceInfoList(info);
return rv;
}
junki
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2007-11-30
  • 粉丝0
  • 关注0
  • 积分124分
  • 威望13点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-13 08:49
那么请问这个USB设备的GUID如何获得呢?
是不是每个GUID标志一个USB设备呢?
USB设备不同,GUID也一定不同,这样判断对不对?

请高手进来回答,谢谢!
sijiaoshe008
驱动牛犊
驱动牛犊
  • 注册日期2004-12-08
  • 最后登录2005-07-12
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-13 12:59
GUID在设备的驱动程序的inf文件中可以找到,不同累得USB设备有不同的GUID,你可以找相关的书查一下
游客

返回顶部