summaryrefslogtreecommitdiffhomepage
path: root/Private/NewBoot
diff options
context:
space:
mode:
Diffstat (limited to 'Private/NewBoot')
-rw-r--r--Private/NewBoot/BootKit/BootKit.hxx4
-rw-r--r--Private/NewBoot/Source/RuntimeMain.cxx25
2 files changed, 19 insertions, 10 deletions
diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx
index 68d91deb..2eaea9d1 100644
--- a/Private/NewBoot/BootKit/BootKit.hxx
+++ b/Private/NewBoot/BootKit/BootKit.hxx
@@ -77,7 +77,7 @@ class BFileReader final {
Int32 &Error() { return mErrorCode; }
VoidPtr Blob() { return mBlob; }
- EfiFileProtocol *File() { return mFile; }
+ EfiFileProtocolPtr File() { return mFile; }
UInt64 &Size() { return mSizeFile; }
public:
@@ -93,6 +93,8 @@ class BFileReader final {
UInt64 mSizeFile{0};
};
+typedef UInt8 *BlobType;
+
#define kMaxReadSize (320)
/***********************************************************************************/
diff --git a/Private/NewBoot/Source/RuntimeMain.cxx b/Private/NewBoot/Source/RuntimeMain.cxx
index ff6eb730..aeaf013a 100644
--- a/Private/NewBoot/Source/RuntimeMain.cxx
+++ b/Private/NewBoot/Source/RuntimeMain.cxx
@@ -54,29 +54,36 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle,
img.ReadAll();
if (img.Error() == BFileReader::kOperationOkay) {
- UInt8* blob = (UInt8*)img.Blob();
+ BlobType blob = (BlobType)img.Blob();
DosHeaderPtr ptrDos = reinterpret_cast<DosHeaderPtr>(blob);
ExecHeaderPtr ptrHdr = Detail::FindPEHeader(ptrDos);
if (ptrDos->eMagic[0] == kMagMz0 && ptrDos->eMagic[1] == kMagMz1 &&
ptrHdr->mMachine == EFI::Platform() && ptrHdr->mMagic == kPeMagic) {
- UInt64 MapKey = 0;
+ if (ptrHdr->mNumberOfSections > 1) {
+ UInt64 MapKey = 0;
- writer.WriteString(L"HCoreLdr: Booting...").WriteString(L"\r\n");
+ writer.WriteString(L"HCoreLdr: Booting...").WriteString(L"\r\n");
- EFI::ExitBootServices(MapKey, ImageHandle);
+ EFI::ExitBootServices(MapKey, ImageHandle);
- // Launch PE app.
+ // Launch PE app.
- EFI::Stop();
+ EFI::Stop();
- return kEfiOk;
+ return kEfiOk;
+ } else {
+ writer.WriteString(
+ L"HCoreLdr: Error! HCOREKRNL.EXE is missing critical "
+ L"components!\r\n");
+ }
}
+ } else {
+ writer.WriteString(
+ L"HCoreLdr: Error! HCOREKRNL.EXE is not an executable!\r\n");
}
- writer.WriteString(L"HCoreLdr: Error! HCOREKRNL.EXE missing or invalid!\r\n");
-
EFI::Stop();
return kEfiFail;