UEFI应用与编程--Dump ALC662 Verb Table
生活随笔
收集整理的這篇文章主要介紹了
UEFI应用与编程--Dump ALC662 Verb Table
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ShowVerbTb.c
/** ShowVerbTb.c** Created on: 2017年10月27日* Author: */#include <Uefi.h> #include <Library/UefiBootServicesTableLib.h> #include <Protocol/SimpleFileSystem.h> #include <Library/BaseLib.h> #include <Library/UefiLib.h> #include <Guid/FileInfo.h> #include "UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.h"#define MY_DEBUG_ON 1#define MY_DEBUG if(EFI_ERROR(Status) && MY_DEBUG_ON)\{\Print(L"%d_%r\r\n",__LINE__,Status);\return Status;\}INTN EFIAPI ShellAppMain (IN UINTN Argc,IN CHAR16 **Argv) {EFI_STATUS Status;EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *pFileSystemProtocol;EFI_FILE_PROTOCOL *pRoot;UINTN BufSize;EFI_FILE_PROTOCOL *FileHandle = NULL;CHAR16 ReadBuf[257];UINTN ReadBufSize = 256;UINT32 SearchBuf;UINTN SearchBufSize = 4;UINT64 Flag = 0x10EC0662;CHAR16 FileName[16] = L"bios.bin";EFI_GUID FileInfoGuid = gEfiFileInfoGuid;EFI_FILE_INFO *FileInfo = NULL;UINTN Index = 0;if(Argc == 3) {StrCpy(FileName, Argv[1]);if (EFI_ERROR (ShellConvertStringToUint64 (Argv[2], &Flag, TRUE, TRUE))) {Print(L"input vid or did error.\r\n");return EFI_SUCCESS;}}Status = gBS->LocateProtocol(&gEfiSimpleFileSystemProtocolGuid,NULL,(VOID**)&pFileSystemProtocol);if(EFI_ERROR(Status)) {Print(L"locate protocol: fail\r\n");return Status;}Status = pFileSystemProtocol->OpenVolume(pFileSystemProtocol,&pRoot);if(EFI_ERROR(Status)) {Print(L"open volume: fail\r\n");return Status;}Status = pRoot->Open(pRoot,&FileHandle,FileName,EFI_FILE_MODE_READ,0);if(EFI_ERROR(Status)) {Print(L"open: file fail_%r\r\n",Status);return Status;}if(FileHandle && !EFI_ERROR(Status)){/get infoStatus = FileHandle->GetInfo(FileHandle,&FileInfoGuid,&BufSize,FileInfo);if(Status == EFI_BUFFER_TOO_SMALL) {Status = gBS->AllocatePool(EfiBootServicesData, BufSize, &FileInfo);MY_DEBUGStatus = FileHandle->GetInfo(FileHandle,&FileInfoGuid,&BufSize,FileInfo);MY_DEBUG}Print(L"FileSize:%d\r\n",FileInfo->FileSize);/searchfor (Index = 0; Index < FileInfo->FileSize; Index++) {Status = FileHandle->SetPosition(FileHandle, Index);Status = FileHandle->Read(FileHandle, &SearchBufSize, &SearchBuf);if(!(Flag^SearchBuf)) {break;}}readStatus = FileHandle->SetPosition(FileHandle, Index);Status = FileHandle->Read(FileHandle, &ReadBufSize, ReadBuf);Print(L"read status:%r\r\n",Status);if(EFI_ERROR(Status)) {Print(L"read ReadBuf fail\r\n");return Status;}DumpHex(2, Index, ReadBufSize, ReadBuf);Print(L"read buf size: %x\r\n",ReadBufSize);Status = FileHandle->Close(FileHandle);if(EFI_ERROR(Status)) {Print(L"close: fail\r\n");return Status;}}return EFI_SUCCESS;}ShowVerbTb.inf
[Defines] INF_VERSION = 0x00010005 BASE_NAME = ShowVerbTb FILE_GUID = dc72d2c7-a48a-42fd-80b6-9d229d9943c8 MODULE_TYPE = UEFI_APPLICATION VERSION_STRING = 1.0 ENTRY_POINT = ShellCEntryLib [Sources] ShowVerbTb.c [Packages] MdePkg/MdePkg.dec ShellPkg/ShellPkg.decMdeModulePkg/MdeModulePkg.dec[LibraryClasses] UefiLibShellCEntryLibUefiShellDebug1CommandsLib [Protocols]gEfiSimpleFileSystemProtocolGuid [Ppis] [Guids] gEfiFileInfoGuid [BuildOptions] [Pcd] [PcdEx] [FixedPcd] [FeaturePcd] [PatchPcd]?
總結(jié)
以上是生活随笔為你收集整理的UEFI应用与编程--Dump ALC662 Verb Table的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: canvas-缤纷小球
- 下一篇: 巧用 Dummy 解决断网情况下的网络访