blob: 5c17cf94520359c5eec311f574fc286d5950fea0 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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);
}
|