如何得到设备的GUID值?
如果是系统的标准设备,可以在devguid.h文件中找到所对应的guid值,但如果是其它安装的驱动则可以查看其classguid值(系统设备也可以),如:
USB的guid值可以在注册表路径:
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("
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);