阅读:1057回复:0
USB+MP3,在用SetupDiEnumDeviceInterfaces()时,找不到任何接口。why?
各位大哥,小弟现在在windows2000下写一个低层的mp3加USB盘的过滤驱动程序。
我想在应用层,用deviceiocontrol发送自己的控制代码给过滤驱动程序。 但是我不知道硬件的名称,所以我通过GUID来列举所有的接口,用SetupDiGetClassDevs()函数。 但是在调用SetupDiEnumDeviceInterfaces()时,找不到任何接口。 为什么?请教各位大哥! 我的GUID试了2个,一个是下面的usb设备的GUID,还有一个是标准磁盘的GUID,是4D开头的。2个都不行,初步估计是我的代码有问题? 下面是我的代码。 const GUID USBClassGuid = {0x36FC9E60,0xC465,0x11CF,{0x80,0x56,0x44,0x45,0x53,0x54,0x00,0x00}}; int CSniffUSBDlg::GetDevicePath(LPGUID lpGuid, LPTSTR *pszDevicePath) { HDEVINFO hDevInfoSet; SP_DEVICE_INTERFACE_DATA ifdata; PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail; int nCount,index; BOOL bResult; const int INTERFACE_DETAIL_SIZE=1024; // 取得一个该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; index=0; bResult = TRUE; // 设备序号=0,1,2... 逐一测试设备接口,到失败为止 while (bResult||index<30) { ifdata.cbSize = sizeof(ifdata); // 枚举符合该GUID的设备接口 bResult = SetupDiEnumDeviceInterfaces( hDevInfoSet, // 设备信息集句柄 NULL, // 不需额外的设备描述 lpGuid, // GUID (ULONG)index, // 设备信息集里的设备序号 &ifdata); // 设备接口信息 if (bResult) { // 取得该设备接口的细节(设备路径) bResult = SetupDiGetInterfaceDeviceDetail( hDevInfoSet, // 设备信息集句柄 &ifdata, // 设备接口信息 pDetail, // 设备接口细节(设备路径) INTERFACE_DETAIL_SIZE, // 输出缓冲区大小 NULL, // 不需计算输出缓冲区大小(直接用设定值) NULL); // 不需额外的设备描述 if (bResult) { // 复制设备路径到输出缓冲区 strcpy(pszDevicePath[index], pDetail->DevicePath); // 调整计数值 nCount++; } } index++; } // 释放设备接口数据空间 GlobalFree(pDetail); // 关闭设备信息集句柄 SetupDiDestroyDeviceInfoList(hDevInfoSet); return nCount; } |
|