From 122681ad5bc13ceece505e030a1141d2ae76c252 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Wed, 9 Oct 2024 13:06:53 +0200 Subject: IMP: Implemented SCI Memory Manager following functions: MmFillMemory and MmCopyMemory. Signed-off-by: Amlal EL Mahrouss --- dev/base/View/pdf.hxx | 51 +++++++++++++++++++++++++++++ dev/base/View/src/app.cxx | 0 dev/base/View/src/pdf.cxx | 7 ++++ dev/base/View/src/viewer_box.cxx | 0 dev/base/View/view.json | 21 ++++++++++++ dev/base/View/viewer_box.hxx | 0 dev/prm/pdf.hxx | 50 ---------------------------- dev/prm/prm.json | 23 ------------- dev/prm/src/pdf.cxx | 7 ---- dev/sci/sci_base.hxx | 15 ++++++--- dev/sci/src/sci_base.cxx | 7 ---- dev/sci/src/sci_mm.cxx | 52 ++++++++++++++++++++++++++++++ dev/zka/KernelKit/UserProcessScheduler.hxx | 3 -- 13 files changed, 141 insertions(+), 95 deletions(-) create mode 100644 dev/base/View/pdf.hxx create mode 100644 dev/base/View/src/app.cxx create mode 100644 dev/base/View/src/pdf.cxx create mode 100644 dev/base/View/src/viewer_box.cxx create mode 100644 dev/base/View/view.json create mode 100644 dev/base/View/viewer_box.hxx delete mode 100644 dev/prm/pdf.hxx delete mode 100644 dev/prm/prm.json delete mode 100644 dev/prm/src/pdf.cxx delete mode 100644 dev/sci/src/sci_base.cxx create mode 100644 dev/sci/src/sci_mm.cxx diff --git a/dev/base/View/pdf.hxx b/dev/base/View/pdf.hxx new file mode 100644 index 00000000..e984ef29 --- /dev/null +++ b/dev/base/View/pdf.hxx @@ -0,0 +1,51 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies. + +------------------------------------------- */ + +#pragma once + +#include + +namespace View::PDF +{ + class IPDF; + class IPDFDocument; + class IPDFTimestamp; + class IPDFTag; + + /// \brief PDF manipulator class. + class IPDF + { + public: + explicit IPDF() = default; + virtual ~IPDF() = default; + + IPDF& operator=(const IPDF&) = delete; + IPDF(const IPDF&) = delete; + + virtual IPDFDocument* GetFirstPage() = 0; + virtual IPDFDocument* GetLastPage() = 0; + + virtual IPDFDocument* GetPage(const UInt32& page_number); + virtual SInt32 SetPage(const UInt32& page_number, IPDFDocument* new_page); + + virtual Void SetProducer(const Char*) = 0; + virtual Void SetTitle(const Char*) = 0; + virtual Void SetAuthor(const Char*) = 0; + virtual Void SetSubject(const Char*) = 0; + + virtual const Char* GetProducer() = 0; + virtual const Char* GetTitle() = 0; + virtual const Char* GetAuthor() = 0; + virtual const Char* GetSubject() = 0; + + virtual Bool IsFastView() = 0; + + virtual SizeT GetWidth() = 0; + virtual SizeT GetHeight() = 0; + + virtual SizeT GetPageCount() = 0; + }; +} // namespace View::PDF diff --git a/dev/base/View/src/app.cxx b/dev/base/View/src/app.cxx new file mode 100644 index 00000000..e69de29b diff --git a/dev/base/View/src/pdf.cxx b/dev/base/View/src/pdf.cxx new file mode 100644 index 00000000..11f32a8a --- /dev/null +++ b/dev/base/View/src/pdf.cxx @@ -0,0 +1,7 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies. + +------------------------------------------- */ + +#include diff --git a/dev/base/View/src/viewer_box.cxx b/dev/base/View/src/viewer_box.cxx new file mode 100644 index 00000000..e69de29b diff --git a/dev/base/View/view.json b/dev/base/View/view.json new file mode 100644 index 00000000..9033eaec --- /dev/null +++ b/dev/base/View/view.json @@ -0,0 +1,21 @@ +{ + "compiler_path": "x86_64-w64-mingw32-g++", + "compiler_std": "c++20", + "headers_path": ["../../", "....//zka"], + "sources_path": ["src/*.cxx"], + "output_name": "View.exe", + "compiler_flags": [ + "-fPIC", + "-ffreestanding", + "-shared", + "-fno-rtti", + "-fno-exceptions", + "-Wl,--subsystem=17" + ], + "cpp_macros": [ + "__VIEW_IMPL__", + "cPRMVersion=0x0100", + "cPRMVersionHighest=0x0100", + "cPRMVersionLowest=0x0100" + ] +} diff --git a/dev/base/View/viewer_box.hxx b/dev/base/View/viewer_box.hxx new file mode 100644 index 00000000..e69de29b diff --git a/dev/prm/pdf.hxx b/dev/prm/pdf.hxx deleted file mode 100644 index 65bc50bf..00000000 --- a/dev/prm/pdf.hxx +++ /dev/null @@ -1,50 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include -#include - -namespace Kernel::PDF -{ - class IPDFRenderViewport; - class IPDFDocument; - class IPDFTimestamp; - class IPDFTag; - - /// \brief PDF rendering class. - class IPDFRenderViewport - { - public: - explicit IPDFRenderViewport() = default; - virtual ~IPDFRenderViewport() = default; - - ZKA_COPY_DELETE(IPDFRenderViewport); - - virtual IPDFDocument* GetFirstPage() = 0; - virtual IPDFDocument* GetLastPage() = 0; - - virtual IPDFDocument* GetPage(const UInt32& page_number); - - virtual Void SetProducer(const Char*) = 0; - virtual Void SetTitle(const Char*) = 0; - virtual Void SetAuthor(const Char*) = 0; - virtual Void SetSubject(const Char*) = 0; - - virtual const Char* GetProducer() = 0; - virtual const Char* GetTitle() = 0; - virtual const Char* GetAuthor() = 0; - virtual const Char* GetSubject() = 0; - - virtual Bool IsFastView() = 0; - - virtual SizeT GetWidth() = 0; - virtual SizeT GetHeight() = 0; - - virtual SizeT GetPageCount() = 0; - }; -} // namespace Kernel::PDF diff --git a/dev/prm/prm.json b/dev/prm/prm.json deleted file mode 100644 index 25665c7c..00000000 --- a/dev/prm/prm.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compiler_path": "x86_64-w64-mingw32-g++", - "compiler_std": "c++20", - "headers_path": ["../", "../zka"], - "sources_path": ["src/*.cxx"], - "output_name": "prm.sys", - "compiler_flags": [ - "-fPIC", - "-ffreestanding", - "-shared", - "-fno-rtti", - "-fno-exceptions", - "-Wl,--subsystem=17" - ], - "cpp_macros": [ - "__PRM_IMPL__", - "__NEWOSKRNL__", - "__ZKA_AMD64__", - "cPRMVersion=0x0100", - "cPRMVersionHighest=0x0100", - "cPRMVersionLowest=0x0100" - ] -} diff --git a/dev/prm/src/pdf.cxx b/dev/prm/src/pdf.cxx deleted file mode 100644 index 3d9cfdf2..00000000 --- a/dev/prm/src/pdf.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include diff --git a/dev/sci/sci_base.hxx b/dev/sci/sci_base.hxx index 70a0f7f4..f0eff474 100644 --- a/dev/sci/sci_base.hxx +++ b/dev/sci/sci_base.hxx @@ -208,8 +208,11 @@ IMPORT_C VoidPtr MmCreateHeap(_Input SizeT len, _Input UInt32 flags); /// @return void. IMPORT_C Void MmDestroyHeap(_Input VoidPtr heap); -/// @brief Change protection flags of memory region. -IMPORT_C UInt32 MmChangeHeapFlags(_Input VoidPtr heap, _Input UInt32 flags); +/// @brief Change protection flags of a memory region. +IMPORT_C Void MmSetHeapFlags(_Input VoidPtr heap, _Input UInt32 flags); + +/// @brief Change protection flags of a memory region. +IMPORT_C UInt32 MmGetHeapFlags(_Input VoidPtr heap); /// @brief Fill memory region with CRC32. IMPORT_C UInt32 MmFillCRC32Heap(_Input VoidPtr heap); @@ -243,12 +246,14 @@ IMPORT_C Void ThrExitMainThread(_Input SInt32 exit_code); /// @param exit_code the exit code. IMPORT_C Void ThrExitThread(_Input ThreadObject thread, _Input SInt32 exit_code); -typedef Void(*GenericThreadFn)(Void); +typedef Void(*ThreadProc)(Void); /// @brief Create a thread. -/// @param proc the thread procedure. +/// @param procedure the thread procedure. +/// @param argument_count number of arguments inside that thread. +/// @param flags Thread flags. /// @return the thread object. -IMPORT_C ThreadObject ThrCreateThread(GenericThreadFn proc); +IMPORT_C ThreadObject ThrCreateThread(ThreadProc procedure, SInt32 argument_count, SInt32 flags); /// @brief Yield the current thread. /// @param thread the thread to yield. diff --git a/dev/sci/src/sci_base.cxx b/dev/sci/src/sci_base.cxx deleted file mode 100644 index d2897cb3..00000000 --- a/dev/sci/src/sci_base.cxx +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include diff --git a/dev/sci/src/sci_mm.cxx b/dev/sci/src/sci_mm.cxx new file mode 100644 index 00000000..eff54501 --- /dev/null +++ b/dev/sci/src/sci_mm.cxx @@ -0,0 +1,52 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies. + +------------------------------------------- */ + +#include + +/// @file sci_base.cxx +/// @brief Base Memory Manager functions for SCI.dll + +/// @brief Debug error prompt, when a function misbehaves. +/// @param msg +/// @return +IMPORT_C Void __RtlRaiseSoftError(const char* msg); + +/// @brief Copy memory region. +IMPORT_C VoidPtr MmCopyMemory(_Input VoidPtr dest, _Input VoidPtr src, _Input SizeT len) +{ + if (!len || + !dest || + !src) + { + __RtlRaiseSoftError("Debug Error, MmCopyMemory contains one or more invalid arguments."); + return nullptr; + } + + for (SizeT i = 0; i < len; i++) + { + ((Char*)dest)[i] = ((Char*)src)[i]; + } + + return dest; +} + +/// @brief Fill memory region with **value**. +IMPORT_C VoidPtr MmFillMemory(_Input VoidPtr dest, _Input SizeT len, _Input UInt8 value) +{ + if (!len || + !dest) + { + __RtlRaiseSoftError("Debug Error, MmFillMemory contains one or more invalid arguments."); + return nullptr; + } + + for (SizeT i = 0; i < len; i++) + { + ((Char*)dest)[i] = value; + } + + return dest; +} diff --git a/dev/zka/KernelKit/UserProcessScheduler.hxx b/dev/zka/KernelKit/UserProcessScheduler.hxx index 4edc80c2..157eebe0 100644 --- a/dev/zka/KernelKit/UserProcessScheduler.hxx +++ b/dev/zka/KernelKit/UserProcessScheduler.hxx @@ -160,9 +160,6 @@ namespace Kernel //! @brief Shared library handle, reserved for eExecutableDLLKind types of executables only. IPEFDLLObject* PefDLLDelegate{nullptr}; - /// @brief Parent process, reserved for threads only. - UserProcess* Parent{nullptr}; - // Memory usage. SizeT MemoryCursor{0}; SizeT MemoryLimit{kSchedMaxMemoryLimit}; -- cgit v1.2.3