From c22b255d6f91d7b2420fe20038cefb2b116821bf Mon Sep 17 00:00:00 2001 From: Harry Fei Date: Sun, 30 Sep 2018 17:53:14 +0800 Subject: init commit --- src/alloc_sys.rs | 12 ++++++++++++ src/lib.rs | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/alloc_sys.rs create mode 100644 src/lib.rs (limited to 'src') diff --git a/src/alloc_sys.rs b/src/alloc_sys.rs new file mode 100644 index 0000000..5d46f02 --- /dev/null +++ b/src/alloc_sys.rs @@ -0,0 +1,12 @@ +#[repr(C)] +pub enum POOL_TYPE { + PagedPool, +} + +pub type PVOID = *mut u8; + +#[link(name = "ntoskrnl")] +extern "system" { + pub fn ExAllocatePoolWithTag(PoolType: POOL_TYPE, NumberOfBytes: usize, Tag: u32) -> PVOID; + pub fn ExFreePoolWithTag(P: PVOID, Tag: u32); +} 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); + } +} -- cgit v1.2.3