summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorHarry Fei <[email protected]>2018-09-30 17:53:14 +0800
committerHarry Fei <[email protected]>2018-10-08 16:47:01 +0800
commit7dc14791e3e1e0e7cac4b3c2cbb6ea25b5fa2fa5 (patch)
tree038239674bf2f5daa2a98ff6871fe5df1dd615b5 /src/lib.rs
downloadwin-kmd-alloc-rebase.tar.xz
win-kmd-alloc-rebase.zip
init commitrebase
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..678735d
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,20 @@
+#![no_std]
+
+mod alloc_sys;
+
+use self::alloc_sys::*;
+use core::alloc::{GlobalAlloc, Layout};
+
+const KMRS_TAG: u32 = 0x4B4D5253; // 'KMRS'
+
+pub struct KernelAlloc;
+
+unsafe impl GlobalAlloc for KernelAlloc {
+ unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
+ ExAllocatePoolWithTag(POOL_TYPE::PagedPool, layout.size(), KMRS_TAG)
+ }
+
+ unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
+ ExFreePoolWithTag(ptr, KMRS_TAG);
+ }
+}