summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/KernelKit/PECodeMgr.h
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-23 22:27:47 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-04-23 22:27:47 +0200
commitb55d3ac738b40677c579221b4f0dbf294dc3b017 (patch)
tree2ce2089d58f1d5d1bfca642442e20c2b4ad8255c /dev/kernel/KernelKit/PECodeMgr.h
parent46d60a746e86270e0f2a66f724e809fca32679c0 (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.h55
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