diff options
Diffstat (limited to 'dev/kernel/KernelKit/PECodeMgr.h')
| -rw-r--r-- | dev/kernel/KernelKit/PECodeMgr.h | 63 |
1 files changed, 58 insertions, 5 deletions
diff --git a/dev/kernel/KernelKit/PECodeMgr.h b/dev/kernel/KernelKit/PECodeMgr.h index e666c501..05a2674c 100644 --- a/dev/kernel/KernelKit/PECodeMgr.h +++ b/dev/kernel/KernelKit/PECodeMgr.h @@ -1,13 +1,13 @@ /* ------------------------------------------- - Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. - File: PECodeMgr.h - Purpose: PE32+ Code Mgr and Dylib mgr. + File: PECodeMgr.h + Purpose: PE32+ Code Mgr and Dylib mgr. - Revision History: + Revision History: - 12/02/24: Added file (amlel) + 12/02/24: Added file (amlel) ------------------------------------------- */ @@ -19,6 +19,59 @@ //////////////////////////////////////////////////// +#include <KernelKit/FileMgr.h> +#include <KernelKit/LoaderInterface.h> #include <KernelKit/PE.h> #include <NewKit/ErrorOr.h> #include <NewKit/KString.h> + +#ifndef INC_PROCESS_SCHEDULER_H +#include <KernelKit/ProcessScheduler.h> +#endif + +#define kPeApplicationMime "application/vnd-portable-executable" + +namespace Kernel { +/// +/// \name PE32Loader +/// \brief PE32+ loader class. +/// +class PE32Loader : public LoaderInterface { + private: + explicit PE32Loader() = delete; + + public: + explicit PE32Loader(const VoidPtr blob); + explicit PE32Loader(const Char* path); + ~PE32Loader() override; + + public: + NE_COPY_DEFAULT(PE32Loader) + + public: + const Char* Path() override; + const Char* AsString() override; + const Char* MIME() override; + + public: + ErrorOr<VoidPtr> FindStart() override; + ErrorOr<VoidPtr> FindSymbol(const Char* name, Int32 kind) override; + ErrorOr<VoidPtr> GetBlob() override; + + public: + bool IsLoaded() noexcept; + + private: +#ifdef __FSKIT_INCLUDES_NEFS__ + OwnPtr<FileStream<Char, NeFileSystemMgr>> fFile; +#elif defined(__FSKIT_INCLUDES_HEFS__) + OwnPtr<FileStream<Char, HeFileSystemMgr>> fFile; +#else + OwnPtr<FileStream<Char>> fFile; +#endif // __FSKIT_INCLUDES_NEFS__ + + Ref<KString> fPath; + VoidPtr fCachedBlob; + bool fBad; +}; +} // namespace Kernel
\ No newline at end of file |
