summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/CFKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-23 19:13:48 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-23 19:15:17 +0100
commita13e1c0911c0627184bc38f18c7fdda64447b3ad (patch)
tree073a62c09bf216e85a3f310376640fa1805147f9 /dev/kernel/CFKit
parent149fa096eb306d03686b3b67e813cf1a78e08cd0 (diff)
meta(kernel): Reworked repository's filesystem structure.
Removing useless parts of the project too. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/kernel/CFKit')
-rw-r--r--dev/kernel/CFKit/GUIDWizard.h24
-rw-r--r--dev/kernel/CFKit/GUIDWrapper.h60
-rw-r--r--dev/kernel/CFKit/Property.h56
-rw-r--r--dev/kernel/CFKit/Utils.h55
4 files changed, 195 insertions, 0 deletions
diff --git a/dev/kernel/CFKit/GUIDWizard.h b/dev/kernel/CFKit/GUIDWizard.h
new file mode 100644
index 00000000..5236688f
--- /dev/null
+++ b/dev/kernel/CFKit/GUIDWizard.h
@@ -0,0 +1,24 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <CFKit/GUIDWrapper.h>
+#include <NewKit/Array.h>
+#include <NewKit/ArrayList.h>
+#include <NewKit/Defines.h>
+#include <NewKit/ErrorOr.h>
+#include <NewKit/Ref.h>
+#include <NewKit/Stream.h>
+#include <NewKit/KString.h>
+
+namespace CFKit::XRN::Version1
+{
+ using namespace NeOS;
+
+ Ref<GUIDSequence*> cf_make_sequence(const ArrayList<UInt32>& seq);
+ ErrorOr<Ref<NeOS::KString>> cf_try_guid_to_string(Ref<GUIDSequence*>& guid);
+} // namespace CFKit::XRN::Version1
diff --git a/dev/kernel/CFKit/GUIDWrapper.h b/dev/kernel/CFKit/GUIDWrapper.h
new file mode 100644
index 00000000..3b7ada6d
--- /dev/null
+++ b/dev/kernel/CFKit/GUIDWrapper.h
@@ -0,0 +1,60 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <NewKit/Defines.h>
+#include <NewKit/Ref.h>
+#include <NewKit/Stream.h>
+
+/* GUID for C++ Components */
+
+#define kXRNNil "@{........-....-M...-N...-............}"
+
+// eXtensible Resource Information
+namespace CFKit::XRN
+{
+ using namespace NeOS;
+
+ union GUIDSequence {
+ alignas(8) UShort u8[16];
+ alignas(8) UShort u16[8];
+ alignas(8) UInt u32[4];
+ alignas(8) ULong u64[2];
+
+ struct
+ {
+ alignas(8) UInt fMs1;
+ UShort fMs2;
+ UShort fMs3;
+ UChar fMs4[8];
+ };
+ };
+
+ class GUID final
+ {
+ public:
+ explicit GUID() = default;
+ ~GUID() = default;
+
+ public:
+ GUID& operator=(const GUID&) = default;
+ GUID(const GUID&) = default;
+
+ public:
+ GUIDSequence& operator->() noexcept
+ {
+ return fUUID;
+ }
+ GUIDSequence& Leak() noexcept
+ {
+ return fUUID;
+ }
+
+ private:
+ GUIDSequence fUUID;
+ };
+} // namespace CFKit::XRN
diff --git a/dev/kernel/CFKit/Property.h b/dev/kernel/CFKit/Property.h
new file mode 100644
index 00000000..e4588ad6
--- /dev/null
+++ b/dev/kernel/CFKit/Property.h
@@ -0,0 +1,56 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#ifndef CFKIT_PROPS_H
+#define CFKIT_PROPS_H
+
+#include <NewKit/Array.h>
+#include <NewKit/Defines.h>
+#include <NewKit/Function.h>
+#include <NewKit/KString.h>
+#include <CFKit/GUIDWrapper.h>
+
+#define kMaxPropLen (256U)
+
+namespace CFKit
+{
+ using namespace NeOS;
+
+ /// @brief handle to anything (number, ptr, string...)
+ using PropertyId = UIntPtr;
+
+ /// @brief Kernel property class.
+ /// @example /prop/smp_max or /prop/kern_ver
+ class Property
+ {
+ public:
+ Property();
+ virtual ~Property();
+
+ public:
+ Property& operator=(const Property&) = default;
+ Property(const Property&) = default;
+
+ BOOL StringEquals(KString& name);
+ PropertyId& GetValue();
+ KString& GetKey();
+
+ private:
+ KString fName{kMaxPropLen};
+ PropertyId fValue{0UL};
+ Ref<XRN::GUID> fGUID{};
+ };
+
+ template <SizeT N>
+ using PropertyArray = Array<Property, N>;
+} // namespace CFKit
+
+namespace NeOS
+{
+ using namespace CFKit;
+}
+
+#endif // !CFKIT_PROPS_H
diff --git a/dev/kernel/CFKit/Utils.h b/dev/kernel/CFKit/Utils.h
new file mode 100644
index 00000000..b8f16164
--- /dev/null
+++ b/dev/kernel/CFKit/Utils.h
@@ -0,0 +1,55 @@
+#ifndef CFKIT_UTILS_H
+#define CFKIT_UTILS_H
+
+#include <KernelKit/PE.h>
+#include <KernelKit/MSDOS.h>
+
+namespace CFKit
+{
+ using namespace NeOS;
+
+ /// @brief Finds the PE header inside the blob.
+ inline auto ldr_find_exec_header(DosHeaderPtr ptrDos) -> LDR_EXEC_HEADER_PTR
+ {
+ if (!ptrDos)
+ return nullptr;
+
+ if (ptrDos->eMagic[0] != kMagMz0)
+ return nullptr;
+
+ if (ptrDos->eMagic[1] != kMagMz1)
+ return nullptr;
+
+ return (LDR_EXEC_HEADER_PTR)(VoidPtr)(&ptrDos->eLfanew + 1);
+ }
+
+ /// @brief Finds the PE optional header inside the blob.
+ inline auto ldr_find_opt_exec_header(DosHeaderPtr ptrDos) -> LDR_OPTIONAL_HEADER_PTR
+ {
+ if (!ptrDos)
+ return nullptr;
+
+ auto exec = ldr_find_exec_header(ptrDos);
+
+ if (!exec)
+ return nullptr;
+
+ return (LDR_OPTIONAL_HEADER_PTR)(VoidPtr)(&exec->Characteristics + 1);
+ }
+
+ /// @brief Finds the PE header inside the blob.
+ /// @note overloaded function.
+ inline auto ldr_find_exec_header(const Char* ptrDos) -> LDR_EXEC_HEADER_PTR
+ {
+ return ldr_find_exec_header((DosHeaderPtr)ptrDos);
+ }
+
+ /// @brief Finds the PE header inside the blob.
+ /// @note overloaded function.
+ inline auto ldr_find_opt_exec_header(const Char* ptrDos) -> LDR_OPTIONAL_HEADER_PTR
+ {
+ return ldr_find_opt_exec_header((DosHeaderPtr)ptrDos);
+ }
+} // namespace CFKit
+
+#endif // ifndef CFKIT_UTILS_H