// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/nekernel-org/nekernel #ifndef KERNELKIT_CODEMGR_PEF_H #define KERNELKIT_CODEMGR_PEF_H /// @file PEFCodeMgr.h /// @brief PEF Code Manager header file. /// @author Amlal El Mahrouss (amlal@nekernel.org) #include #include #include #include #ifndef KERNELKIT_USERPROCESSSCHEDULER_H #include #endif #define kPefApplicationMime "application/vnd-nekernel-executable" namespace Kernel { /// /// \name PEFLoader /// \brief PEF loader class. /// class PEFLoader : public ILoader { private: explicit PEFLoader() = delete; public: explicit PEFLoader(const VoidPtr blob); explicit PEFLoader(const Char* path); ~PEFLoader() override; public: NE_COPY_DEFAULT(PEFLoader) public: const Char* Path() override; const Char* AsString() override; const Char* MIME() override; public: ErrorOr FindStart() override; ErrorOr FindSymbol(const Char* name, Int32 kind) override; ErrorOr GetBlob() override; public: bool IsLoaded(); private: #ifdef __FSKIT_INCLUDES_NEFS__ OwnPtr> fFile; #elif defined(__FSKIT_INCLUDES_OPENHEFS__) OwnPtr> fFile; #else OwnPtr> fFile; #endif // __FSKIT_INCLUDES_NEFS__ Ref fPath; ErrorOrAny fCachedBlob; BOOL fFatBinary{}; BOOL fBad{}; }; ProcessID rtl_create_user_process(PEFLoader& exec, const UserProcess::ExecutableKind& procKind); } // namespace Kernel #endif // ifndef KERNELKIT_CODEMGR_PEF_H