获取设备信息列表

简介:

 

 
  1. #include <Windows.h> 
  2. #include <SetupAPI.h> 
  3. #include <stdio.h> 
  4. #include <devguid.h> 
  5. #include <RegStr.h> 
  6.  
  7. BOOL EnumDeviceInterface(const GUID * InterfaceClassGUID){ 
  8.     HDEVINFO DeviceInfoSet; 
  9.     HDEVINFO NewDeviceInfoSet; 
  10.     SP_DEVICE_INTERFACE_DATA DeviceInterfaceData; 
  11.     PSP_DEVICE_INTERFACE_DETAIL_DATA lpDeviceInterfaceDetailData; 
  12.     DWORD dwBufferSize = 0; 
  13.     DWORD i; 
  14.  
  15.     DeviceInfoSet = SetupDiCreateDeviceInfoList(NULL,NULL); 
  16.     if(DeviceInfoSet == INVALID_HANDLE_VALUE){ 
  17.         printf("Create device interface failed.(%d)\n",GetLastError()); 
  18.         return 0; 
  19.     } 
  20.     NewDeviceInfoSet = SetupDiGetClassDevsEx(InterfaceClassGUID,NULL,NULL,DIGCF_DEVICEINTERFACE|DIGCF_PRESENT,DeviceInfoSet,NULL,NULL); 
  21.     if(NewDeviceInfoSet == INVALID_HANDLE_VALUE){ 
  22.         printf("Get device interface infomation failed."); 
  23.         return 0; 
  24.     } 
  25.     DeviceInterfaceData.cbSize = sizeof(DeviceInterfaceData); 
  26.     for(i=0;;i++){ 
  27.         BOOL bResult = SetupDiEnumDeviceInterfaces(NewDeviceInfoSet,NULL,InterfaceClassGUID,i,&DeviceInterfaceData); 
  28.         if(!bResult){ 
  29.             if(bResult != NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS){ 
  30.                 printf("ERROR:%d\n",GetLastError()); 
  31.                 return FALSE; 
  32.             } 
  33.             break
  34.         }else
  35.             lpDeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)HeapAlloc(GetProcessHeap(),0,sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA)); 
  36.             lpDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); 
  37.             dwBufferSize = lpDeviceInterfaceDetailData->cbSize; 
  38.             while(!SetupDiGetDeviceInterfaceDetail(NewDeviceInfoSet,&DeviceInterfaceData,lpDeviceInterfaceDetailData,dwBufferSize,&dwBufferSize,NULL)){ 
  39.                 if(ERROR_INSUFFICIENT_BUFFER == GetLastError()){ 
  40.                     lpDeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)HeapReAlloc(GetProcessHeap(),0,lpDeviceInterfaceDetailData,dwBufferSize); 
  41.                     lpDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); 
  42.                 } 
  43.             } 
  44.             printf("DevicePath:%s\n",lpDeviceInterfaceDetailData->DevicePath); 
  45.             HeapFree(GetProcessHeap(),0,lpDeviceInterfaceDetailData); 
  46.         } 
  47.     } 
  48.     return TRUE; 
  49.  
  50. int main(int argc,char * argv[],char *envp[]){ 
  51.     printf("Get device interface information.\n"); 
  52.     EnumDeviceInterface(&GUID_DEVINTERFACE_DISK); 
  53.     return 0; 

 












本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/684000,如需转载请自行联系原作者

相关文章
|
存储 弹性计算 运维
数据灾备中心:创新性企业灾备管理服务
阿里云数据灾备中心旨在提供创新的灾备解决方案,确保企业业务连续性和数据安全。面对数据风险,如误删、勒索软件等,即使在公共云上,企业仍需灾备措施。数据灾备中心提供统一管理,通过3-2-1法则实现全面保护,特色包括统一覆盖多种资源、直观的星级评分和3D展示、简化运维流程。未来将推出更多功能,如资源分组评分、一体化策略中心、定制报表和消息中心,以支持不同行业的高要求,如金融、医疗等。
25033 8
数据灾备中心:创新性企业灾备管理服务
|
10月前
|
存储 人工智能 搜索推荐
阿里云佘俊泉:边缘云场景的探索与机遇
阿里云佘俊泉:边缘云场景的探索与机遇
331 0
|
弹性计算 负载均衡 容灾
应用阿里云弹性计算:打造高可用性云服务器ECS架构
阿里云弹性计算助力构建高可用云服务器ECS架构,通过实例分布、负载均衡、弹性IP、数据备份及多可用区部署,确保业务连续稳定。自动容错和迁移功能进一步增强容灾能力,提供全方位高可用保障。
585 0
|
Web App开发 安全 大数据
大数据问题排查系列-开启 kerberos 后无法访问 HIVESERVER2 等服务的 WEBUI
大数据问题排查系列-开启 kerberos 后无法访问 HIVESERVER2 等服务的 WEBUI
|
Java API Maven
【开源视频联动物联网平台】JAIN-SIP库写一个SIP服务器
【开源视频联动物联网平台】JAIN-SIP库写一个SIP服务器
1019 0
|
供应链 安全 机器人
Python - 接入钉钉机器人
Python - 接入钉钉机器人
2356 0
Python - 接入钉钉机器人
|
uml 开发者 Windows
推荐5款冷门小工具,看一看有没有你喜欢的?
每个人的电脑中都会安装很多软件,可能还保留着很多不为人知的冷门软件。不过虽然冷门,但绝不意味着低能,相反很多冷门软件的功能十分出色。闲话少说,接下来我就给大家推荐5款冷门小工具,看一看有没有你喜欢的。
307 0
推荐5款冷门小工具,看一看有没有你喜欢的?
textarea去掉边框和取消选中后的边框
textarea去掉边框和取消选中后的边框
317 0
|
自然语言处理 Linux 数据库
安装配置ibus输入法
安装配置ibus输入法,IBus 是一个输入法框架,一个输入非英语字符的系统。
2420 0
 安装配置ibus输入法

热门文章

最新文章