diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-04 20:32:18 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-04 20:32:18 +0100 |
| commit | b76f26d281c77e3fa028d4217a1456c43ab68d06 (patch) | |
| tree | 66cebff0951c52fbf0b5289ca4c1ee3584e33776 /Private/NewBoot/Source/FileReader.cxx | |
| parent | 9fe3b6e1e2447a11644307e83df2b109b24fe0d1 (diff) | |
HCR-11 : Found the reason why it doesn't work, fixing it tomorrow.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot/Source/FileReader.cxx')
| -rw-r--r-- | Private/NewBoot/Source/FileReader.cxx | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx index a66f2c71..be0e7746 100644 --- a/Private/NewBoot/Source/FileReader.cxx +++ b/Private/NewBoot/Source/FileReader.cxx @@ -16,6 +16,10 @@ #include <EFIKit/Api.hxx> #include <EFIKit/Handover.hxx> +#include "EFIKit/EFI.hxx" +#include "KernelKit/PE.hpp" +#include "NewKit/Defines.hpp" + //////////////////////////////////////////////////////////////////////////////////////////////////// // // @@ -85,12 +89,10 @@ Void BFileReader::Fetch(EfiHandlePtr ImageHandle) { return; } - /// Open kernel. - - EfiFileProtocol* kernelFile; + EfiFileProtocol* kernelFile = nullptr; - if (rootFs->Open(rootFs, &kernelFile, mPath, kEFIFileRead, - kEFIReadOnly | kEFIHidden | kEFISystem) != kEfiOk) { + if (rootFs->Open(rootFs, &kernelFile, mPath, kEFIFileRead, kEFIReadOnly) != + kEfiOk) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Path: ") .WriteString(mPath) .WriteString(L"\r\n"); @@ -98,6 +100,8 @@ Void BFileReader::Fetch(EfiHandlePtr ImageHandle) { return; } + rootFs->Close(rootFs); + if (kernelFile->Revision < EFI_FILE_PROTOCOL_REVISION2) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: Invalid-Revision: ") .WriteString(mPath) @@ -108,12 +112,13 @@ Void BFileReader::Fetch(EfiHandlePtr ImageHandle) { /// File FAT info. UInt32 szInfo = sizeof(EfiFileInfo); - EfiFileInfo info{0}; + EfiFileInfo* info = nullptr; + + BS->AllocatePool(EfiLoaderData, szInfo, (void**)&info); guidEfp = EfiGUID(EFI_FILE_INFO_GUID); - if (kernelFile->GetInfo(kernelFile, &guidEfp, &szInfo, (void*)&info) != - kEfiOk) { + if (kernelFile->GetInfo(kernelFile, &guidEfp, &szInfo, info) != kEfiOk) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Path: ") .WriteString(mPath) .WriteString(L"\r\n"); @@ -126,23 +131,26 @@ Void BFileReader::Fetch(EfiHandlePtr ImageHandle) { VoidPtr blob = (VoidPtr)kHandoverStartKernel; - mWriter.WriteString(L"HCoreLdr: Fetch-Info: OK...").WriteString(L"\r\n"); + if (BS->AllocatePages(AllocateAnyPages, EfiLoaderData, 1, + (EfiPhysicalAddress*)&blob) != kEfiOk) { + EFI::RaiseHardError(L"HCoreLdr_PageError", L"Allocation error."); + } + + UInt32* sz = nullptr; + + BS->AllocatePool(EfiLoaderData, sizeof(UInt32), (VoidPtr*)&sz); - UInt32 sz = info.FileSize; + *sz = info->FileSize; - BSetMem((CharacterType*)blob, 0, sz); + mWriter.WriteString(L"HCoreLdr: Fetch-Info: Read...").WriteString(L"\r\n"); - auto resultEfiRead = kernelFile->Read(kernelFile, &sz, blob); - kernelFile->Close(kernelFile); + kernelFile->Read(kernelFile, sz, blob); - if (resultEfiRead != kEfiOk) return; + mWriter.WriteString(L"HCoreLdr: Fetch-Info: Success...").WriteString(L"\r\n"); mCached = true; mErrorCode = kOperationOkay; - mBlob = blob; // We are done! - - mWriter.WriteString(L"HCoreLdr: Fetch: OK.").WriteString(L"\r\n"); } |
