16,472
社区成员
发帖
与我相关
我的任务
分享
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()
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 );