home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 February / Chip_2004-02_cd1.bin / zkuste / konfig / download / msic / Help / Int / MSI_SMBIOS.int < prev    next >
Text File  |  2003-10-10  |  25KB  |  545 lines

  1. {*******************************************************}
  2. {                                                       }
  3. {       MiTeC System Information Component              }
  4. {             SMBIOS Detection Part                     }
  5. {           version 8.4 for Delphi 5,6,7               }
  6. {                                                       }
  7. {       Copyright ⌐ 1997,2003 Michal Mutl               }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. {$INCLUDE MITEC_DEF.INC}
  12.  
  13. unit MSI_SMBIOS;
  14.  
  15. interface
  16.  
  17. uses MSI_Common, Windows, Classes, SysUtils, MSI_DMA;
  18.  
  19. const
  20.   addr_BIOSBegin = $000F0000;
  21.   addr_BIOSEnd = $000FFFFF;
  22.  
  23. const
  24.   SMB_BIOSINFO = 0    ;  // BIOS Information
  25.   SMB_SYSINFO  = 1    ;  // System Information
  26.   SMB_BASEINFO = 2    ;  // Base Board Information
  27.   SMB_SYSENC   = 3    ;  // System Enclosure or Chassis
  28.   SMB_CPU      = 4    ;  // Processor Information
  29.   SMB_MEMCTRL  = 5    ;  // Memory Controller Information
  30.   SMB_MEMMOD   = 6    ;  // Memory Module Information
  31.   SMB_CACHE    = 7    ;  // Cache Information
  32.   SMB_PORTCON  = 8    ;  // Port Connector Information
  33.   SMB_SLOTS    = 9    ;  // System Slots
  34.   SMB_ONBOARD  = 10    ;  // On Board Devices Information
  35.   SMB_OEMSTR   = 11    ;  // OEM Strings
  36.   SMB_SYSCFG   = 12    ;  // System Configuration Options
  37.   SMB_LANG     = 13    ;  // BIOS Language Information
  38.   SMB_GRP      = 14    ;  // Group Associations
  39.   SMB_EVENT    = 15    ;  // System Event Log
  40.   SMB_PHYSMEM  = 16    ;  // Physical Memory Array
  41.   SMB_MEMDEV   = 17    ;  // Memory Device
  42.   SMB_MEMERR32 = 18    ;  // 32-bit Memory Error Information
  43.   SMB_MEMMAP   = 19    ;  // Memory Array Mapped Address
  44.   SMB_MEMDEVMAP= 20    ;  // Memory Device Mapped Address
  45.   SMB_POINTER  = 21    ;  // Built-in Pointing Device
  46.   SMB_BATTERY  = 22    ;  // Portable Battery
  47.   SMB_RESET    = 23    ;  // System Reset
  48.   SMB_SECURITY = 24    ;  // Hardware Security
  49.   SMB_POWER    = 25    ;  // System Power Controls
  50.   SMB_VOLTAGE  = 26    ;  // Voltage Probe
  51.   SMB_COOL     = 27    ;  // Cooling Device
  52.   SMB_TEMP     = 28    ;  // Tempature Probe
  53.   SMB_CURRENT  = 29    ;  // Electrical Current Probe
  54.   SMB_OOBREM   = 30    ;  // Out-of-Band Remote Access
  55.   SMB_BIS      = 31    ;  // Boot Integrity Services (BIS) Entry Point
  56.   SMB_SYSBOOT  = 32    ;  // System Boot Information
  57.   SMB_MEMERR64 = 33    ;  // 64-bit Memory Error Information
  58.   SMB_MGT      = 34    ;  // Management Device
  59.   SMB_MGTCMP   = 35    ;  // Management Device Component
  60.   SMB_MGTTHR   = 36    ;  // Management Device Threshold Data
  61.   SMB_MEMCHAN  = 37    ;  // Memory Channel
  62.   SMB_IPMI     = 38    ;  // IPMI Device Information
  63.   SMB_SPS      = 39    ;  // System Power Supply
  64.   SMB_INACTIVE = 126    ;  // Inactive
  65.   SMB_EOT      = 127    ;  // End-of-Table
  66.  
  67.   SMB_TableTypes: array[0..41] of record Typ: Byte; Name: string end = (
  68.     (Typ: SMB_BIOSINFO; Name: 'BIOS Information'),
  69.     (Typ: SMB_SYSINFO; Name: 'System Information'),
  70.     (Typ: SMB_BASEINFO; Name: 'Base Board Information'),
  71.     (Typ: SMB_SYSENC; Name: 'System Enclosure or Chassis'),
  72.     (Typ: SMB_CPU; Name: 'Processor Information'),
  73.     (Typ: SMB_MEMCTRL; Name: 'Memory Controller Information'),
  74.     (Typ: SMB_MEMMOD; Name: 'Memory Module Information'),
  75.     (Typ: SMB_CACHE; Name: 'Cache Information'),
  76.     (Typ: SMB_PORTCON; Name: 'Port Connector Information'),
  77.     (Typ: SMB_SLOTS; Name: 'System Slots'),
  78.     (Typ: SMB_ONBOARD; Name: 'On Board Devices Information'),
  79.     (Typ: SMB_OEMSTR; Name: 'OEM Strings'),
  80.     (Typ: SMB_SYSCFG; Name: 'System Configuration Options'),
  81.     (Typ: SMB_LANG; Name: 'BIOS Language Information'),
  82.     (Typ: SMB_GRP; Name: 'Group Associations'),
  83.     (Typ: SMB_EVENT; Name: 'System Event Log'),
  84.     (Typ: SMB_PHYSMEM; Name: 'Physical Memory Array'),
  85.     (Typ: SMB_MEMDEV; Name: 'Memory Device'),
  86.     (Typ: SMB_MEMERR32; Name: '32-bit Memory Error Information'),
  87.     (Typ: SMB_MEMMAP; Name: 'Memory Array Mapped Address'),
  88.     (Typ: SMB_MEMDEVMAP; Name: 'Memory Device Mapped Address'),
  89.     (Typ: SMB_POINTER; Name: 'Built-in Pointing Device'),
  90.     (Typ: SMB_BATTERY; Name: 'Portable Battery'),
  91.     (Typ: SMB_RESET; Name: 'System Reset'),
  92.     (Typ: SMB_SECURITY; Name: ' Hardware Security'),
  93.     (Typ: SMB_POWER; Name: 'System Power Controls'),
  94.     (Typ: SMB_VOLTAGE; Name: 'Voltage Probe'),
  95.     (Typ: SMB_COOL; Name: ' Cooling Device'),
  96.     (Typ: SMB_TEMP; Name: 'Temperature Probe'),
  97.     (Typ: SMB_CURRENT; Name: 'Electrical Current Probe'),
  98.     (Typ: SMB_OOBREM; Name: 'Out-of-Band Remote Access'),
  99.     (Typ: SMB_BIS; Name: 'Boot Integrity Services (BIS) Entry Point'),
  100.     (Typ: SMB_SYSBOOT; Name: 'System Boot Information'),
  101.     (Typ: SMB_MEMERR64; Name: '64-bit Memory Error Information'),
  102.     (Typ: SMB_MGT; Name: 'Management Device'),
  103.     (Typ: SMB_MGTCMP; Name: 'Management Device Component'),
  104.     (Typ: SMB_MGTTHR; Name: 'Management Device Threshold Data'),
  105.     (Typ: SMB_MEMCHAN; Name: 'Memory Channel'),
  106.     (Typ: SMB_IPMI; Name: 'IPMI Device Information'),
  107.     (Typ: SMB_SPS; Name: 'System Power Supply'),
  108.     (Typ: SMB_INACTIVE; Name: 'Inactive'),
  109.     (Typ: SMB_EOT; Name: 'End-of-Table'));
  110.  
  111. type
  112.   TStructTable = record
  113.     Address: DWORD;
  114.     Indicator: Byte;
  115.     Length: Byte;
  116.     Handle: Word;
  117.     Name: shortstring;
  118.   end;
  119.  
  120.   TStructTables = array of TStructTable;
  121.  
  122.   TChassis = (smchOther, smchUnknown, smchDesktop, smchLowProfileDesktop, smchPizzaBox,
  123.               smchMiniTower, smchTower, smchPortable, smchLapTop, smchNotebook, smchHandHeld,
  124.               smchDockingStation, smchAllInOne, smchSubNotebook, smchSpaceSaving, smchLunchBox,
  125.               smchMainServer, smchExpansion, smchSubChassis, smchBusExpansion, smchPeripheral,
  126.               smchRAID, smchRackMount, smchSealedCasePC, smchMultiSystem);
  127.  
  128.   TInterleaveSupport = (smisOther, smisUnknown, smisOnewWay, smisTwoWay, smisFourWay, smisEightWay, smisSixteenWay);
  129.  
  130.   TVoltage = (smv5V, smv33V, smv29V);
  131.  
  132.   TVoltages = set of TVoltage;
  133.  
  134.   TMemorySpeed = (smmsOther, smmsUnknown, smms70ns, smms60ns, smms50ns);
  135.  
  136.   TMemorySpeeds = set of TMemorySpeed;
  137.  
  138.   TMemoryType = (smmtOther, smmtUnknown, smmtStandard, smmtFastPageMode, smmtEDO,
  139.                  smmtParity, smmtECC, smmtSIMM, smmtDIMM, smmtBurstEDO, smmtSDRAM);
  140.  
  141.   TMemoryTypes = set of TMemoryType;
  142.  
  143.   TMemoryFormFactor = (smffOther, smffUnknown, smffSIMM, smffSIP,
  144.                        smffChip, smffDIP, smffZIP, smffPropCard, smffDIMM, smffTSOP,
  145.                        smffRowChip, smffRIMM, smffSODIMM, smffSRIMM);
  146.  
  147.   TMemoryDeviceType = (smmdOther, smmdUnknown, smmdDRAM, smmdEDRAM, smmdVRAM, smmdSRAM,
  148.                    smmdRAM,smmdROM, smmdFLASH, smmdEEPROM, smmdFEPROM, smmdEPROM,
  149.                    smmdCDRAM, smmd3DRAM, smmdSDRAM, smmdSGRAM, smmdRDRAM, smmdDDR);
  150.  
  151.   TMemoryTypeDetail = (mtdReserved, mtdOther, mtdUnknown, mtdFastPaged, mtdStaticColumn,
  152.                        mtdPseudoStatic, mtdRAMBUS, mtdSynchronous, mtdCMOS, mtdEDO,
  153.                        mtdWindowDRAM, mtdCacheDRAM, mtdNonVolatile);
  154.  
  155.   TMemoryTypeDetails = set of TMemoryTypeDetail;
  156.  
  157.   TUpgrade = (smuOther, smuUnknown, smuDaughterBoard, smuZIFSocket, smuReplaceablePiggyBack,
  158.               smuNone, smuLIFSocket, smuSlot1, smuSlot2, smu370pinSocket, smuSlotA,
  159.               smuSlotM, smuSocket423, smuSocketA, smuSocket478, smuSocket754, smuSocket940);
  160.  
  161.   TProcessor = record
  162.     Socket,
  163.     Manufacturer,
  164.     Version: shortstring;
  165.     Upgrade: TUpgrade;
  166.     Voltage: double;
  167.     Frequency,
  168.     ExternalClock: WORD;
  169.     SerialNumber,
  170.     AssetTag,
  171.     PartNumber: shortstring;
  172.   end;
  173.  
  174.   TMemoryModule = record
  175.     Socket: shortstring;
  176.     Speed: Word;
  177.     Size: DWORD;
  178.     Types: TMemoryTypes;
  179.   end;
  180.  
  181.   TMemoryDevice = record
  182.     TotalWidth,
  183.     DataWidth,
  184.     Size: Word;
  185.     FormFactor: TMemoryFormFactor;
  186.     DeviceLocator,
  187.     BankLocator: ShortString;
  188.     Device: TMemoryDeviceType;
  189.     TypeDetails: TMemoryTypeDetails;
  190.     Speed: Word;
  191.     Manufacturer,
  192.     SerialNumber,
  193.     AssetTag,
  194.     PartNumber: ShortString;
  195.   end;
  196.  
  197.   TConnectorType = (smctNone, smctCentronics, smctMiniCentronics, smctProprietary,
  198.                     smctDB25PinMale, smctDB25PinFemale, smctDB15PinMale, smctDB15PinFemale,
  199.                     smctDB9PinMale, smctDB9PinFemale, smctRJ11, smctRJ45, smct50PinMiniSCSI,
  200.                     smctMiniDIN, smctMicroDIN, smctPS2, smctInfrared, smctHPHIL,
  201.                     smctAccessBus, smctSSASCSI, smctCircularDIN8Male, smctCircularDIN8Female,
  202.                     smctOnBoardIDE, smctOnBoardFloppy, smct9PinDualInline, smct25PinDualInline,
  203.                     smct50PinDualInline, smct68PinDualInline, smctOnBoardSoundInputFromCDROM,
  204.                     smctMiniCentronicsType14, smctMiniCentronicsType26, smctMiniJack,
  205.                     smctBNC, smct1394, smctPC98, smctPC98Hireso, smctPCH98, smctPC98Note,
  206.                     smctPC98Full, smctOther);
  207.  
  208.   TPortType = (smptNone, smptParallelXTAT, smptParallelPS2, smptParallelECP,
  209.                smptParallelEPP, smptParallelECPEPP, smptSerialXTAT,
  210.                smptSerial16450, smptSerial16550, smptSerial16550A,
  211.                smptSCSI, smptMIDI, smptJoyStick, smptKeyboard, smptMouse, smptSSASCSI,
  212.                smptUSB, smptFireWire, smptPCMCIA2, smptPCMCIA2A, smptPCMCIA3, smptCardbus,
  213.                smptAccessBus, smptSCSI2, smptSCSIWide, smptPC98, smptPC98Hireso, smptPCH98,
  214.                smptVideo, smptAudio, smptModem, smptNetwork, smpt8251, smpt8251FIFO, smptOther);
  215.  
  216.   TPort = record
  217.     InternalDesignator,
  218.     ExternalDesignator: shortstring;
  219.     InternalConnector,
  220.     ExternalConnector: TConnectorType;
  221.     Typ: TPortType;
  222.   end;
  223.  
  224.   TSlotType = (smstOther, smstUnknown, smstISA, smstMCA, smstEISA, smstPCI, smstPCMCIA,
  225.                smstVLVESA, smstProprietary, smstProcessorCard, smstProprietaryMemoryCard,
  226.                smstIORiserCard, smstNuBus, smstPCI66MHz, smstAGP, smstAGP2X, smstAGP4X,
  227.                smstPCIX, smstAGP8X,
  228.                smstPC98C20, smstPC98C24, smstPC98E, smstPC98LocalBus, smstPC98Card);
  229.  
  230.   TDataBusType = (smdbOther, smdbUnknown, smdb8bit, smdb16bit, smdb32bit, smdb64bit, smdb128bit);
  231.  
  232.   TSlotUsage = (smsuOther, smsuUnknown, smsuAvailable, smsuInUse);
  233.  
  234.   TSlotLength = (smslOther, smslUnknown, smslShort, smslLong);
  235.  
  236.   TSlot = record
  237.     Designation: shortstring;
  238.     Typ: TSlotType;
  239.     DataBus: TDataBusType;
  240.     ID: WORD;
  241.     Usage: TSlotUsage;
  242.     Length: TSlotLength;
  243.   end;
  244.  
  245.   TSRAMType = (sramOther, sramUnknown, sramNonBurst, sramBurst,
  246.                sramPipelineBurst, sramSync, sramAsync);
  247.  
  248.   TCacheType = (ctOther, ctUnknown, ctInstruction, ctData, ctUnified);
  249.  
  250.   TCacheAssociativity = (caOther, caUnknown, caDirectMapped, ca2way, ca4way, caFull, ca8way, ca16way);
  251.  
  252.   TCache = record
  253.     Designation: shortstring;
  254.     MaxSize, InstalledSize: Word;
  255.     SRAMType: TSRAMType;
  256.     Typ: TCacheType;
  257.     Associativity: TCacheAssociativity;
  258.     Speed: Word;
  259.   end;
  260.  
  261.   TOnBoardDeviceType = (obdOther, obdUnknown, obdAudio, obdSCSICrl, obdEthernet, obdTokenRing, obdSound);
  262.  
  263.   TOnBoardDevice = record
  264.     DeviceName: string;
  265.     Typ: TOnBoardDeviceType;
  266.     Status: boolean;
  267.   end;
  268.  
  269.   TLocationType = (ltOther, ltUnknown, ltProcessor, ltDisk, ltPeripheralBay, ltSMM, ltMB,
  270.                    ltProcessorModule, ltPowerUnit, ltAddInCard, ltFrontPanelBoard, ltBackPanelBoard,
  271.                    ltPowerSystemBoard, ltDriveBackPlane);
  272.  
  273.   TStatusType = (stOther, stUnknown, stOK, stNonCritical, stCritical, stNonRecoverable);
  274.  
  275.   TTemperatureProbe = record
  276.     Description: shortstring;
  277.     Location: TLocationType;
  278.     Status: TStatusType;
  279.     Min,Max: Word;
  280.     Resolution,
  281.     Tolerance,
  282.     Accuracy: Word;
  283.     Value: Word;
  284.   end;
  285.  
  286. const
  287.   ChassisTypes: array[TChassis] of string = ('Other','Unknown','Desktop','Low Profile Desktop','Pizza Box',
  288.               'Mini Tower','Tower','Portable','LapTop','Notebook','Hand Held',
  289.               'Docking Station','All in One','SubNotebook','Space-Saving','Lunch Box',
  290.               'Main Server Chassis','Expansion Chassis','SubChassis','Bus Expansion Chassis','Peripheral Chassis',
  291.               'RAID Chassis','Rack-Mount Chassis','Sealed-case PC','Multi-system Chassis');
  292.  
  293.   InterleaveSupports: array[TInterleaveSupport] of string = ('Other','Unknown','1-Way','2-Way','4-Way','8-Way','16-Way');
  294.  
  295.   Voltages: array[TVoltage] of string = ('5V','3.3V','2.9V');
  296.  
  297.   MemorySpeeds: array[TMemorySpeed] of string = ('Other','Unknown','70ns','60ns','50ns');
  298.  
  299.   Upgrades: array[TUpgrade] of string = ('Other','Unknown','Daughter Board','ZIF Socket','Replaceable Piggy Back',
  300.               'None','LIF Socket','Slot 1','Slot 2','370-pin Socket','Slot A',
  301.               'Slot M','Socket 423', 'Socket A (Socket 462)','Socket 478','Socket 754','Socket 940');
  302.  
  303.   MemoryFormFactors: array[TMemoryFormFactor] of string = ('Other','Unknown','SIMM','SIP',
  304.     'Chip','DIP','ZIP','PropCard','DIMM','TSOP','RowChip','RIMM','SODIMM','SRIMM');
  305.  
  306.   MemoryDeviceTypes: array[TMemoryDeviceType] of string = ('Other','Unknown','DRAM','EDRAM',
  307.     'VRAM','SRAM','RAM','ROM','FLASH','EEPROM','FEPROM','EPROM','CDRAM','3DRAM','SDRAM',
  308.     'SGRAM','RDRAM','DDR');
  309.  
  310.   MemoryTypes: array[TMemoryType] of string = ('Other','Unknown','Standard','Fast Page Mode','EDO',
  311.                  'Parity','ECC','SIMM','DIMM','Burst EDO','SDRAM');
  312.  
  313.   MemoryTypeDetails: array[TMemoryTypeDetail] of string = ('Reserved', 'Other', 'Unknown', 'FastPaged',
  314.                                'StaticColumn', 'PseudoStatic', 'RAMBUS', 'Synchronous', 'CMOS', 'EDO',
  315.                                'WindowDRAM', 'CacheDRAM', 'NonVolatile');
  316.  
  317.   ConnectorTypes: array[TConnectorType] of string = (
  318.     'None','Centronics','Mini Centronics','Proprietary','DB-25 pin male','DB-25 pin female',
  319.     'DB-15 pin male','DB-15 pin female','DB-9 pin male','DB-9 pin female','RJ-11','RJ-45',
  320.     '50 Pin MiniSCSI','Mini-DIN','Micro-DIN','PS/2','Infrared','HP-HIL','Access Bus (USB)',
  321.     'SSA SCSI','Circular DIN-8 male','Circular DIN-8 female','On Board IDE','On Board Floppy',
  322.     '9 Pin Dual Inline (pin 10 cut)','25 Pin Dual Inline (pin 26 cut)','50 Pin Dual Inline',
  323.     '68 Pin Dual Inline','On Board Sound Input from CD-ROM','Mini-Centronics Type-14',
  324.     'Mini-Centronics Type-26','Mini-jack (headphones)','BNC','1394','PC-98','PC-98Hireso',
  325.     'PC-H98','PC-98Note','PC-98Full','Other'
  326.   );
  327.  
  328.   PortTypes: array[TPortType] of string = (
  329.     'None','Parallel Port XT/AT Compatible','Parallel Port PS/2','Parallel Port ECP',
  330.     'Parallel Port EPP','Parallel Port ECP/EPP','Serial Port XT/AT Compatible',
  331.     'Serial Port 16450 Compatible','Serial Port 16550 Compatible','Serial Port 16550A Compatible',
  332.     'SCSI Port','MIDI Port','Joy Stick Port','Keyboard Port','Mouse Port','SSA SCSI',
  333.     'USB','FireWire (IEEE P1394)','PCMCIA Type II','PCMCIA Type II','PCMCIA Type III',
  334.     'Cardbus','Access Bus Port','SCSI II','SCSI Wide','PC-98','PC-98-Hireso','PC-H98',
  335.     'Video Port','Audio Port','Modem Port','Network Port','8251 Compatible',
  336.     '8251 FIFO Compatible','Other'
  337.   );
  338.  
  339.   SlotTypes: array[TSlotType] of string = (
  340.     'Other','Unknown','ISA','MCA','EISA','PCI','PC Card (PCMCIA)','VL-VESA','Proprietary',
  341.     'Processor Card Slot','Proprietary Memory Card','I/O Riser Card Slot','NuBus',
  342.     'PCI - 66MHz Capable','AGP','AGP 2X','AGP 4X','PCI-X','AGP 8X', 'PC-98/C20','PC-98/C24','PC-98/E',
  343.     'PC-98/Local Bus','PC-98/Card'
  344.   );
  345.  
  346.   DataBusTypes: array[TDataBusType] of string = (
  347.     'Other','Unknown','8 bit','16 bit','32 bit','64 bit','128 bit'
  348.   );
  349.  
  350.   SlotUsages: array[TSlotUsage] of string = ('Other','Unknown','Available','InUse');
  351.  
  352.   SlotLengths: array[TSlotLength] of string = ('Other','Unknown','Short','Long');
  353.  
  354.   SRAMTypes: array[TSRAMType] of string = (
  355.     'Other', 'Unknown','Non-Burst','Burst','Pipeline Burst','Synchronous','Asynchronous'
  356.   );
  357.  
  358.   CacheTypes: array[TCacheType] of string = (
  359.     'Other','Unknown','Instruction','Data','Unified'
  360.   );
  361.  
  362.   CacheAssociativities: array[TCacheAssociativity] of string = (
  363.     'Other','Unknown','Direct Mapped','2-way Set-Associative','4-way Set-Associative','Fully Associative',
  364.     '8-way Set-Associative','16-way Set-Associative'
  365.   );
  366.  
  367.   OnBoardDeviceTypes: array[TOnBoardDeviceType] of string = (
  368.     'Other', 'Unknown', 'Audio', 'SCSICrl', 'Ethernet', 'TokenRing', 'Sound');
  369.  
  370.   LocationTypes: array[TLocationType] of string = ('Other', 'Unknown', 'Processor', 'Disk', 'Peripheral Bay',
  371.     'System Managemeht Module', 'Motherboard', 'Processor Module', 'Power Unit', 'Add-In Card', 'Front Panel Board',
  372.     'Back Panel Board', 'Power System Board', 'Drive Back Plane');
  373.  
  374.   StatusTypes: array[TStatusType] of string = ('Other', 'Unknown', 'OK', 'Non-Critical', 'Critical', 'Non-Recoverable');
  375.  
  376. type
  377.   TSMBIOS = class(TPersistent)
  378.   private
  379.     FSMBIOS, FStructure: TDMA;
  380.     FStart,
  381.     FStructStart: DWORD;
  382.     FMBMod: string;
  383.     FSysMan: string;
  384.     FSysMod: string;
  385.     FBIOSdate: string;
  386.     FVersion: string;
  387.     FBIOSVendor: string;
  388.     FBIOSVersion: string;
  389.     FBIOSSize: DWORD;
  390.     FSysVer: string;
  391.     FSysSN: string;
  392.     FMBSN: string;
  393.     FMBMan: string;
  394.     FMBVer: string;
  395.     FCHSN: string;
  396.     FCHVer: string;
  397.     FCHMan: string;
  398.     FCHMod: TChassis;
  399.     FSysUUID: string;
  400.     FProc: array of TProcessor;
  401.     FMemMod: array of TMemoryModule;
  402.     FMemDev: array of TMemoryDevice;
  403.     FPort: array of TPort;
  404.     FSlot: array of TSlot;
  405.     FCache: array of TCache;
  406.     FOBD: array of TOnBoardDevice;
  407.     FTP: array of TTemperatureProbe;
  408.     FTableCount: WORD;
  409.     FLen: WORD;
  410.     FRevision: string;
  411.     {$IFNDEF D6PLUS}
  412.     FDummy: Byte;
  413.     {$ENDIF}
  414.     FMCSC: Byte;
  415.     FMCCI: TInterleaveSupport;
  416.     FMCSI: TInterleaveSupport;
  417.     FMCSS: TMemorySpeeds;
  418.     FMCST: TMemoryTypes;
  419.     FMCSV: TVoltages;
  420.     FMCMS: WORD;
  421.     FCHAT: string;
  422.     FMajorVersion: Byte;
  423.     FMinorVersion: Byte;
  424.     FMBAT: string;
  425.     FMBLIC: string;
  426.     FModes: TExceptionModes;
  427.     procedure ScanTables;
  428.     procedure AddTable(Addr: DWORD; Ind,Len: Byte; Hndl: Word; var ST: TStructTables);
  429.     function GetMemoryModule(Index: Byte): TMemoryModule;
  430.     function GetMemModCount: Byte;
  431.     function GetPort(Index: Byte): TPort;
  432.     function GetPortCount: Byte;
  433.     function GetSlot(Index: Byte): TSlot;
  434.     function GetSlotCount: Byte;
  435.     function GetCache(Index: Byte): TCache;
  436.     function GetCacheCount: Byte;
  437.     function GetProc(Index: Byte): TProcessor;
  438.     function GetProcCount: Byte;
  439.     function GetOBDCount: Byte;
  440.     function GetOBD(Index: Byte): TOnBoardDevice;
  441.     function GetTempProbe(Index: Byte): TTemperatureProbe;
  442.     function GetTempProbeCount: Byte;
  443.     procedure SetMode(const Value: TExceptionModes);
  444.     function GetMemoryDevice(Index: Byte): TMemoryDevice;
  445.     function GetMemDevCount: Byte;
  446.   public
  447.     StructTables: TStructTables;
  448.  
  449.     constructor Create;
  450.     destructor Destroy; override;
  451.  
  452.     procedure GetInfo(Local: DWORD = 1);
  453.     procedure Report(var sl: TStringList; Standalone: Boolean = True); virtual;
  454.  
  455.     function GetMemoryTypeStr(Value: TMemoryTypes): string;
  456.     function GetMemorySpeedStr(Value: TMemorySpeeds): string;
  457.     function GetMemoryVoltageStr(Value: TVoltages): string;
  458.     function GetMemoryTypeDetailsStr(Value: TMemoryTypeDetails): string;
  459.  
  460.     function FindTableRecord(AType: Byte; ST: TStructTables; From: DWORD = 0): TStructTable;
  461.     function FindTableIndex(AType: Byte; ST: TStructTables; From: DWORD = 0): Integer;
  462.  
  463.     procedure LoadSMBIOSFromFile(Filename: string);
  464.  
  465.     property BIOS_DMA: TDMA read FSMBIOS;
  466.     property SMBIOS_DMA: TDMA read FStructure;
  467.  
  468.     property MajorVersion :Byte read FMajorVersion;
  469.     property MinorVersion :Byte read FMinorVersion;
  470.     property Version: string read FVersion;
  471.     property Revision: string read FRevision;
  472.     property SMBIOSAddress: DWORD read FStart;
  473.     property StructStart: DWORD read FStructStart;
  474.     property StructLength: WORD read FLen;
  475.     property StructCount: WORD read FTableCount;
  476.  
  477.     property Processor[Index: Byte]: TProcessor read GetProc;
  478.  
  479.     property MemoryModule[Index: Byte]: TMemoryModule read GetMemoryModule;
  480.  
  481.     property MemoryDevice[Index: Byte]: TMemoryDevice read GetMemoryDevice;
  482.  
  483.     property Port[Index: Byte]: TPort read GetPort;
  484.  
  485.     property SystemSlot[Index: Byte]: TSlot read GetSlot;
  486.  
  487.     property Cache[Index: Byte]: TCache read GetCache;
  488.  
  489.     property OnBoardDevice[Index: Byte]: TOnBoardDevice read GetOBD;
  490.  
  491.     property TemperatureProbe[Index: Byte]: TTemperatureProbe read GetTempProbe;
  492.   published
  493.     property ExceptionModes: TExceptionModes read FModes Write SetMode;
  494.     property SystemModel: string read FSysMod {$IFNDEF D6PLUS} write FSysMod {$ENDIF} stored False;
  495.     property SystemManufacturer: string read FSysMan {$IFNDEF D6PLUS} write FSysMan {$ENDIF} stored False;
  496.     property SystemVersion: string read FSysVer {$IFNDEF D6PLUS} write FSysVer {$ENDIF} stored False;
  497.     property SystemSerial: string read FSysSN {$IFNDEF D6PLUS} write FSysSN {$ENDIF} stored False;
  498.     property SystemUUID: string read FSysUUID {$IFNDEF D6PLUS} write FSysUUID {$ENDIF} stored False;
  499.  
  500.     property BIOSVendor: string read FBIOSVendor {$IFNDEF D6PLUS} write FBIOSVendor {$ENDIF} stored False;
  501.     property BIOSVersion: string read FBIOSVersion {$IFNDEF D6PLUS} write FBIOSVersion {$ENDIF} stored False;
  502.     property BIOSDate: string read FBIOSdate {$IFNDEF D6PLUS} write FBIOSDate {$ENDIF} stored False;
  503.     property BIOSSize: DWORD read FBIOSSize {$IFNDEF D6PLUS} write FBIOSSize {$ENDIF} stored False;
  504.  
  505.     property MainBoardModel: string read FMBMod {$IFNDEF D6PLUS} write FMBMod {$ENDIF} stored False;
  506.     property MainBoardManufacturer: string read FMBMan {$IFNDEF D6PLUS} write FMBMan {$ENDIF} stored False;
  507.     property MainBoardVersion: string read FMBVer {$IFNDEF D6PLUS} write FMBVer {$ENDIF} stored False;
  508.     property MainBoardSerial: string read FMBSN {$IFNDEF D6PLUS} write FMBSN {$ENDIF} stored False;
  509.     property MainBoardAssetTag: string read FMBAT {$IFNDEF D6PLUS} write FMBAT {$ENDIF} stored False;
  510.     property MainBoardLocationInChassis: string read FMBLIC {$IFNDEF D6PLUS} write FMBLIC {$ENDIF} stored False;
  511.  
  512.     property ChassisModel: TChassis read FCHMod {$IFNDEF D6PLUS} write FCHMod {$ENDIF} stored False;
  513.     property ChassisManufacturer: string read FCHMan {$IFNDEF D6PLUS} write FCHMan {$ENDIF} stored False;
  514.     property ChassisVersion: string read FCHVer {$IFNDEF D6PLUS} write FCHVer {$ENDIF} stored False;
  515.     property ChassisSerial: string read FCHSN {$IFNDEF D6PLUS} write FCHSN {$ENDIF} stored False;
  516.     property ChassisAssetTag: string read FCHAT {$IFNDEF D6PLUS} write FCHAT {$ENDIF} stored False;
  517.  
  518.     property MemCtrlCurrentInterleave: TInterleaveSupport read FMCCI  {$IFNDEF D6PLUS} write FMCCI {$ENDIF} stored False;
  519.     property MemCtrlSupportedInterleave: TInterleaveSupport read FMCSI  {$IFNDEF D6PLUS} write FMCSI {$ENDIF} stored False;
  520.     property MemCtrlSupportedSpeeds: TMemorySpeeds read FMCSS  {$IFNDEF D6PLUS} write FMCSS {$ENDIF} stored False;
  521.     property MemCtrlSupportedTypes: TMemoryTypes read FMCST  {$IFNDEF D6PLUS} write FMCST {$ENDIF} stored False;
  522.     property MemCtrlSupportedVoltages: TVoltages read FMCSV  {$IFNDEF D6PLUS} write FMCSV {$ENDIF} stored False;
  523.     property MemCtrlMaxSize: WORD read FMCMS  {$IFNDEF D6PLUS} write FMCMS {$ENDIF} stored False;
  524.     property MemCtrlSlotCount: Byte read FMCSC  {$IFNDEF D6PLUS} write FMCSC {$ENDIF} stored False;
  525.  
  526.     property ProcessorCount: Byte read GetProcCount {$IFNDEF D6PLUS} write FDummy {$ENDIF} stored False;
  527.  
  528.     property MemoryModuleCount: Byte read GetMemModCount {$IFNDEF D6PLUS} write FDummy {$ENDIF} stored False;
  529.  
  530.     property MemoryDeviceCount: Byte read GetMemDevCount {$IFNDEF D6PLUS} write FDummy {$ENDIF} stored False;
  531.  
  532.     property PortCount: Byte read GetPortCount {$IFNDEF D6PLUS} write FDummy {$ENDIF} stored False;
  533.  
  534.     property SystemSlotCount: Byte read GetSlotCount {$IFNDEF D6PLUS} write FDummy {$ENDIF} stored False;
  535.  
  536.     property CacheCount: Byte read GetCacheCount {$IFNDEF D6PLUS} write FDummy {$ENDIF} stored False;
  537.  
  538.     property OnBoardDeviceCount: Byte read GetOBDCount {$IFNDEF D6PLUS} write FDummy {$ENDIF} stored False;
  539.  
  540.     property TemperatureProbeCount: Byte read GetTempProbeCount {$IFNDEF D6PLUS} write FDummy {$ENDIF} stored False;
  541.   end;
  542.  
  543. implementation
  544.  
  545.