├── AnalyzeHardDiskDevPath.c ├── AnalyzeHardDiskDevPath.inf ├── EnumSystemVariable.c ├── EnumSystemVariable.inf ├── LookExitBootServices.c ├── LookExitBootServices.inf ├── Memory.c ├── Memory.inf ├── Other.c ├── ReadDiskGPT.c ├── ShellAppMain.c ├── ShellAppMain.inf ├── UefiMain.c ├── UefiMain.inf ├── UseSystemTable.c ├── UseSystemTable.inf ├── UserSpaceUseGlobalSystemTable.c ├── UserSpaceUseGlobalSystemTable.inf ├── main.c └── main.inf /AnalyzeHardDiskDevPath.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | EFI_STATUS PrintNode(EFI_DEVICE_PATH_PROTOCOL * Node) 16 | { 17 | Print(L"(%d %d)/", Node->Type, Node->SubType); 18 | return 0; 19 | } 20 | EFI_DEVICE_PATH_PROTOCOL* WalkthroughDevicePath(EFI_DEVICE_PATH_PROTOCOL* DevPath,EFI_STATUS (*Callbk)(EFI_DEVICE_PATH_PROTOCOL*)) 21 | { 22 | EFI_DEVICE_PATH_PROTOCOL* pDevPath = DevPath; 23 | while(!IsDevicePathEnd(pDevPath)) 24 | { 25 | if(Callbk) 26 | { 27 | EFI_STATUS Status = Callbk(pDevPath); 28 | if(Status != 0) 29 | { 30 | if(Status < 0) 31 | pDevPath = NULL; 32 | break; 33 | } 34 | } 35 | pDevPath = NextDevicePathNode(pDevPath); 36 | } 37 | return pDevPath; 38 | } 39 | EFI_STATUS UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable) 40 | { 41 | EFI_STATUS Status; 42 | UINTN HandleIndex,NumHandle; 43 | EFI_HANDLE *ControllerHandle; 44 | EFI_DEVICE_PATH_TO_TEXT_PROTOCOL* Device2TextProtocol; 45 | 46 | ControllerHandle = 0; 47 | Device2TextProtocol = 0; 48 | 49 | //find DevicePathToTextProtocol 50 | Status = gBS->LocateProtocol(&gEfiDevicePathToTextProtocolGuid, \ 51 | NULL, \ 52 | &Device2TextProtocol); 53 | // find all diskio's device 54 | Status = gBS->LocateHandleBuffer(ByProtocol, \ 55 | &gEfiDiskIoProtocolGuid, \ 56 | NULL, \ 57 | &NumHandle, \ 58 | &ControllerHandle); 59 | if (EFI_ERROR(Status)) 60 | { 61 | return Status; 62 | } 63 | //for everyone diskio device,open the device's DevicePathProtocol 64 | for (HandleIndex = 0;HandleIndex < NumHandle;HandleIndex++) 65 | { 66 | EFI_DEVICE_PATH_PROTOCOL *DiskDevicePath; 67 | Status = gBS->OpenProtocol(ControllerHandle[HandleIndex], \ 68 | &gEfiDevicePathProtocolGuid, \ 69 | &DiskDevicePath, \ 70 | gImageHandle, \ 71 | NULL, \ 72 | EFI_OPEN_PROTOCOL_GET_PROTOCOL); 73 | if (EFI_ERROR(Status)) 74 | { 75 | continue; 76 | } 77 | //device path to string 78 | { 79 | CHAR16* TextDevicePath = 0; 80 | TextDevicePath = Device2TextProtocol->ConvertDevicePathToText(DiskDevicePath, \ 81 | TRUE, \ 82 | TRUE); 83 | Print(L"%s\n",TextDevicePath); 84 | if (TextDevicePath) 85 | { 86 | gBS->FreePool(TextDevicePath); 87 | } 88 | } 89 | WalkthroughDevicePath(DiskDevicePath,PrintNode); 90 | //enum device path in DiskDevicePath everyone device node 91 | Print(L"\n\n"); 92 | } 93 | return 0; 94 | } -------------------------------------------------------------------------------- /AnalyzeHardDiskDevPath.inf: -------------------------------------------------------------------------------- 1 | [Defines] 2 | INF_VERSION = 0x00010006 3 | BASE_NAME = AnalyzeHardDiskDevPath 4 | FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f 5 | MODULE_TYPE = UEFI_APPLICATION 6 | VERSION_STRING = 0.1 7 | ENTRY_POINT = UefiMain 8 | [Sources] 9 | AnalyzeHardDiskDevPath.c 10 | 11 | [Packages] 12 | MdePkg/MdePkg.dec 13 | 14 | [LibraryClasses] 15 | UefiApplicationEntryPoint 16 | UefiLib 17 | [Protocols] 18 | gEfiDiskIoProtocolGuid 19 | gEfiDevicePathToTextProtocolGuid 20 | [BuildOptions] 21 | MSFT:DEBUG_*_IA32_CC_FLAGS = /Od -------------------------------------------------------------------------------- /EnumSystemVariable.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #define INIT_NAME_BUFFER_SIZE 128 9 | #define INIT_DATA_BUFFER_SIZE 1024 10 | 11 | EFI_STATUS UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable) 12 | { 13 | EFI_STATUS Status; 14 | CHAR16 *FoundVarName,*OldName; 15 | UINT32 Atts; 16 | UINT8 *DataBuffer; 17 | EFI_GUID FoundVarGuid; 18 | UINTN DataSize,NameBufferSize,NameSize,OldNameBufferSize,DataBufferSize; 19 | NameBufferSize = INIT_NAME_BUFFER_SIZE; 20 | DataBufferSize = INIT_DATA_BUFFER_SIZE; 21 | FoundVarName = AllocateZeroPool(NameBufferSize); 22 | if (NULL == FoundVarName) 23 | { 24 | return EFI_OUT_OF_RESOURCES; 25 | } 26 | DataBuffer = AllocateZeroPool(DataBufferSize); 27 | if (NULL == DataBuffer) 28 | { 29 | FreePool(FoundVarName); 30 | return EFI_OUT_OF_RESOURCES; 31 | } 32 | for (;;) 33 | { 34 | NameSize = NameBufferSize; 35 | Status = gRT->GetNextVariableName(&NameSize,FoundVarName,&FoundVarGuid); 36 | if (EFI_BUFFER_TOO_SMALL == Status) 37 | { 38 | OldName = FoundVarName; 39 | OldNameBufferSize = NameBufferSize; 40 | 41 | NameBufferSize = NameSize > NameBufferSize * 2 ? NameSize : NameBufferSize * 2; 42 | FoundVarName = AllocateZeroPool(NameBufferSize); 43 | if (NULL == FoundVarName) 44 | { 45 | Status = EFI_OUT_OF_RESOURCES; 46 | FreePool(OldName); 47 | break; 48 | } 49 | CopyMem(FoundVarName,OldName,OldNameBufferSize); 50 | FreePool(OldName); 51 | NameSize = NameBufferSize; 52 | Status = gRT->GetNextVariableName(&NameSize,FoundVarName,&FoundVarGuid); 53 | } 54 | if (EFI_NOT_FOUND == Status) 55 | { 56 | break; 57 | } 58 | Print(L"%s\n",FoundVarName); 59 | DataSize = DataBufferSize; 60 | Status = gRT->GetVariable(FoundVarName,&FoundVarGuid,&Atts,&DataSize,DataBuffer); 61 | if (EFI_BUFFER_TOO_SMALL == Status) 62 | { 63 | 64 | } 65 | } 66 | return Status; 67 | } -------------------------------------------------------------------------------- /EnumSystemVariable.inf: -------------------------------------------------------------------------------- 1 | [Defines] 2 | INF_VERSION = 0x00010006 3 | BASE_NAME = EnumSystemVariable 4 | FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f 5 | MODULE_TYPE = UEFI_APPLICATION 6 | VERSION_STRING = 0.1 7 | ENTRY_POINT = UefiMain 8 | 9 | [Sources] 10 | EnumSystemVariable.c 11 | 12 | [Packages] 13 | MdePkg/MdePkg.dec 14 | 15 | [LibraryClasses] 16 | UefiApplicationEntryPoint 17 | UefiLib 18 | UefiBootServicesTableLib 19 | UefiRuntimeServicesTableLib 20 | MemoryAllocationLib 21 | BaseMemoryLib 22 | 23 | [BuildOptions] 24 | MSFT:*_*_IA32_CC_FLAGS = /wd4305 -------------------------------------------------------------------------------- /LookExitBootServices.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | EFI_STATUS UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable) 6 | { 7 | SystemTable->ConOut->OutputString(SystemTable->ConOut,L"ExitBootServices\n"); 8 | { 9 | UINTN MemMapSize = 0; 10 | EFI_MEMORY_DESCRIPTOR *MemMap = 0; 11 | UINTN MapKey = 0; 12 | UINTN DesSize = 0; 13 | UINT32 DesVersion = 0; 14 | CHAR16* Vendor = SystemTable->FirmwareVendor; 15 | SystemTable->ConOut->OutputString(SystemTable->ConOut,Vendor); 16 | _asm int 3 17 | gBS->GetMemoryMap(&MemMapSize,MemMap,&MapKey,&DesSize,&DesVersion); 18 | gBS->ExitBootServices(ImageHandle,MapKey); 19 | _asm int 3 20 | ASSERT(SystemTable->BootServices == NULL); 21 | while (DesSize > 0) 22 | { 23 | 24 | } 25 | return (EFI_STATUS)-1; 26 | } 27 | } -------------------------------------------------------------------------------- /LookExitBootServices.inf: -------------------------------------------------------------------------------- 1 | [Defines] 2 | INF_VERSION = 0x00010006 3 | BASE_NAME = LookExitBootServices 4 | FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f 5 | MODULE_TYPE = UEFI_APPLICATION 6 | VERSION_STRING = 0.1 7 | ENTRY_POINT = UefiMain 8 | 9 | [Sources] 10 | LookExitBootServices.c 11 | 12 | [Packages] 13 | MdePkg/MdePkg.dec 14 | 15 | [LibraryClasses] 16 | UefiApplicationEntryPoint 17 | UefiLib 18 | DebugLib 19 | 20 | [BuildOptions] 21 | MSFT:*_*_IA32_CC_FLAGS = /wd4305 -------------------------------------------------------------------------------- /Memory.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | EFI_STATUS TestGetMemoryMap() 6 | { 7 | EFI_STATUS Status = 0; 8 | UINTN MemoryMapSize = 0; 9 | EFI_MEMORY_DESCRIPTOR *MemoryMap = 0; 10 | UINTN MapKey = 0; 11 | UINTN DescriptorSize = 0; 12 | UINTN i; 13 | UINT32 DescriptorVersion = 0; 14 | EFI_MEMORY_DESCRIPTOR *MmMap = 0; 15 | 16 | Status = gBS->GetMemoryMap(&MemoryMapSize, \ 17 | MemoryMap, \ 18 | &MapKey, \ 19 | &DescriptorSize, \ 20 | &DescriptorVersion); 21 | if (Status != EFI_BUFFER_TOO_SMALL) 22 | { 23 | return Status; 24 | } 25 | Status = gBS->AllocatePool(EfiBootServicesData, \ 26 | MemoryMapSize, \ 27 | &MemoryMap); 28 | Status = gBS->GetMemoryMap(&MemoryMapSize, \ 29 | MemoryMap, \ 30 | &MapKey, \ 31 | &DescriptorSize, \ 32 | &DescriptorVersion); 33 | for (i = 0;i < MemoryMapSize / DescriptorSize;i++) 34 | { 35 | MmMap = (EFI_MEMORY_DESCRIPTOR *)(((CHAR8*)MemoryMap) + i * DescriptorSize); 36 | Print(L"MemoryMap %4d %10d :", MmMap[0].Type, MmMap[0].NumberOfPages); 37 | Print(L"%10lx<->",MmMap[0].PhysicalStart); 38 | Print(L"%10lx\n",MmMap[0].VirtualStart); 39 | } 40 | Status = gBS->FreePool(MemoryMap); 41 | return Status; 42 | } 43 | EFI_STATUS TestAllocateAddress() 44 | { 45 | EFI_STATUS Status = 0; 46 | EFI_PHYSICAL_ADDRESS Pages = 1024 * 1024 * 10; 47 | 48 | Status = gBS->AllocatePages(AllocateAddress, \ 49 | EfiBootServicesData, \ 50 | 3, \ 51 | &Pages); 52 | Print(L"AllocateAddress:%r %x\n",Status,Pages); 53 | if(Status == 0) 54 | { 55 | CHAR16* str; 56 | str = (CHAR16*)Pages; 57 | str[0] = 'H'; 58 | str[1] = 0; 59 | Print(L"Test Str:%s\n",str); 60 | Status = gBS->FreePages(Pages,3); 61 | } 62 | else 63 | { 64 | } 65 | return Status; 66 | } 67 | EFI_STATUS TestAllocateAnyPages() 68 | { 69 | EFI_STATUS Status; 70 | EFI_PHYSICAL_ADDRESS Pages; 71 | 72 | Status = gBS->AllocatePages(AllocateAnyPages, \ 73 | EfiBootServicesData, \ 74 | 3, \ 75 | &Pages); 76 | if(Status == 0) 77 | { 78 | CHAR16* str; 79 | str = (CHAR16*)Pages; 80 | str[0] = 'H'; 81 | str[1] = 0; 82 | Print(L"Test Str:%s\n",str); 83 | Status = gBS->FreePages(Pages,3); 84 | } 85 | else 86 | { 87 | } 88 | return Status; 89 | } 90 | EFI_STATUS UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable) 91 | { 92 | EFI_STATUS Status = 0; 93 | Status = TestAllocateAddress(); 94 | Status = TestAllocateAnyPages(); 95 | Status = TestGetMemoryMap(); 96 | return Status; 97 | } -------------------------------------------------------------------------------- /Memory.inf: -------------------------------------------------------------------------------- 1 | [Defines] 2 | INF_VERSION = 0x00010006 3 | BASE_NAME = Memory 4 | FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f 5 | MODULE_TYPE = UEFI_APPLICATION 6 | VERSION_STRING = 0.1 7 | ENTRY_POINT = UefiMain 8 | 9 | [Sources] 10 | Memory.c 11 | 12 | [Packages] 13 | MdePkg/MdePkg.dec 14 | 15 | [LibraryClasses] 16 | UefiApplicationEntryPoint 17 | UefiLib 18 | DebugLib 19 | 20 | [BuildOptions] 21 | MSFT:*_*_IA32_CC_FLAGS = /wd4305 -------------------------------------------------------------------------------- /Other.c: -------------------------------------------------------------------------------- 1 | EFI_STATUS DetectBootablePartition(void *Bootable) 2 | { 3 | EFI_STATUS Status; 4 | EFI_HANDLE *ControllerHandles = NULL; 5 | UINTN HandleIndex,NumHandles; 6 | //find all setup SimpleFileSystemProtocol 's Handle and find all FAT partition table 7 | Status = gBS->LocateHandleBuffer(ByProtocol,&gEfiSimpleFileSystemProtocolGuid,NULL,&NumHandles,&ControllerHandles); 8 | if (EFI_ERROR(Status)) 9 | { 10 | return Status; 11 | } 12 | //enum finder Handle 13 | for (HandleIndex = 0;HandleIndex < NumHandles;HandleIndex++) 14 | { 15 | EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFileSystem; 16 | //open on Handle's SimpleFileSystemProtocol 17 | Status = gBS->HandleProtocol(ControllerHandles[HandleIndex],&gEfiSimpleFileSystemProtocolGuid,(VOID **)&SimpleFileSystem); 18 | //check eif\boot\bootx64.efi file 19 | } 20 | //free ControllerHandle memory area 21 | if (ControllerHandles != NULL) 22 | { 23 | Status = gBS->FreePool(ControllerHandles); 24 | } 25 | return Status; 26 | } -------------------------------------------------------------------------------- /ReadDiskGPT.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable) 16 | { 17 | EFI_STATUS Status; 18 | UINTN HandleIndex,HandleCount; 19 | EFI_HANDLE *DiskControllerHandles = NULL; 20 | EFI_DISK_IO_PROTOCOL *DiskIo; 21 | //finder all EFI_DISK_IO_PROTOCOL's device 22 | Status = gBS->LocateHandleBuffer(ByProtocol,&gEfiDiskIoProtocolGuid,NULL,&HandleCount,&DiskControllerHandles); 23 | if (!EFI_ERROR(Status)) 24 | { 25 | CHAR8 gptHeaderSector[512]; 26 | EFI_PARTITION_TABLE_HEADER gptHeader = (EFI_PARTITION_TABLE_HEADER*)gptHeaderSector; 27 | for (HandleIndex = 0;HandleIndex < HandleCount;HandleIndex++) 28 | { 29 | //open EFI_DISK_IO_PROTOCOL 30 | Status = gBS->HandleProtocol(DiskControllerHandles[HandleIndex],&gEfiDiskIoProtocolGuid,(VOID**)&DiskIo); 31 | if (!EFI_ERROR(Status)) 32 | { 33 | EFI_DEVICE_PATH_PROTOCOL *DiskDevicePath; 34 | EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *Device2TextProtocol = 0; 35 | CHAR16 *TextDevicePath = 0; 36 | //open EFI_DEVICE_PATH_PROTOCOL 37 | Status = gBS->OpenProtocol(DiskControllerHandles[HandleIndex], \ 38 | &gEfiDevicePathProtocolGuid, \ 39 | (VOID**)&DiskDevicePath, \ 40 | ImageHandle, \ 41 | NULL, \ 42 | EFI_OPEN_PROTOCOL_GETPROTOCOL); 43 | if (!EFI_ERROR(Status)) 44 | { 45 | if (Device2TextProtocol == 0) 46 | { 47 | Status = gBS->LocateProtocol(&gEfiDevicePathToTextProtocolGuid,NULL,(VOID**)&Device2TextProtocol); 48 | //use EFI_DEVICE_PATH_PROTOCOL get text format DevicePath 49 | TextDevicePath = Device2TextProtocol->ConvertDevicePathToText(DiskDevicePath,TRUE,TRUE); 50 | Print(L"%s\n",TextDevicePath); 51 | if (TextDevicePath) 52 | { 53 | gBs->FreePool(TextDevicePath); 54 | Status = gBS->CloseProtocol(DiskControllerHandles[HandleIndex],&gEfiDevicePathProtocolGuid,ImageHandle,NULL); 55 | } 56 | } 57 | } 58 | EFI_BLOCK_IO_PROTOCOL *BlockIo = *(EFI_BLOCK_IO_PROTOCOL**)(DiskIo + 0x01); 59 | EFI_BLOCK_IO_MEDIA *Media = BlockIo->Media; 60 | //read first sector 61 | Status = DiskIo->ReadDisk(DiskIo,Media->MediaId,512,512,gptHeader); 62 | //check GPT Signature 63 | if (!EFI_ERROR(Status) && (gptHeader->Header.Signature == 0x5452415020494645)) 64 | { 65 | UINT32 CRCSum,GPTHeaderCRCSum = (gptHeader->Header.CRC32); 66 | gptHeader->Header.CRC32 = 0; 67 | gBS->CalculateCrc32(gptHeader,gptHeader->Header.HeaderSize,&CRCSum); 68 | if (GPTHeaderCRCSum == CRCSum) 69 | { 70 | //finder right GPT Header 71 | } 72 | } 73 | } 74 | } 75 | gBS->FreePool(DiskControllerHandles); 76 | } 77 | } -------------------------------------------------------------------------------- /ShellAppMain.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | INTN ShellAppMain(IN UINTN Argc,IN CHAR16 **Argv) 5 | { 6 | gST->ConOut->OutputString(gST->ConOut,L"HelloWorld\n"); 7 | return 0; 8 | } -------------------------------------------------------------------------------- /ShellAppMain.inf: -------------------------------------------------------------------------------- 1 | [Defines] 2 | INF_VERSION = 0x00010006 3 | BASE_NAME = ShellAppMain 4 | FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f 5 | MODULE_TYPE = UEFI_APPLICATION 6 | VERSION_STRING = 0.1 7 | ENTRY_POINT = ShellCEntryLib 8 | # 9 | # VALID_ARCHITECTURES = IA32 X64 IPF 10 | # 11 | [Sources] 12 | Main.c 13 | 14 | [Packages] 15 | MdePkg/MdePkg.dec 16 | ShellPkg/ShellPkg.dec 17 | 18 | [LibraryClasses] 19 | ShellCEntryLib 20 | UefiLib 21 | 22 | [BuildOptions] 23 | 24 | -------------------------------------------------------------------------------- /UefiMain.c: -------------------------------------------------------------------------------- 1 | #include 2 | EFI_STATUS UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable) 3 | { 4 | SystemTable->ConOut->OutputString(SystemTable->ConOut,L"HelloWorld\n"); 5 | return EFI_SUCCESS; 6 | } -------------------------------------------------------------------------------- /UefiMain.inf: -------------------------------------------------------------------------------- 1 | [Defines] 2 | INF_VERSION = 0x00010006 3 | BASE_NAME = UefiMain 4 | FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f 5 | MODULE_TYPE = UEFI_APPLICATION 6 | VERSION_STRING = 0.1 7 | ENTRY_POINT = UefiMain 8 | [Sources] 9 | UefiMain.c 10 | 11 | [Packages] 12 | MdePkg/MdePkg.dec 13 | 14 | [LibraryClasses] 15 | UefiApplicationEntryPoint 16 | UefiLib 17 | [FixedPcd] 18 | gEfiMdePkgTokenSpaceGuid.PcdFSBClock|600000000 19 | gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength 20 | [FeaturePcd] 21 | gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|FALSE 22 | gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnosticsDisable 23 | [PatchPcd] 24 | gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLangCodes 25 | [BuildOptions] 26 | MSFT:DEBUG_*_IA32_CC_FLAGS = /Od 27 | -------------------------------------------------------------------------------- /UseSystemTable.c: -------------------------------------------------------------------------------- 1 | #include 2 | //build -p Nt32Pkg\Nt32Pkg.dsc 3 | EFI_STATUS UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable) 4 | { 5 | EFI_STATUS Status; 6 | UINTN Index; 7 | EFI_INPUT_KEY Key; 8 | CHAR16 StrBuffer[3]; 9 | //__asm int 3 10 | SystemTable->BootServices->WaitForEvent(1,&SystemTable->ConIn->WaitForKey,&Index); 11 | //wait input 12 | Status = SystemTable->ConIn->ReadKeyStroke(SystemTable->ConIn,&Key); 13 | //__asm int 3 14 | StrBuffer[0] = Key.UnicodeChar; 15 | if (StrBuffer[0] == L'q') 16 | { 17 | SystemTable->ConOut->OutputString(SystemTable->ConOut,L"Input \'q\'\n"); 18 | } 19 | StrBuffer[1] = '\n'; 20 | 21 | SystemTable->ConOut->OutputString(SystemTable->ConOut,StrBuffer); 22 | return EFI_SUCCESS; 23 | } -------------------------------------------------------------------------------- /UseSystemTable.inf: -------------------------------------------------------------------------------- 1 | [Defines] 2 | INF_VERSION = 0x00010006 3 | BASE_NAME = UseSystemTable 4 | FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f 5 | MODULE_TYPE = UEFI_APPLICATION 6 | VERSION_STRING = 0.1 7 | ENTRY_POINT = UefiMain 8 | 9 | [Sources] 10 | UseSystemTable.c 11 | 12 | [Packages] 13 | MdePkg/MdePkg.dec 14 | 15 | [LibraryClasses] 16 | UefiApplicationEntryPoint 17 | [BuildOptions] -------------------------------------------------------------------------------- /UserSpaceUseGlobalSystemTable.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | //build -p Nt32Pkg\Nt32Pkg.dsc 4 | EFI_STATUS UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable) 5 | { 6 | EFI_STATUS Status; 7 | UINTN Index; 8 | EFI_INPUT_KEY Key; 9 | CHAR16 StrBuffer[4]; 10 | //__asm int 3 11 | gST->ConOut->OutputString(gST->ConOut,L"please enter any key\n"); 12 | //wait input 13 | gBS->WaitForEvent(1,&gST->ConIn->WaitForKey,&Index); 14 | //__asm int 3 15 | Status = gST->ConIn->ReadKeyStroke(gST->ConIn,&Key); 16 | StrBuffer[0] = Key.UnicodeChar; 17 | if (StrBuffer[0] == L'q') 18 | { 19 | gST->ConOut->OutputString(gST->ConOut,L"Input \'q\'\n"); 20 | } 21 | StrBuffer[1] = '\n'; 22 | 23 | gST->ConOut->OutputString(gST->ConOut,StrBuffer); 24 | return EFI_SUCCESS; 25 | } -------------------------------------------------------------------------------- /UserSpaceUseGlobalSystemTable.inf: -------------------------------------------------------------------------------- 1 | [Defines] 2 | INF_VERSION = 0x00010006 3 | BASE_NAME = UserSpaceUseGlobalSystemTable 4 | FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f 5 | MODULE_TYPE = UEFI_APPLICATION 6 | VERSION_STRING = 0.1 7 | ENTRY_POINT = UefiMain 8 | 9 | [Sources] 10 | UserSpaceUseGlobalSystemTable.c 11 | 12 | [Packages] 13 | MdePkg/MdePkg.dec 14 | 15 | [LibraryClasses] 16 | UefiApplicationEntryPoint 17 | UefiBootServicesTableLib 18 | [BuildOptions] -------------------------------------------------------------------------------- /main.c: -------------------------------------------------------------------------------- 1 | #include 2 | int main (int argc, char **argv ) 3 | { 4 | printf("HelloWorld\n"); 5 | return 0; 6 | } 7 | 8 | -------------------------------------------------------------------------------- /main.inf: -------------------------------------------------------------------------------- 1 | ## @file main.inf 2 | [Defines] 3 | INF_VERSION = 0x00010006 4 | BASE_NAME = Main 5 | FILE_GUID = 4ea97c46-7491-4dfd-b442-747010f3ce5f 6 | MODULE_TYPE = UEFI_APPLICATION 7 | VERSION_STRING = 0.1 8 | ENTRY_POINT = ShellCEntryLib 9 | [Sources] 10 | main.c 11 | [Packages] 12 | MdePkg/MdePkg.dec 13 | ShellPkg/ShellPkg.dec 14 | StdLib/StdLib.dec 15 | [LibraryClasses] 16 | LibC 17 | LibStdio 18 | ShellCEntryLib 19 | --------------------------------------------------------------------------------