The SMBIOS expose the info about the installed processors in the table type 4. Check the next snippet that shows how obtain such data using the TSMBIOS (remember, if you are using FPC, you can use this library in Windows and Linux).
{$IFDEF FPC}{$mode objfpc}{$H+} {$ELSE} {$APPTYPE CONSOLE} {$ENDIF} uses Classes, TypInfo, SysUtils, uSMBIOS; function SetToString(Info: PTypeInfo; const Value): String; var LTypeInfo : PTypeInfo; LIntegerSet: TIntegerSet; I: Integer; begin Result := ''; Integer(LIntegerSet) := 0; case GetTypeData(Info)^.OrdType of otSByte, otUByte: Integer(LIntegerSet) := Byte(Value); otSWord, otUWord: Integer(LIntegerSet) := Word(Value); otSLong, otULong: Integer(LIntegerSet) := Integer(Value); end; LTypeInfo := GetTypeData(Info)^.CompType{$IFNDEF FPC}^{$ENDIF}; for I := 0 to SizeOf(Integer) * 8 - 1 do if I in LIntegerSet then begin if Result <> '' then Result := Result + ','; Result := Result + GetEnumName(LTypeInfo, I); end; end; procedure GetProcessorInfo; Var SMBios : TSMBios; LProcessorInfo : TProcessorInformation; LSRAMTypes : TCacheSRAMTypes; begin SMBios:=TSMBios.Create; try WriteLn('Processor Information'); if SMBios.HasProcessorInfo then for LProcessorInfo in SMBios.ProcessorInfo do begin WriteLn('Manufacturer '+LProcessorInfo.ProcessorManufacturerStr); WriteLn('Socket Designation '+LProcessorInfo.SocketDesignationStr); WriteLn('Type '+LProcessorInfo.ProcessorTypeStr); WriteLn('Familiy '+LProcessorInfo.ProcessorFamilyStr); WriteLn('Version '+LProcessorInfo.ProcessorVersionStr); WriteLn(Format('Processor ID %x',[LProcessorInfo.RAWProcessorInformation^.ProcessorID])); WriteLn(Format('Voltaje %n',[LProcessorInfo.GetProcessorVoltaje])); WriteLn(Format('External Clock %d Mhz',[LProcessorInfo.RAWProcessorInformation^.ExternalClock])); WriteLn(Format('Maximum processor speed %d Mhz',[LProcessorInfo.RAWProcessorInformation^.MaxSpeed])); WriteLn(Format('Current processor speed %d Mhz',[LProcessorInfo.RAWProcessorInformation^.CurrentSpeed])); WriteLn('Processor Upgrade '+LProcessorInfo.ProcessorUpgradeStr); WriteLn(Format('External Clock %d Mhz',[LProcessorInfo.RAWProcessorInformation^.ExternalClock])); if SMBios.SmbiosVersion>='2.3' then begin WriteLn('Serial Number '+LProcessorInfo.SerialNumberStr); WriteLn('Asset Tag '+LProcessorInfo.AssetTagStr); WriteLn('Part Number '+LProcessorInfo.PartNumberStr); if SMBios.SmbiosVersion>='2.5' then begin WriteLn(Format('Core Count %d',[LProcessorInfo.RAWProcessorInformation^.CoreCount])); WriteLn(Format('Cores Enabled %d',[LProcessorInfo.RAWProcessorInformation^.CoreEnabled])); WriteLn(Format('Threads Count %d',[LProcessorInfo.RAWProcessorInformation^.ThreadCount])); WriteLn(Format('Processor Characteristics %.4x',[LProcessorInfo.RAWProcessorInformation^.ProcessorCharacteristics])); end; end; Writeln; if (LProcessorInfo.RAWProcessorInformation^.L1CacheHandle>0) and (LProcessorInfo.L2Chache<>nil) then begin WriteLn('L1 Cache Handle Info'); WriteLn('--------------------'); WriteLn(' Socket Designation '+LProcessorInfo.L1Chache.SocketDesignationStr); WriteLn(Format(' Cache Configuration %.4x',[LProcessorInfo.L1Chache.RAWCacheInformation^.CacheConfiguration])); WriteLn(Format(' Maximum Cache Size %d Kb',[LProcessorInfo.L1Chache.GetMaximumCacheSize])); WriteLn(Format(' Installed Cache Size %d Kb',[LProcessorInfo.L1Chache.GetInstalledCacheSize])); LSRAMTypes:=LProcessorInfo.L1Chache.GetSupportedSRAMType; WriteLn(Format(' Supported SRAM Type [%s]',[SetToString(TypeInfo(TCacheSRAMTypes), LSRAMTypes)])); LSRAMTypes:=LProcessorInfo.L1Chache.GetCurrentSRAMType; WriteLn(Format(' Current SRAM Type [%s]',[SetToString(TypeInfo(TCacheSRAMTypes), LSRAMTypes)])); WriteLn(Format(' Error Correction Type %s',[ErrorCorrectionTypeStr[LProcessorInfo.L1Chache.GetErrorCorrectionType]])); WriteLn(Format(' System Cache Type %s',[SystemCacheTypeStr[LProcessorInfo.L1Chache.GetSystemCacheType]])); WriteLn(Format(' Associativity %s',[LProcessorInfo.L1Chache.AssociativityStr])); end; if (LProcessorInfo.RAWProcessorInformation^.L2CacheHandle>0) and (LProcessorInfo.L2Chache<>nil) then begin WriteLn('L2 Cache Handle Info'); WriteLn('--------------------'); WriteLn(' Socket Designation '+LProcessorInfo.L2Chache.SocketDesignationStr); WriteLn(Format(' Cache Configuration %.4x',[LProcessorInfo.L2Chache.RAWCacheInformation^.CacheConfiguration])); WriteLn(Format(' Maximum Cache Size %d Kb',[LProcessorInfo.L2Chache.GetMaximumCacheSize])); WriteLn(Format(' Installed Cache Size %d Kb',[LProcessorInfo.L2Chache.GetInstalledCacheSize])); LSRAMTypes:=LProcessorInfo.L2Chache.GetSupportedSRAMType; WriteLn(Format(' Supported SRAM Type [%s]',[SetToString(TypeInfo(TCacheSRAMTypes), LSRAMTypes)])); LSRAMTypes:=LProcessorInfo.L2Chache.GetCurrentSRAMType; WriteLn(Format(' Current SRAM Type [%s]',[SetToString(TypeInfo(TCacheSRAMTypes), LSRAMTypes)])); WriteLn(Format(' Error Correction Type %s',[ErrorCorrectionTypeStr[LProcessorInfo.L2Chache.GetErrorCorrectionType]])); WriteLn(Format(' System Cache Type %s',[SystemCacheTypeStr[LProcessorInfo.L2Chache.GetSystemCacheType]])); WriteLn(Format(' Associativity %s',[LProcessorInfo.L2Chache.AssociativityStr])); end; if (LProcessorInfo.RAWProcessorInformation^.L3CacheHandle>0) and (LProcessorInfo.L3Chache<>nil) then begin WriteLn('L3 Cache Handle Info'); WriteLn('--------------------'); WriteLn(' Socket Designation '+LProcessorInfo.L3Chache.SocketDesignationStr); WriteLn(Format(' Cache Configuration %.4x',[LProcessorInfo.L3Chache.RAWCacheInformation^.CacheConfiguration])); WriteLn(Format(' Maximum Cache Size %d Kb',[LProcessorInfo.L3Chache.GetMaximumCacheSize])); WriteLn(Format(' Installed Cache Size %d Kb',[LProcessorInfo.L3Chache.GetInstalledCacheSize])); LSRAMTypes:=LProcessorInfo.L3Chache.GetSupportedSRAMType; WriteLn(Format(' Supported SRAM Type [%s]',[SetToString(TypeInfo(TCacheSRAMTypes), LSRAMTypes)])); LSRAMTypes:=LProcessorInfo.L3Chache.GetCurrentSRAMType; WriteLn(Format(' Current SRAM Type [%s]',[SetToString(TypeInfo(TCacheSRAMTypes), LSRAMTypes)])); WriteLn(Format(' Error Correction Type %s',[ErrorCorrectionTypeStr[LProcessorInfo.L3Chache.GetErrorCorrectionType]])); WriteLn(Format(' System Cache Type %s',[SystemCacheTypeStr[LProcessorInfo.L3Chache.GetSystemCacheType]])); WriteLn(Format(' Associativity %s',[LProcessorInfo.L3Chache.AssociativityStr])); end; Readln; end else Writeln('No Processor Info was found'); finally SMBios.Free; end; end;
May 16, 2013 at 9:55 pm
Why “Processor ID ” is always the same on my two computer?
May 17, 2013 at 1:31 am
This is perfect fine, the ProcessorID is not a unique number check the description of this property
For a unique number try the SerialNumberStr function.
July 4, 2013 at 11:07 am
Hey! I have Intel Core i3 processor but LProcessorInfo.ProcessorFamilyStr says “Intel Core i7”
July 8, 2013 at 12:27 pm
Try dumping your SMBIOS data using the TSMBios.SaveToFile method and send me the file to check the content.
February 22, 2015 at 6:12 am
thanks alot for share…
June 11, 2015 at 6:53 am
I’m getting error as “cannot open file “/private/var/vm/sleepimage”. permission denied.” on the line while creating the object of TSMBios, like SMBios:=TSMBios.Create;
June 11, 2015 at 10:22 am
Hi, the TSMBIOS read the SMBIOS info using the /dev/mem device file which provides access to system physical memory, so the code must be executed using a user with the proper permissions like the root user. Also you can use the page of the project to report any issues.
June 12, 2015 at 7:15 am
Hi, Rodrigo
I tried to enable the root user on my Mac machine. But still the bug is getting popup as “cannot open file “/private/var/vm/sleepimage”. permission denied.” . Please let me know if I’m missing anything.
June 12, 2015 at 8:05 am
Ok, I was thinking which you are using FPC with Linux. Unfortunately OSX is not supported for the library.
January 5, 2016 at 4:16 am
Hi Rodrigo, I want to know if the TSMBIOS works in ARM Processors, with WINCE, THX
January 18, 2016 at 11:24 am
Sorry but is not available in WinCE, because the library uses the GetSystemFirmwareTable method and the WMI to get the SMBIOS info and those are not present in WinCE.
May 2, 2018 at 12:39 am
Hi bro …
thanks for the library