moon-driver-utils 0.1.0

Windows Kernel Utils
use core::arch::asm;

use wdk_sys::{
    ntddk::{KeLowerIrql, KfRaiseIrql},
    DISPATCH_LEVEL, KIRQL,
};

pub fn wpoff() -> KIRQL {
    unsafe {
        let irql = KfRaiseIrql(DISPATCH_LEVEL as _);
        asm! {
            "push rax",
            "mov rax,cr0",
            "and rax,0xfffffffffffeffff",
            "mov cr0,rax",
            "pop rax",

            "cli",
        };
        irql
    }
}

pub fn wpon(irql: KIRQL) {
    unsafe {
        asm! {
            "mov rax,cr0",
            "or rax,0x10000",
            "sti",
            "mov cr0,rax",
        };
        KeLowerIrql(irql);
    }
}