资源简介
c++ 实现枚举USB设备接口
涉及函数:
SetupDiGetClassDevs
SetupDiEnumDeviceInterfaces
SetupDiGetDeviceInterfaceDetail
涉及函数:
SetupDiGetClassDevs
SetupDiEnumDeviceInterfaces
SetupDiGetDeviceInterfaceDetail
代码片段和文件信息
// EnumDevice.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
#include
#include
#include
#include
#include
using namespace std;
//U盘 interface class GUID
GUID IID_CLASS_WCEUSBS ={0xa5dcbf10 0x6530 0x11d2 0x90 0x1f 0x00 0xc0 0x4f 0xb9 0x51 0xed};
BOOL SearchDevice(vector &vDevicePath)
{
BOOL bRes = FALSE;
LPGUID pInterfaceGuid = &IID_CLASS_WCEUSBS;
HDEVINFO hDeviceInfo = SetupDiGetClassDevs( pInterfaceGuid
NULL
NULL
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (INVALID_HANDLE_VALUE == hDeviceInfo)
{
goto Exit;
}
// enum device interface
SP_DEVICE_INTERFACE_DATA spDevInterData; //a structure of device interface data
memset(&spDevInterData 0x00 sizeof(SP_DEVICE_INTERFACE_DATA));
spDevInterData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
DWORD dwIndex = 0;
while (TRUE)
{
if (!SetupDiEnumDeviceInterfaces( hDeviceInfo
NULL
pInterfaceGuid
dwIndex
&spDevInterData))
{
if (ERROR_NO_MORE_ITEMS == GetLastError())
{
OutputDebugStringW(L“No more interface“);
}
else
{
OutputDebugStringW(L“SetupDiEnumDeviceInterfaces Error“);
}
goto Exit;
}
// get length of interface detail info
DWORD dwRequiredLength = 0; //for getting length of inter face detail data
if (!SetupDiGetDeviceInterfaceDetail( hDeviceInfo
&spDevInterData
NULL
0
&dwRequiredLength
NULL))
{
if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
{
OutputDebugStringW(L“calculate require length“);
//goto Exit;
}
}
// get interface detail info
PSP_DEVICE_INTERFACE_DETAIL_DATA pSpDIDetailData; //a pointer to interface detail data
pSpDIDetailData = NULL;
pSpDIDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)HeapAlloc(GetProcessHeap() HEAP_ZERO_MEMORY dwRequiredLength);
if(NULL == pSpDIDetailData)
{
OutputDebugStringW(L“HeapAlloc Memory Failed“);
if (!SetupDiDestroyDeviceInfoList(hDeviceInfo))
{
OutputDebugStringW(L“SetupDiDestroyDeviceInfoList Error“);
}
goto Exit;
}
pSpDIDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
if (!SetupDiGetDeviceInterfaceDetail( hDeviceInfo
&spDevInterData
pSpDIDetailData
dwRequiredLength
&dwRequiredLength
NULL))
{
OutputDebugStringW(L“SetupDiGetDeviceInterfaceDetail Error“);
goto Exit;
}
wstring wcsDevicePath = pSpDIDetailData->DevicePath;
vDevicePath.push_back(wcsDevicePath);
if (NULL != pSpDIDetailData)
{
HeapFree(GetProcessHeap() 0 pSpDIDetailData);
pSpDIDetailData = NULL;
}
dwIndex++;
}
if (!SetupDiDestroyDeviceInfoList(hDeviceInfo))
{
OutputDebugStringW(L“SetupDiDestroyDeviceInfoList Error“);
}
bRes = TRUE;
Exit:
return bRes;
}
int _tmain(int argc _TCHAR* argv[])
{
vector
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3241 2008-11-12 15:06 EnumDevice\EnumDevice\EnumDevice.cpp
文件 4597 2008-11-05 19:39 EnumDevice\EnumDevice\EnumDevice.vcproj
文件 297 2008-11-05 19:30 EnumDevice\EnumDevice\stdafx.cpp
文件 516 2008-11-05 19:30 EnumDevice\EnumDevice\stdafx.h
文件 895 2008-11-05 19:30 EnumDevice\EnumDevice.sln
目录 0 2008-11-12 15:07 EnumDevice\EnumDevice
目录 0 2008-11-12 15:07 EnumDevice
----------- --------- ---------- ----- ----
9546 7
- 上一篇:2006年湖北工业大学409数据结构试题
- 下一篇:编译原理中间代码生成程序
相关资源
- 多普达USB Modem驱动(适用于818、828、
- SN9C291B datasheet
- 希捷公布USB外部硬盘解决方案
- USB调试模式一键设置
- USB网卡驱动 USB2.0 TO Fast Ethernet Adapte
- USB转串口(RS232/RS485/RS422)驱动程序文
- USB Type-C SPEC
- H310.B360.H370.Z390.USB WIN7 64位第三方驱动
- 300系列WIN7 USB驱动.7z
- 华硕P8H61/USB3 R2.0主板BIOS驱动 免费版
- RTL8188EVT USB WIFI无线网卡驱动 免费版
- RTL8188 USB无线网卡模块完整方案
- USB PCB布局布线要点及注意事项
- USB驱动 INF中的服务安装段落无效的原
- MTP USB驱动win7 32+64位可用版
- ACS读卡器USB驱动程序 v4.0 官方版
- USB Power Delivery 2.0与3.0区别
- 二代证读验机具usb驱动 v3.0 官方版
- 新大陆pos机usb通用驱动 v2.1.1 官方最新
- EasyCAP SM-USB 007采集卡驱动 官方版
- 手机usb通用驱动程序(手机USB万能驱
- usb转 串口驱动 ch340 PL2303 win10 可用
-
D-li
nk DPH-10U VoIP USB手机 - 英特尔USB3.0可扩展主机控制器驱动程
- USB-Serial-Controller_虚拟串口.rar
- 带线路补偿的车载USB充电器电路原理
- STM32F103VCT6TR - High-density performance lin
- 用MC68HC05JB4开发USB外设
- 基于MC68HC908JB8的USB指纹采集仪
- 基于USB总线的MC68HC908JB8 Flash在线编程
评论
共有 条评论