/* ======================================== Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. ======================================== */ #ifndef _INC_CODE_MANAGER_PEF_H_ #define _INC_CODE_MANAGER_PEF_H_ /// @file PEFCodeMgr.h /// @brief PEF Code Manager header file. /// @author Amlal El Mahrouss (amlal@nekernel.org) #include #include #include #include #ifndef INC_PROCESS_SCHEDULER_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() noexcept; private: #ifdef __FSKIT_INCLUDES_NEFS__ OwnPtr> fFile; #elif defined(__FSKIT_INCLUDES_OPENHEFS__) OwnPtr> fFile; #else OwnPtr> fFile; #endif // __FSKIT_INCLUDES_NEFS__ Ref fPath; VoidPtr fCachedBlob; BOOL fFatBinary{}; BOOL fBad{}; }; namespace Utils { ProcessID rtl_create_user_process(PEFLoader& exec, const Int32& procKind) noexcept; } // namespace Utils } // namespace Kernel #endif // ifndef _INC_CODE_MANAGER_PEF_H_