diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-23 22:27:47 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-23 22:27:47 +0200 |
| commit | b55d3ac738b40677c579221b4f0dbf294dc3b017 (patch) | |
| tree | 2ce2089d58f1d5d1bfca642442e20c2b4ad8255c /dev/kernel/KernelKit/PECodeMgr.h | |
| parent | 46d60a746e86270e0f2a66f724e809fca32679c0 (diff) | |
dev, kernel: necessary refactors regarding future changes.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/KernelKit/PECodeMgr.h')
| -rw-r--r-- | dev/kernel/KernelKit/PECodeMgr.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/dev/kernel/KernelKit/PECodeMgr.h b/dev/kernel/KernelKit/PECodeMgr.h index e666c501..23ef4ecf 100644 --- a/dev/kernel/KernelKit/PECodeMgr.h +++ b/dev/kernel/KernelKit/PECodeMgr.h @@ -22,3 +22,58 @@ #include <KernelKit/PE.h> #include <NewKit/ErrorOr.h> #include <NewKit/KString.h> +#include <KernelKit/FileMgr.h> +#include <KernelKit/LoaderInterface.h> + +#ifndef INC_PROCESS_SCHEDULER_H +#include <KernelKit/ProcessScheduler.h> +#endif + +#define kPefApplicationMime "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; + 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 |
