阅读:1585回复:5
我用GUID找设备没找到,请指教。给分!
在VC的应用程序里我用SetupDiGetClassDevs通过GUID可以获得设备信息句柄,但是接下来用SetupDiEnumDeviceInterfaces获取设备接口的时候就失败了。为什么会这样呢?下面是代码
int GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath) { HDEVINFO hDevInfoSet; SP_DEVICE_INTERFACE_DATA ifdata; PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail; int nCount; BOOL bResult; // 取得一个该GUID相关的设备信息集句柄 hDevInfoSet = ::SetupDiGetClassDevs(lpGuid, // class GUID NULL, // 无关键字 NULL, // 不指定父窗口句柄 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // 目前存在的设备 // 失败... if (hDevInfoSet == INVALID_HANDLE_VALUE) { return 0; } // 申请设备接口数据空间 pDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, INTERFACE_DETAIL_SIZE); pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); nCount = 0; bResult = TRUE; // 设备序号=0,1,2... 逐一测试设备接口,到失败为止 while (bResult) { ifdata.cbSize = sizeof(ifdata); // 枚举符合该GUID的设备接口 bResult = ::SetupDiEnumDeviceInterfaces( hDevInfoSet, // 设备信息集句柄 NULL, // 不需额外的设备描述 lpGuid, // GUID (ULONG)nCount, // 设备信息集里的设备序号 &ifdata); // 设备接口信息 //就这里,bResult总是false,得不到设备接口 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (bResult) { // 取得该设备接口的细节(设备路径) bResult = SetupDiGetInterfaceDeviceDetail( hDevInfoSet, // 设备信息集句柄 &ifdata, // 设备接口信息 pDetail, // 设备接口细节(设备路径) INTERFACE_DETAIL_SIZE, // 输出缓冲区大小 NULL, // 不需计算输出缓冲区大小(直接用设定值) NULL); // 不需额外的设备描述 if (bResult) { // 复制设备路径到输出缓冲区 ::strcpy(pszDevicePath[nCount], pDetail->DevicePath); // 调整计数值 nCount++; } } } // 释放设备接口数据空间 ::GlobalFree(pDetail); // 关闭设备信息集句柄 ::SetupDiDestroyDeviceInfoList(hDevInfoSet); return nCount; } |
|
最新喜欢:![]() |
沙发#
发布于:2004-05-31 10:13
我的理解: GUID还需要分设备类吗?我用软件产生一个GUID它根本没有让我选择设备类型,这个GUID好像是根据时间和CPU时钟产生的。 仅仅在inf中加GUID是没有用的,需要在驱动程序源码中进行符号连接 |
|
板凳#
发布于:2004-05-27 17:17
我的理解:
你这么做是不完全的,你定义在INF文件中的是设备类GUID,比如USB类,串行口类。你还应该在你的驱动程序中定义一个你自己产生的guid,他是专门对应你的具体设备的,比如你做USB设备,那么这两个设备的guid都不一样,可他们的GUID都是一样的。你在应用程序中应该对guid操作就可以了。 供参考,如果同意我的说法,加分为证。 :D |
|
|
地板#
发布于:2004-05-27 16:09
我用的68013自带的驱动。开发包也带有应用程序,但是它用CreateFile的时候用的devicepath是\"\\\\\\\\.\\\\EZUSB-0\",我想改用GUID来获取devicepath,所以就在原来的*.inf文件里加了一行ClassGUID={36fc9e60-c465-11cf-8056-444553540000},然后更新驱动,用我自己的程序来访问设备,结果就不行。是不是*.inf文件不能这样改?还是改得不够?我就是想用GUID来获取设备。
|
|
地下室#
发布于:2004-05-27 16:02
你的设备驱动可能有问题
|
|
5楼#
发布于:2004-05-27 15:21
假如我的设备的GUID是{36FC9E60-C465-11CF-8056-444553540000},
那么利用GUID获得设备信息的时候定义的GUID结构变量为: const GUID DiskClassGuid = {0x36FC9E60, 0xC465, 0x11CF, {0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}; 这样写对不对?好像有问题,找不到设备。请高手指点。 |
|