如何得到设备的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("%s",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);

你可能感兴趣的:(如何得到设备的GUID值)