1. #include <windows.h>
  2. #include <setupapi.h>
  3. #include <objbase.h>
  4. #include <initguid.h>
  5. #include <stdio.h>
  6.  
  7. DEFINE_GUID(GUID_DEVINTERFACE_CDROM, 0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  8. #define CdRomClassGuid GUID_DEVINTERFACE_CDROM
  9.  
  10. //DEFINE_GUID(DiskClassGuid, 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  11. //DEFINE_GUID(CdRomClassGuid, 0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  12. //DEFINE_GUID(PartitionClassGuid, 0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  13. //DEFINE_GUID(TapeClassGuid, 0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  14. //DEFINE_GUID(WriteOnceDiskClassGuid, 0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  15. //DEFINE_GUID(VolumeClassGuid, 0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  16. //DEFINE_GUID(MediumChangerClassGuid, 0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  17. //DEFINE_GUID(FloppyClassGuid, 0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  18. //DEFINE_GUID(CdChangerClassGuid, 0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  19. //DEFINE_GUID(StoragePortClassGuid, 0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
  20.  
  21. #define INTERFACE_DETAIL_SIZE (1024)
  22. #define MAX_DEVICE (16)
  23. int GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath)
  24. {
  25. HDEVINFO hDevInfoSet;
  26. SP_DEVICE_INTERFACE_DATA ifdata;
  27. PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail;
  28. int nCount;
  29. BOOL bResult;
  30.  
  31. // 取得一个该GUID相关的设备信息集句柄
  32. hDevInfoSet = SetupDiGetClassDevs(lpGuid, // class GUID
  33. NULL, // 无关键字
  34. NULL, // 不指定父窗口句柄
  35. DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // 目前存在的设备
  36.  
  37. // 失败...
  38. if(hDevInfoSet == INVALID_HANDLE_VALUE)
  39. {
  40. return ;
  41. }
  42.  
  43. // 申请设备接口数据空间
  44. pDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)GlobalAlloc(LMEM_ZEROINIT, INTERFACE_DETAIL_SIZE);
  45.  
  46. pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
  47.  
  48. nCount = ;
  49. bResult = TRUE;
  50.  
  51. // 设备序号=0,1,2... 逐一测试设备接口,到失败为止
  52. while (bResult)
  53. {
  54. ifdata.cbSize=sizeof(ifdata);
  55.  
  56. // 枚举符合该GUID的设备接口
  57. bResult = SetupDiEnumDeviceInterfaces(
  58. hDevInfoSet, // 设备信息集句柄
  59. NULL, // 不需额外的设备描述
  60. lpGuid, // GUID
  61. (ULONG)nCount, // 设备信息集里的设备序号
  62. &ifdata); // 设备接口信息
  63.  
  64. if(bResult)
  65. {
  66. // 取得该设备接口的细节(设备路径)
  67. bResult = SetupDiGetInterfaceDeviceDetail(
  68. hDevInfoSet, // 设备信息集句柄
  69. &ifdata, // 设备接口信息
  70. pDetail, // 设备接口细节(设备路径)
  71. INTERFACE_DETAIL_SIZE, // 输出缓冲区大小
  72. NULL, // 不需计算输出缓冲区大小(直接用设定值)
  73. NULL); // 不需额外的设备描述
  74.  
  75. if(bResult)
  76. {
  77. // 复制设备路径到输出缓冲区
  78. strcpy(pszDevicePath[nCount], pDetail->DevicePath);
  79. // 调整计数值
  80. nCount++;
  81. }
  82. }
  83. }
  84.  
  85. // 释放设备接口数据空间
  86. GlobalFree(pDetail);
  87.  
  88. // 关闭设备信息集句柄
  89. SetupDiDestroyDeviceInfoList(hDevInfoSet);
  90.  
  91. return nCount;
  92. }
  93.  
  94. int main(int argc, char **argv)
  95. {
  96. char *path[] = {NULL};
  97. int i, count;
  98. GUID cdrom = CdRomClassGuid;
  99.  
  100. for (i=; i<; i++)
  101. {
  102. path[i] = (char*)malloc();
  103. }
  104. count = GetDevicePath(&cdrom, path);
  105. for (i=; i<count; i++)
  106. {
  107. printf("%s/n", path[i]);
  108. }
  109. printf("HDD Count: %d/n", count);
  110. return TRUE;
  111. }

根据GUID获取设备信息的更多相关文章

  1. Android 获取设备信息 异常

    /**获取设备信息 * @param c * @return */ public static void setDeviceInfo(Context c,RequestParams params){ ...

  2. React Native(五)——获取设备信息react-native-device-info

    心酸史: 自从接触rn开始后,越来越多的引入第三方组件而开始的配置文件,让自己一再头疼: 明明是按照官方文档一步一步的配置,为什么别人可以做到的自己却屡屡出错,真是哭笑不得--从微信分享react-n ...

  3. 微信小程序 --- 获取设备信息

    获取设备信息: wx.getSystemInfo model:手机型号 pixelRatio:设备像素比 windowWidth:窗口宽度 windowHeight:窗口高度 language:语言 ...

  4. PhoneGap获取设备信息

    一. 获取设备信息的方法列表(如果没有或者检测不出来就显示undefined) 1.device.name              设备名称(一些国产机检测不出来) 2.device.model   ...

  5. appium自动化测试框架——封装获取设备信息类

    在上一节中,我们已经解决了如何在python中执行cmd,并获取执行结果.下面就小小实战一下,获取设备信息. 一.思路 1.windows上获取设备信息的方法 输入dos命令“adb devices” ...

  6. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载五(使用PhoneGap获取设备信息)

    除了能够将HTML页面打包成可以直接安装运行的APP外,PhoneGap的一个最大优势在于可以通过JavaScript调用设备来访问设备上的硬件信息,从而实现一些原本只有依靠原生SDK才能够达到的目的 ...

  7. 微信小程序把玩(三十八)获取设备信息 API

    原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx. ...

  8. 测试成长记录:python调adb无法获取设备信息bug记录

    背景介绍: 一直在负责公司Android自动化的编写工作,采用的是uiautomator2,需要获取设备id来连接设备,就是 adb devices 问题描述: 之前一直用 subprocess.ch ...

  9. ios获取设备信息总结

    1.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name;       //获取设备所有者的名 ...

随机推荐

  1. 【问题记录】MySQL中时间戳转日期格式和Java中时间戳转日期格式偶尔不一致

    背景: MySQL的某个字段存放着一些时间戳格式的时间. 问题描述: Java程序将MySQL中的时间戳字段取出来,在Java程序中转成yyyy-MM-dd HH:mm:ss格式的时候,偶尔会出现转化 ...

  2. Death to Binary? 分析模拟

    /** 题目:Death to Binary? 链接:https://vjudge.net/contest/154246#problem/T 题意:略. 思路: 注意事项: 给的字符串存在前导0: 存 ...

  3. 【Python + ATX基于uiautomator2】之编写unittest自动化测试脚本

    不说废话上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/08/31 09:43 # @Author : zc # @ ...

  4. Eureka 2.0 闭源--选择Consul???

    在上个月我们知道 Eureka 2.0 闭源了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面 Spring Cloud 支持很多服务发现的软件,Eureka ...

  5. sha1加密算法

    public static void main(String[] args) throws UnsupportedEncodingException { /* * 获取jsapi_ticket * * ...

  6. AndroidManifest.xml详细分析

    原文地址: http://my.eoe.cn/1087692/archive/5927.html 一.关于AndroidManifest.xmlAndroidManifest.xml 是每个andro ...

  7. MathType公式行距设置的方法

    在使用普通的文档编辑器编辑数学公式的时候,大家会发现一些数学上特殊的符号.公式很难给编辑出来,有时候就算编辑出来了也不符号一些学术的规范.这个时候就可以使用MathType这款公式编辑器来编辑.但是在 ...

  8. std::condition_variable(复习)

    #include <iostream> // std::cout #include <thread> // std::thread #include <mutex> ...

  9. 关于vue,angularjs1,react之间的对比

    1.时间投入的问题:相对于react和angularjs,学习vue的时间成本低,而且容易上手. 2.JSX的可读性比较一般.代码的可读性不如vue,当然,vue也支持jsx,但是vue更提倡temp ...

  10. echarts+thinkphp 学习写的第一个程序

    一.前台 建个名为map.html,代码如下. <!doctype html><html lang="en"><head> <meta c ...