diff options
Diffstat (limited to 'crates/windows-kernel-sys/src/wrapper_intrin.c')
| -rw-r--r-- | crates/windows-kernel-sys/src/wrapper_intrin.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/crates/windows-kernel-sys/src/wrapper_intrin.c b/crates/windows-kernel-sys/src/wrapper_intrin.c new file mode 100644 index 0000000..5c17cf9 --- /dev/null +++ b/crates/windows-kernel-sys/src/wrapper_intrin.c @@ -0,0 +1,61 @@ +#define _AMD64_ + +#include "wdm.h" +#include "intrin.h" + +unsigned __int64 read_cr3(void) { + return __readcr3(); +} + +void write_cr3(unsigned __int64 Value) { + __writecr3(Value); +} + +unsigned __int64 read_msr( + unsigned long Register +) { + return __readmsr(Register); +} + +NTSTATUS read_msr_safe( + unsigned long Register, + unsigned __int64 *Value +) { + if (!Value) { + return STATUS_INVALID_PARAMETER; + } + + __try { + *Value = __readmsr(Register); + } __except(EXCEPTION_EXECUTE_HANDLER) { + return GetExceptionCode(); + } + + return STATUS_SUCCESS; +} + +void write_msr( + unsigned long Register, + unsigned __int64 Value +) { + __writemsr(Register, Value); +} + +NTSTATUS write_msr_safe( + unsigned long Register, + unsigned __int64 Value +) { + __try { + __writemsr(Register, Value); + } __except(EXCEPTION_EXECUTE_HANDLER) { + return GetExceptionCode(); + } + + return STATUS_SUCCESS; +} + +void invlpg( + void *Address +) { + __invlpg(Address); +} |