⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smstdstr.h

📁 Windows下Hardware直接读写
💻 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 + -