枚举系统设备

来源:岁月联盟 编辑:zhu 时间:2008-09-08
#include <windows.h>
#include <stdio.h>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
#include <shlwapi.h>
#pragma comment(lib,"setupapi.lib")
<!--[if !supportEmptyParas]--><!--[endif]-->
#define BUFSIZE1024
#define SM_SERVERR289
void main()
{
  HDEVINFO hDevInfo;
  SP_DEVINFO_DATA DeviceInfoData;
  DWORD i;
  hDevInfo = SetupDiGetClassDevs((LPGUID) &GUID_DEVCLASS_CDROM, 0, 0,DIGCF_PRESENT);
  /*
  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_MODEMMODEM
  GUID_DEVCLASS_MOUSE鼠标和其他指针设备
  GUID_DEVCLASS_NET网络设备器
  GUID_DEVCLASS_USB通用串行总线控制器
  GUID_DEVCLASS_FLOPPYDISK软盘驱动器
  GUID_DEVCLASS_UNKNOWN未知设备
  GUID_DEVCLASS_SCSIADAPTERSCSI 和 RAID 控制器
  GUID_DEVCLASS_HDCIDE ATA/ATAPI 控制器
  GUID_DEVCLASS_PORTS端口(COM 和 LPT)
  GUID_DEVCLASS_MONITOR监视器
  */
  if (hDevInfo == INVALID_HANDLE_VALUE)
  {
    // Insert error handling here.
    return 1;
  }
  // Enumerate through all devices in Set.
  DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
  for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
  &DeviceInfoData);i++)
  {
    DWORD DataT;
    //LPTSTR buffer = NULL;
    char buffer[2048];
    DWORD buffersize =sizeof(buffer);
    while (!SetupDiGetDeviceRegistryProperty(
     hDevInfo,
     &DeviceInfoData,
     SPDRP_FRIENDLYNAME,
     &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);
<!--[if !supportEmptyParas]--><!--[endif]-->
        }
        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 1;
    }
<!--[if !supportEmptyParas]--><!--[endif]-->
  // Cleanup
  SetupDiDestroyDeviceInfoList(hDevInfo);
}