如何能自动捕获插入的usb设备,并且得到usb设备的名称。 如何能自动捕获插入的usb设备,并且得到usb设备的名称。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 "usbview in ddk"jslisong(碧螺春) 不是已经说了吗 下面是我目前项目中使用的一个函数LPSTR FindDevices(void) { PSP_DEVICE_INTERFACE_DETAIL_DATA DevDetailData[DEV_NUM]; GUID HidGuid; HDEVINFO DevInfo; SP_DEVICE_INTERFACE_DATA DevData; PSP_DEVICE_INTERFACE_DETAIL_DATA DevDetail; PHIDP_PREPARSED_DATA PreparsedData; HIDP_CAPS Capabilities; ULONG Length; int Index; BOOL ok; HANDLE DevHandle; int DevCount = 0; char chRet[256]; LPSTR strRet=NULL; memset(chRet, 0, 256); /* Get GUID for all System HIDs */ HidD_GetHidGuid(&HidGuid); /* Get Device Information for all present devices */ DevInfo = SetupDiGetClassDevs(&HidGuid, NULL, NULL, (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE) ); DevData.cbSize = sizeof(DevData); DevDetail = NULL; Index = -1; /* Scan all Devices */ do { Index++; /* Device Interface Element of a Device Information set */ ok = SetupDiEnumDeviceInterfaces(DevInfo, 0, &HidGuid, Index, &DevData ); if (!ok) break; /* Get Device Interface Details - Get Length */ ok = SetupDiGetDeviceInterfaceDetail(DevInfo, &DevData, NULL, 0, &Length, NULL ); /* Allocate memory for Device Detailed Data */ DevDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc(Length); /* Set cbSize in the DevDetail structure */ DevDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); /* Get Device Interface Details */ ok = SetupDiGetDeviceInterfaceDetail(DevInfo, &DevData, DevDetail, Length, NULL, NULL ); if (!ok) continue; /* Create File for Device Read/Write */ DevHandle = CreateFile(DevDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, 0, NULL ); if (DevHandle == INVALID_HANDLE_VALUE) continue; /* Get Preparsed Data */ strRet = DevDetail->DevicePath; ok = HidD_GetPreparsedData(DevHandle, &PreparsedData); if (!ok) continue; /* Get Device's Capabilities */ HidP_GetCaps(PreparsedData, &Capabilities); /* Remember Device Interface Detail Data for acceptable Devices */ if ((Capabilities.UsagePage == 0xFF00) && (Capabilities.Usage == 0x0001)) { DevDetailData[DevCount++] = DevDetail; DevDetail = NULL; } CloseHandle (DevHandle); } while (DevCount < DEV_NUM); if (DevDetail) { strRet = DevDetail->DevicePath; memcpy(chRet, DevDetail->DevicePath, sizeof(DevDetail->DevicePath)); free(DevDetail); } SetupDiDestroyDeviceInfoList (DevInfo); return (char*)(strRet);} 开发视频监控的请进 无法进入CreateThread函数 100分求助 ShellExecute问题 能提供关于“vc++6.0下用mfc编写图形界面程序”的书吗? SQLGetInstalledDrivers ActiveX控件问题!! 求助,在那里定义全局变量。 关于CFile读取文本文件数据到数组中的问题!(急!) 大家评论一下刚得季军的中国环球小姐(我觉得很不怎么样啊!)随便再大街上找都不她好! STL不能作为类成员吗?(BCB5) 求《inside ole2》 怎么给菜单加上选中标记(注意是基于对话框的程序)??
LPSTR FindDevices(void) {
PSP_DEVICE_INTERFACE_DETAIL_DATA DevDetailData[DEV_NUM]; GUID HidGuid;
HDEVINFO DevInfo;
SP_DEVICE_INTERFACE_DATA DevData;
PSP_DEVICE_INTERFACE_DETAIL_DATA DevDetail;
PHIDP_PREPARSED_DATA PreparsedData;
HIDP_CAPS Capabilities;
ULONG Length;
int Index;
BOOL ok;
HANDLE DevHandle;
int DevCount = 0;
char chRet[256];
LPSTR strRet=NULL; memset(chRet, 0, 256); /* Get GUID for all System HIDs */
HidD_GetHidGuid(&HidGuid); /* Get Device Information for all present devices */
DevInfo = SetupDiGetClassDevs(&HidGuid,
NULL,
NULL,
(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)
); DevData.cbSize = sizeof(DevData); DevDetail = NULL; Index = -1; /* Scan all Devices */
do { Index++; /* Device Interface Element of a Device Information set */
ok = SetupDiEnumDeviceInterfaces(DevInfo,
0,
&HidGuid,
Index,
&DevData
);
if (!ok) break; /* Get Device Interface Details - Get Length */
ok = SetupDiGetDeviceInterfaceDetail(DevInfo,
&DevData,
NULL,
0,
&Length,
NULL
); /* Allocate memory for Device Detailed Data */
DevDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc(Length);
/* Set cbSize in the DevDetail structure */
DevDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); /* Get Device Interface Details */
ok = SetupDiGetDeviceInterfaceDetail(DevInfo,
&DevData,
DevDetail,
Length,
NULL,
NULL
);
if (!ok) continue; /* Create File for Device Read/Write */
DevHandle = CreateFile(DevDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
0,
NULL
); if (DevHandle == INVALID_HANDLE_VALUE) continue; /* Get Preparsed Data */
strRet = DevDetail->DevicePath;
ok = HidD_GetPreparsedData(DevHandle, &PreparsedData);
if (!ok) continue; /* Get Device's Capabilities */
HidP_GetCaps(PreparsedData, &Capabilities); /* Remember Device Interface Detail Data for acceptable Devices */
if ((Capabilities.UsagePage == 0xFF00) && (Capabilities.Usage == 0x0001)) {
DevDetailData[DevCount++] = DevDetail;
DevDetail = NULL;
} CloseHandle (DevHandle); } while (DevCount < DEV_NUM); if (DevDetail)
{
strRet = DevDetail->DevicePath;
memcpy(chRet, DevDetail->DevicePath, sizeof(DevDetail->DevicePath));
free(DevDetail);
} SetupDiDestroyDeviceInfoList (DevInfo); return (char*)(strRet);
}