summaryrefslogtreecommitdiff
path: root/crates/windows-kernel-sys/src/wrapper_intrin.c
diff options
context:
space:
mode:
Diffstat (limited to 'crates/windows-kernel-sys/src/wrapper_intrin.c')
-rw-r--r--crates/windows-kernel-sys/src/wrapper_intrin.c61
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);
+}