这是一段USB设备挂起的代码,请哪位高手帮我解读一下, 
有很多API我不懂, 麻烦给我加上注释,非常感谢!bool SWSuspendByDevID(int DevID, bool Disable)
{
  BHDEV Dev;
  if (DevID == ROOT_ID)
    return false;  if (!DeviceIoControl(BH_Handle, IOCTL_BUSHOUND_GET_DEVICE, &DevID, sizeof(DevID),
                &Dev, sizeof(Dev),&BH_Ret,0))
    return false;
  //---------------example code from Paul
  //Dev.ObjectName
  char PdoName[1024];
  strcpy(PdoName,Dev.ObjectName);
  HDEVINFO        DevSet;                    // device traversal handle
  SP_DEVINFO_DATA DevData;                   // device basic data
  TCHAR           RegData[256];              // pdo name
  DWORD           RegDataType;               // data type of reg data returned
  DWORD           StartDev      = 0;              // index of device being processed
  bool            Complete = false;          // success status
  
  // Get a handle for traversing every present device  DevSet = SetupDiGetClassDevs(NULL, NULL, 0, DIGCF_ALLCLASSES | DIGCF_PRESENT);  if (DevSet != INVALID_HANDLE_VALUE)
  {
    DevData.cbSize = sizeof(SP_DEVINFO_DATA);    // check the pdo name of the next device    while (SetupDiEnumDeviceInfo(DevSet, StartDev++, &DevData))
      if (SetupDiGetDeviceRegistryProperty(DevSet, &DevData,
                                           SPDRP_PHYSICAL_DEVICE_OBJECT_NAME,
                                           &RegDataType, (PBYTE)RegData,
                                           sizeof(RegData), NULL))
        if (!lstrcmp(PdoName, RegData))
        {
          SP_PROPCHANGE_PARAMS Prop;          Prop.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
          Prop.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
          Prop.StateChange               = (Disable) ? DICS_DISABLE : DICS_ENABLE;
          Prop.Scope                     = DICS_FLAG_CONFIGSPECIFIC;
          Prop.HwProfile                 = 0;          if (SetupDiSetClassInstallParams(DevSet, &DevData, &Prop.ClassInstallHeader,sizeof(Prop)) &&
              SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, DevSet, &DevData))
          {
            SP_DEVINSTALL_PARAMS Parms;            Parms.cbSize = sizeof(Parms);            if (SetupDiGetDeviceInstallParams(DevSet, &DevData, &Parms))
              if (Parms.Flags & (DI_NEEDRESTART | DI_NEEDREBOOT))
                puts("system restart needed");            Complete = true;
          }
        }    SetupDiDestroyDeviceInfoList(DevSet);
  }  return Complete;
}