# File lib/windows/sys/cpu.rb, line 199
    def self.processors(host = Socket.gethostname) # :yields: CPUStruct
      begin
        wmi = WIN32OLE.connect(BASE_CS + "//#{host}/root/cimv2")
      rescue WIN32OLERuntimeError => e
        raise Error, e
      else
        wmi.InstancesOf("Win32_Processor").each{ |cpu|
          yield CPUStruct.new(
            cpu.AddressWidth,
            self.get_cpu_arch(cpu.Architecture),
            self.get_availability(cpu.Availability),
            cpu.Caption,
            self.get_cmec(cpu.ConfigManagerErrorCode),
            cpu.ConfigManagerUserConfig,
            get_status(cpu.CpuStatus),
            cpu.CreationClassName,
            cpu.CurrentClockSpeed,
            cpu.CurrentVoltage,
            cpu.DataWidth,
            cpu.Description,
            cpu.DeviceId,
            cpu.ErrorCleared,
            cpu.ErrorDescription,
            cpu.ExtClock,
            self.get_family(cpu.Family),
            cpu.InstallDate,
            cpu.L2CacheSize,
            cpu.L2CacheSpeed,
            cpu.LastErrorCode,
            cpu.Level,
            cpu.LoadPercentage,
            cpu.Manufacturer,
            cpu.MaxClockSpeed,
            cpu.Name,
            cpu.OtherFamilyDescription,
            cpu.PNPDeviceID,
            cpu.PowerManagementSupported,
            cpu.PowerManagementCapabilities,
            cpu.ProcessorId,
            self.get_processor_type(cpu.ProcessorType),
            cpu.Revision,
            cpu.Role,
            cpu.SocketDesignation,
            cpu.Status,
            cpu.StatusInfo,
            cpu.Stepping,
            cpu.SystemCreationClassName,
            cpu.SystemName,
            cpu.UniqueId,
            self.get_upgrade_method(cpu.UpgradeMethod),
            cpu.Version,
            self.get_voltage_caps(cpu.VoltageCaps)
          )
        }
      end
    end