summaryrefslogtreecommitdiffhomepage
path: root/Private/DriverKit
diff options
context:
space:
mode:
Diffstat (limited to 'Private/DriverKit')
-rw-r--r--Private/DriverKit/KernelStdCxx.cc24
-rw-r--r--Private/DriverKit/KernelString.c11
-rw-r--r--Private/DriverKit/KernelString.h3
3 files changed, 38 insertions, 0 deletions
diff --git a/Private/DriverKit/KernelStdCxx.cc b/Private/DriverKit/KernelStdCxx.cc
new file mode 100644
index 00000000..79d41a72
--- /dev/null
+++ b/Private/DriverKit/KernelStdCxx.cc
@@ -0,0 +1,24 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ Purpose: Driver C++ Definitions.
+
+------------------------------------------- */
+
+#include <DriverKit/KernelStd.h>
+
+void* operator new(size_t sz) {
+ if (!sz) ++sz;
+
+ auto ptr = kernelCall("NewKernelHeap", 1, sz);
+ kernelCall("KernelHeapProtect", 1, ptr);
+
+ return ptr;
+}
+
+void operator delete(void* ptr) noexcept {
+ if (!ptr) return;
+
+ kernelCall("DeleteKernelHeap", 1,ptr);
+}
diff --git a/Private/DriverKit/KernelString.c b/Private/DriverKit/KernelString.c
index 7c129dd4..0bb45b16 100644
--- a/Private/DriverKit/KernelString.c
+++ b/Private/DriverKit/KernelString.c
@@ -17,3 +17,14 @@ DK_EXTERN size_t kernelStringLength(const char* str) {
return index;
}
+
+DK_EXTERN int kernelStringCopy(char* dst, const char* src, size_t len) {
+ size_t index = 0;
+
+ while (index != len) {
+ dst[index] = src[index];
+ ++index;
+ }
+
+ return index;
+}
diff --git a/Private/DriverKit/KernelString.h b/Private/DriverKit/KernelString.h
index d1b8ac93..8e189d26 100644
--- a/Private/DriverKit/KernelString.h
+++ b/Private/DriverKit/KernelString.h
@@ -10,4 +10,7 @@
#include <DriverKit/KernelStd.h>
+/// @brief DriverKit equivalent of POSIX's string.h.
+
DK_EXTERN size_t kernelStringLength(const char* str);
+DK_EXTERN int kernelStringCopy(char* dst, const char* src, size_t len);