您好,欢迎访问三七文档
C文件#includeUefi.h#includeLibrary/UefiLib.h#includeLibrary/DebugLib.h#includeLibrary/ShellCEntryLib.h#includeLibrary/ShellLib.h#includeLibrary/UefiBootServicesTableLib.h#includeLibrary/BaseLib.h#includeLibrary/BaseMemoryLib.hexternEFI_BOOT_SERVICES*gBS;INTNEFIAPIShellAppMain(INUINTNArgc,INCHAR16**Argv){EFI_STATUSStatus=0;UINT8*SMBiosBaseAddr=NULL;UINT32ReadData;BOOLEANFoundFlg=FALSE;UINT8*Table0Addr=NULL;UINT8Table0Size;UINT8*Table1Addr=NULL;UINT8Table1Size;UINTNOutPutIndex;UINT8*SearchIndex=NULL;UINT16TableEnd=0x0000;UINT8*ManuStr;UINT8*ProductStr;UINT8*VersionStr;UINT8*SerialStr;//find_SM_(0x5F4D535F)inmemory0xF0000to0xFFFFFfor(SMBiosBaseAddr=(UINT8*)(UINTN)0xF0000;SMBiosBaseAddr(UINT8*)(UINTN)0xFFFFF;SMBiosBaseAddr+=4){ReadData=*(UINT32*)SMBiosBaseAddr;if(ReadData==0x5F4D535F){FoundFlg=TRUE;break;}}if(FoundFlg==FALSE){Print(Lnotfound.\n);returnStatus;}//gettype0addressandlengthCopyMem(&Table0Addr,SMBiosBaseAddr+0x18,4);Table0Size=*(Table0Addr+0x1);//findtheendoftype0(startoftype1)for(SearchIndex=Table0Addr+Table0Size;;SearchIndex++){if(*(UINT16*)SearchIndex==TableEnd){Table1Addr=SearchIndex+2;break;}}Table1Size=*(Table1Addr+1);//ManufacturerManuStr=Table1Addr+Table1Size;//searcheachstringend\0//ProductNamefor(SearchIndex=Table1Addr+Table1Size;;SearchIndex++){if(*SearchIndex==0x00){ProductStr=SearchIndex+1;SearchIndex++;break;}}//Versionfor(;;SearchIndex++){if(*SearchIndex==0x00){VersionStr=SearchIndex+1;SearchIndex++;break;}}//Serialnnumberfor(;;SearchIndex++){if(*SearchIndex==0x00){SerialStr=SearchIndex+1;SearchIndex++;break;}}//findendoftype1with0x0000for(;;SearchIndex++){if(*(UINT16*)SearchIndex==TableEnd){SearchIndex+=2;break;}}Print(L\nType1Address:%x,Table1Addr);//dumptype1Print(L\n000102030405060708090A0B0C0D0E0F);for(OutPutIndex=0;OutPutIndex(UINTN)SearchIndex-(UINTN)Table1Addr;OutPutIndex++){if((OutPutIndex%0x10)==0){Print(L\n%02x,OutPutIndex&0xF0);}Print(L%02x,*(Table1Addr+OutPutIndex));}Print(L\n\n);Print(LManufacturer:%a\n,ManuStr);Print(LProductName:%a\n,ProductStr);Print(LVersion:%a\n,VersionStr);Print(LSerialNumber:%a\n,SerialStr);returnStatus;}Inf文件[Defines]INF_VERSION=0x00010005BASE_NAME=SMBIOSFILE_GUID=D9DF65D7-BAD2-45B3-8882-D1F003740B0CMODULE_TYPE=UEFI_APPLICATIONVERSION_STRING=0.9ENTRY_POINT=ShellCEntryLib[Sources]SMBIOS.c[Packages]MdePkg/MdePkg.decShellPkg/ShellPkg.decMdeModulePkg/MdeModulePkg.dec[LibraryClasses]ShellCEntryLibUefiLibBaseLibBaseMemoryLib[Protocols][Guids]gEfiVirtualDiskGuidgEfiVirtualCdGuidgEfiVirtualCdGuidgEfiPersistentVirtualDiskGuidgEfiPersistentVirtualDiskGuidgEfiPersistentVirtualCdGuid
本文标题:SMBIOS
链接地址:https://www.777doc.com/doc-6242696 .html