如何得到设备的GUID值

如何得到设备的GUID值?

如果是系统的标准设备,可以在devguid.h文件中找到所对应的guid值,但如果是其它安装的驱动则可以查看其classguid值(系统设备也可以),如:

USBguid值可以在注册表路径:

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/

里面找到值{36fc9e60-c465-11cf-8056-444553540000

其对应的classguid值为:

0x36fc9e60L, 0xc465, 0x11cf, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00

对比下就可以用这两个字符串相互转换了。

devguid.h中设备类型guid的定义:

      

GUID_DEVCLASS_FDC           软盘控制器 

     GUID_DEVCLASS_DISPLAY       显示卡 

     GUID_DEVCLASS_CDROM         光驱 

     GUID_DEVCLASS_KEYBOARD      键盘 

     GUID_DEVCLASS_COMPUTER      计算机 

     GUID_DEVCLASS_SYSTEM        系统 

     GUID_DEVCLASS_DISKDRIVE     磁盘驱动器 

     GUID_DEVCLASS_MEDIA         声音、视频和游戏控制器 

     GUID_DEVCLASS_MODEM         MODEM  

     GUID_DEVCLASS_MOUSE         鼠标和其他指针设备 

     GUID_DEVCLASS_NET           网络设备器 

     GUID_DEVCLASS_USB           通用串行总线控制器 

     GUID_DEVCLASS_FLOPPYDISK    软盘驱动器 

     GUID_DEVCLASS_UNKNOWN       未知设备 

     GUID_DEVCLASS_SCSIADAPTER   SCSI     RAID   控制器 

     GUID_DEVCLASS_HDC IDE       ATA/ATAPI   控制器 

     GUID_DEVCLASS_PORTS         端口(COM     LPT 

     GUID_DEVCLASS_MONITOR       监视器 

 

对设备管理器的查询

GUID   ClassGuid   =   {0x96e73b6eL, 0x7a5a, 0x11d4, 0x9f, 0x24, 0x00, 0x80, 0xc8, 0x27, 0x27, 0xf4};

HDEVINFO   hDevInfo;  

     SP_DEVINFO_DATA   DeviceInfoData;  

     DWORD   i;  

     CString temp;

     CString str;

     hDevInfo   =   SetupDiGetClassDevs((LPGUID)   &ClassGuid,   0,   0,DIGCF_PRESENT);  

     if   (hDevInfo   ==   INVALID_HANDLE_VALUE)  

     {  

         //   Insert   error   handling   here.

         return   ;  

     }  

 

     //   Enumerate   through   all   devices   in   Set.  

 

     DeviceInfoData.cbSize   =   sizeof(SP_DEVINFO_DATA);  

     for   (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData);i++)  

     {  

         DWORD   DataT;  

         char   buffer[2048];  

         DWORD   buffersize   =sizeof(buffer);  

         while   (!SetupDiGetDeviceRegistryProperty(  

              hDevInfo,  

              &DeviceInfoData,  

              SPDRP_DEVICEDESC, 

              &DataT,  

              (PBYTE)buffer,  

              buffersize,  

              &buffersize))  

         {  

              if   (GetLastError()   ==   ERROR_INSUFFICIENT_BUFFER)  

              {  

                   //   Change   the   buffer   size.  

                   //if   (buffer)   LocalFree(buffer);  

                   //buffer   =   (PSP_INF_INFORMATION)LocalAlloc(LPTR,buffersize);  

              }  

              else  

              {  

                   //   Insert   error   handling   here.  

                   break;  

              }  

         }  

         if   (buffer   !=   NULL   &&   i   ==   0)  

         {  

              temp.Format("<光盘驱动器>");  

              str   +=   temp;  

         }  

         temp.Format("<VALUE>%s</VALUE>",buffer);  

         str   +=   temp;  

         if   (buffer)   LocalFree(buffer);  

     }  

     if   (i   !=   0)  

     {  

         temp.Format("</光盘驱动器>");  

         str   +=   temp;  

     }  

     if   (   GetLastError()!=NO_ERROR   &&  

         GetLastError()!=ERROR_NO_MORE_ITEMS   )  

     {  

         return   ;  

     }  

     //     Cleanup  

     SetupDiDestroyDeviceInfoList(hDevInfo);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值