📄 smstdstr.h
字号:
// Description: A sample to show how to get SMBios information
// Author : Hercules Zeng
// Emailto : HexTech@hotmail.com
// Note : I'm very happy if you like it and modify it.
#pragma once
#include <list>
using namespace std;
#ifndef _SM_STD_DEF_
#define _SM_STD_DEF_
//SMBios Structure Table Entry Point's Anchor String
extern char SM_ANCHOR_STRING[5];
//SMBios Structure Table Entry Point
typedef struct
{
BYTE bAnchorStr[4];
BYTE bEntryChksum;
BYTE bEntryLen;
BYTE bSMMajorVer;
BYTE bSMMinVer;
WORD wMaxStructSize;
BYTE bEntryRev;
BYTE bFormattedArea[5];
BYTE bIntermediateAnchorStr[5];
BYTE bIntermediateChksum;
WORD wStructTableLen;
DWORD dStructTableAddress;
WORD wNumOfSMStruct;
BYTE bSMBCDRev;
} SM_STRUCT_TABLE_ENTRY;
// type struct defintions
typedef struct dmiType0
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bVendor;
BYTE bVersion;
WORD wStartAddr;
BYTE bDate;
BYTE bRomsize;
DWORD dChars1;
DWORD dChars2;
BYTE bCharExt1;
BYTE bCharExt2;
} dmiType0 ;
typedef struct dmiType1
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bManu ;
BYTE bProduct ;
BYTE bVersion ;
BYTE bSerialNum;
BYTE bUUID0;
BYTE bUUID1;
BYTE bUUID2;
BYTE bUUID3;
BYTE bUUID4;
BYTE bUUID5;
BYTE bUUID6;
BYTE bUUID7;
BYTE bUUID8;
BYTE bUUID9;
BYTE bUUIDA;
BYTE bUUIDB;
BYTE bUUIDC;
BYTE bUUIDD;
BYTE bUUIDE;
BYTE bUUIDF;
BYTE bWakeUp;
} dmiType1 ;
typedef struct dmiType2
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bManu ;
BYTE bProduct ;
BYTE bVersion ;
BYTE bSerialNum;
} dmiType2 ;
typedef struct dmiType3
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bManu ;
BYTE bManuType ;
BYTE bVersion ;
BYTE bSerialNum;
BYTE bAssetTag ;
BYTE bBootup;
BYTE bPower;
BYTE bThermal;
BYTE bSecurity;
DWORD dOEMdefined;
} dmiType3 ;
typedef struct dmiType4
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bSocketDes ;
BYTE bProcType ;
BYTE bFamily ;
BYTE bManu ;
DWORD dID1 ;
DWORD dID2 ;
BYTE bVersion ;
BYTE bVoltage ;
WORD wExtClock;
WORD wMaxSpeed;
WORD wSpeed ;
BYTE bStatus ;
BYTE bUpgrade ;
WORD wLevel1;
WORD wLevel2;
WORD wLevel3;
BYTE bSerialNum; // new 2.3.1
BYTE bAssetTag ; // new 2.3.1
BYTE bPartNum; // new 2.3.1
} dmiType4 ;
typedef struct dmiType5
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bErrorDM;
BYTE bErrorCC;
BYTE bSuppInter;
BYTE bCurrInter;
BYTE bMaxSize;
WORD wSpeeds;
WORD wTypes;
BYTE bVoltage;
BYTE bSlots;
} dmiType5 ;
typedef struct dmiType6
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bSocketDes ;
BYTE bBankConn ;
BYTE bSpeed ;
WORD wType ;
BYTE bInSize ;
BYTE bEnSize ;
BYTE bError ;
} dmiType6 ;
typedef struct dmiType7
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bSocketDes ;
WORD wCacheConfig ;
WORD wMaxSize ;
WORD wInSize ;
WORD wSuppType ;
WORD wCurrType ;
BYTE bCacheSpeed;
BYTE bECT;
BYTE bCacheType;
BYTE bAssoc;
} dmiType7 ;
typedef struct dmiType8
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bIReference ;
BYTE bIConn ;
BYTE bEReference ;
BYTE bEConn ;
BYTE bConnType ;
} dmiType8 ;
typedef struct dmiType9
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bSlotDes ;
BYTE bSlotType ;
BYTE bWidth ;
BYTE bUsage ;
BYTE bSlotLength ;
WORD wSlotID ;
BYTE bSlotChars ;
BYTE bSlotChars2;
} dmiType9 ;
typedef struct dmiType10
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bDeviceType ;
BYTE bDeviceDes ;
} dmiType10 ;
typedef struct dmiType11
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bCount;
} dmiType11 ;
typedef struct dmiType12
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bCount;
} dmiType12 ;
typedef struct dmiType13
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bInLang ;
DWORD dwReserved1;
DWORD dwReserved2;
DWORD dwReserved3;
DWORD dwReserved4;
BYTE bCurrLang ;
} dmiType13 ;
typedef struct dmiType14
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bGroupName;
BYTE bItemType;
WORD wItemHandle;
} dmiType14 ;
typedef struct dmiType15
{
BYTE bType;
BYTE bLength;
WORD wHandle;
WORD wLogLength;
WORD wHeaderOffset;
WORD wDataOffset;
BYTE bAccessMethod;
BYTE bLogStatus;
DWORD dwLogToken;
DWORD dwAccessMethodAddress;
BYTE bLogFormat;
BYTE bNumDesc;
BYTE bDescLen;
} dmiType15 ;
typedef struct dmiType16
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bLocation;
BYTE bUse;
BYTE bCorrection;
DWORD dwCapacity;
WORD wErrorHandle;
WORD wNumDevs;
} dmiType16 ;
typedef struct dmiType17
{
BYTE bType;
BYTE bLength;
WORD wHandle;
WORD wArrayHandle;
WORD wErrorHandle;
WORD wTotalWidth;
WORD wDataWidth;
WORD wSize;
BYTE bFormFactor;
BYTE bDeviceSet;
BYTE bDeviceLocator;
BYTE bBankLocator;
BYTE bMemoryType;
WORD wTypeDetail;
WORD wSpeed ; // new 2.3
BYTE bManufacturer; // new 2.3.1
BYTE bSerialNum; // new 2.3.1
BYTE bAssetTag ; // new 2.3.1
BYTE bPartNum; // new 2.3.1
} dmiType17 ;
typedef struct dmiType18
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bErrorType;
BYTE bErrorGranularity;
BYTE bErrorOperation;
DWORD dwVendorSyndrome;
DWORD dwArrayAddress;
DWORD dwDeviceAddress;
DWORD dwErrorResolution;
} dmiType18 ;
typedef struct dmiType19
{
BYTE bType;
BYTE bLength;
WORD wHandle;
DWORD dwStartingAddress;
DWORD dwEndingAddress;
WORD wArrayHandle;
BYTE bPartitionWidth;
} dmiType19;
typedef struct dmiType20
{
BYTE bType;
BYTE bLength;
WORD wHandle;
DWORD dwStartingAddress;
DWORD dwEndingAddress;
WORD wDeviceHandle;
WORD wArrayAddressHandle;
BYTE bPartitionPosition;
BYTE bInterleavePosition;
BYTE bInterleaveDepth;
} dmiType20;
typedef struct dmiType21
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bPointingType;
BYTE bInterface;
BYTE bNumButtons;
} dmiType21;
typedef struct dmiType22
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bLocation;
BYTE bManufacturer;
BYTE bManuDate;
BYTE bSerialNumber;
BYTE bDeviceName;
BYTE bDeviceChemistry;
WORD wDesignCapacity;
WORD wDesignVoltage;
BYTE bSBDSVersion;
BYTE bMaxError;
WORD wSBDSSerialNumber;
WORD wSBDSManuDate;
BYTE bSBDSDeviceChemistry;
BYTE bDesignCapacityMuxer;
DWORD dOEMSpecific;
} dmiType22;
typedef struct dmiType23
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bCapabilities;
WORD wResetCount;
WORD wResetLimit;
WORD wTimerInterval;
WORD wTimeOut;
} dmiType23 ;
typedef struct dmiType24
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bSecuritySettings;
} dmiType24 ;
typedef struct dmiType25
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bMonth;
BYTE bDay;
BYTE bHour;
BYTE bMinute;
BYTE bSecond;
} dmiType25 ;
typedef struct dmiType26
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bDescription;
BYTE bLocAndStatus;
WORD wMaxValue;
WORD wMinValue;
WORD wResolution;
WORD wTolerance;
WORD wAccuracy;
DWORD dOEMDefined;
} dmiType26 ;
typedef struct dmiType27
{
BYTE bType;
BYTE bLength;
WORD wHandle;
WORD wTempProbeHandle;
BYTE bDevTypeAndStatus;
BYTE bCoolingUnitGrp;
DWORD dOEMDefined;
} dmiType27 ;
typedef struct dmiType28
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bDescription;
BYTE bLocAndStatus;
WORD wMaxValue;
WORD wMinValue;
WORD wResolution;
WORD wTolerance;
WORD wAccuracy;
DWORD dOEMDefined;
} dmiType28 ;
typedef struct dmiType29
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bDescription;
BYTE bLocAndStatus;
WORD wMaxValue;
WORD wMinValue;
WORD wResolution;
WORD wTolerance;
WORD wAccuracy;
DWORD dOEMDefined;
} dmiType29 ;
typedef struct dmiType30
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bManufName;
BYTE bConnections;
} dmiType30 ;
typedef struct dmiType31
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bChecksum;
BYTE bReserved;
WORD wReserved;
DWORD dBISEntry16;
DWORD dBISEntry32;
long qReserved;
DWORD dReserved;
} dmiType31 ;
typedef struct dmiType32
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bReserved[6];
BYTE bBootStatus[10];
} dmiType32 ;
typedef struct dmiType33
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bErrorType;
BYTE bErrorGranularity;
BYTE bErrorOperation;
DWORD dwVendorSyndrome;
double dArrayAddress;
double dDeviceAddress;
DWORD dwErrorResolution;
} dmiType33 ;
typedef struct dmiType34
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bDescription;
BYTE bDeviceType;
DWORD dwAddress;
BYTE bAddressType;
} dmiType34 ;
typedef struct dmiType35
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bDescription;
WORD wMgmtDeviceHandle;
WORD wComponentHandle;
WORD wThresholdHandle;
} dmiType35 ;
typedef struct dmiType36
{
BYTE bType;
BYTE bLength;
WORD wHandle;
WORD wLowerThresholdNonCritical;
WORD wUpperThresholdNonCritical;
WORD wLowerThresholdCritical;
WORD wUpperThresholdCritical;
WORD wLowerThresholdNonRecoverable;
WORD wUpperThresholdNonRecoverable;
} dmiType36 ;
typedef struct dmiType37
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bChannelType;
BYTE bMaxChannelLoad;
BYTE bMemDevCount;
// BYTE bMemDevLoad;
// WORD wMemDevHandle;
} dmiType37 ;
typedef struct dmiType38
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bInterfaceType;
BYTE bIPMISpecRev;
BYTE bI2CSlaveAddr;
BYTE bNVDevAddr;
DWORD dBaseAddr1;
DWORD dBaseAddr2;
} dmiType38 ;
typedef struct dmiType39
{
BYTE bType;
BYTE bLength;
WORD wHandle;
BYTE bUnitGroup;
BYTE bLocation;
BYTE bDevName;
BYTE bManu;
BYTE bSerialNum;
BYTE bAssetTag;
BYTE bModelPartNum;
BYTE bRevisionLevel;
WORD wMaxCapacity;
WORD wChars;
WORD wVoltageProbeHandle;
WORD wCoolDevHandle;
WORD wCurrentProbeHandle;
} dmiType39 ;
//----------------------------------------------------------------------------
// GetSMTableEntryPoint
int GetSMTableEntryPoint(SM_STRUCT_TABLE_ENTRY* pEntry, DWORD& dwPhyAddress);
int GetSMTableEntryPointDescription(SM_STRUCT_TABLE_ENTRY* pEntry, char* pBuffer);
//----------------------------------------------------------------------------
// GetType5
int GetType5(DWORD dwStartAddress, dmiType5* pType5, DWORD& dwPhyAddress);
//----------------------------------------------------------------------------
int GetAllType(DWORD dwStartAddress);
//----------------------------------------------------------------------------
extern SM_STRUCT_TABLE_ENTRY g_TableEntry;
extern list<dmiType0> g_type0;
extern BYTE g_type0Remains[64];
extern DWORD g_type0RemainsLen;
extern DWORD g_type0PhyAddress;
extern list<dmiType1> g_type1;
extern BYTE g_type1Remains[64];
extern DWORD g_type1RemainsLen;
extern DWORD g_type1PhyAddress;
extern list<dmiType2> g_type2;
extern BYTE g_type2Remains[64];
extern DWORD g_type2RemainsLen;
extern DWORD g_type2PhyAddress;
extern list<dmiType3> g_type3;
extern BYTE g_type3Remains[64];
extern DWORD g_type3RemainsLen;
extern DWORD g_type3PhyAddress;
extern list<dmiType4> g_type4;
extern BYTE g_type4Remains[64];
extern DWORD g_type4RemainsLen;
extern DWORD g_type4PhyAddress;
extern list<dmiType5> g_type5;
extern BYTE g_type5Remains[64];
extern DWORD g_type5RemainsLen;
extern DWORD g_type5PhyAddress;
extern list<dmiType6> g_type6;
extern BYTE g_type6Remains[64];
extern DWORD g_type6RemainsLen;
extern DWORD g_type6PhyAddress;
extern DWORD g_dwPhyAddress[60];
extern DWORD g_dwEntryPhyAddress;
#endif _SM_STD_DEF_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -