diff --git a/Builds/Platform/EFI/MiniVisorDxe.inf b/Builds/Platform/EFI/MiniVisorDxe.inf
index 3af4fb7..7b5e6c3 100644
--- a/Builds/Platform/EFI/MiniVisorDxe.inf
+++ b/Builds/Platform/EFI/MiniVisorDxe.inf
@@ -39,8 +39,8 @@
../../../Sources/MiniVisor.c
../../../Sources/MiniVisor.h
../../../Sources/Platform.h
- ../../../Sources/Utils.c
- ../../../Sources/Utils.h
+ ../../../Sources/Ia32Utils.c
+ ../../../Sources/Ia32Utils.h
../../../Sources/Ia32.h
../../../Sources/Asm.asm
../../../Sources/Asm.h
diff --git a/Sources/ExtendedPageTables.c b/Sources/ExtendedPageTables.c
index 35ffaa7..dd2ffbf 100644
--- a/Sources/ExtendedPageTables.c
+++ b/Sources/ExtendedPageTables.c
@@ -14,7 +14,7 @@
#include "Platform.h"
#include "Logger.h"
#include "MemoryType.h"
-#include "Utils.h"
+#include "Ia32Utils.h"
//
// The set of EPT paging structure entries involved with to translate the GPA.
diff --git a/Sources/HostUtils.c b/Sources/HostUtils.c
index db0dfc6..f3daf84 100644
--- a/Sources/HostUtils.c
+++ b/Sources/HostUtils.c
@@ -10,7 +10,7 @@
#include "HostUtils.h"
#include "Logger.h"
#include "ExtendedPageTables.h"
-#include "Utils.h"
+#include "Ia32Utils.h"
#include "MemoryAccess.h"
/*!
diff --git a/Sources/Utils.c b/Sources/Ia32Utils.c
similarity index 99%
rename from Sources/Utils.c
rename to Sources/Ia32Utils.c
index 43ebea2..c62de2e 100644
--- a/Sources/Utils.c
+++ b/Sources/Ia32Utils.c
@@ -1,5 +1,5 @@
/*!
- @file Utils.c
+ @file Ia32Utils.c
@brief Utility functions that could be used by both the host and non-host.
@@ -7,7 +7,7 @@
@copyright Copyright (c) 2020 - , Satoshi Tanda. All rights reserved.
*/
-#include "Utils.h"
+#include "Ia32Utils.h"
#include "Asm.h"
#include "Logger.h"
diff --git a/Sources/Utils.h b/Sources/Ia32Utils.h
similarity index 98%
rename from Sources/Utils.h
rename to Sources/Ia32Utils.h
index 56709ed..6088bfe 100644
--- a/Sources/Utils.h
+++ b/Sources/Ia32Utils.h
@@ -1,5 +1,5 @@
/*!
- @file Utils.h
+ @file Ia32Utils.h
@brief Utility functions that could be used by both the host and non-host.
diff --git a/Sources/MemoryAccess.c b/Sources/MemoryAccess.c
index 1e1fe46..8537b4d 100644
--- a/Sources/MemoryAccess.c
+++ b/Sources/MemoryAccess.c
@@ -87,7 +87,7 @@ Exit:
paging structures of the returned entry.
@return The pointer to the final paging structure when the virtual address
- is not mapped in the physical address. If not, returns the pointer to the
+ is mapped in the physical address. If not, returns the pointer to the
paging structure entry that indicated that the page is not present (ie,
the Present bit is cleared).
*/
diff --git a/Sources/MiniVisor.c b/Sources/MiniVisor.c
index ef36ff2..68c349f 100644
--- a/Sources/MiniVisor.c
+++ b/Sources/MiniVisor.c
@@ -17,7 +17,7 @@
#include "Public.h"
#include "MemoryType.h"
#include "HostNesting.h"
-#include "Utils.h"
+#include "Ia32Utils.h"
#include "MemoryAccess.h"
//
diff --git a/Sources/MiniVisor.vcxproj b/Sources/MiniVisor.vcxproj
index 9f97059..331f13b 100644
--- a/Sources/MiniVisor.vcxproj
+++ b/Sources/MiniVisor.vcxproj
@@ -133,7 +133,7 @@
-
+
@@ -165,7 +165,7 @@
true
-
+
diff --git a/Sources/MiniVisor.vcxproj.filters b/Sources/MiniVisor.vcxproj.filters
index 8897338..7bf2444 100644
--- a/Sources/MiniVisor.vcxproj.filters
+++ b/Sources/MiniVisor.vcxproj.filters
@@ -66,9 +66,6 @@
Header Files
-
- Header Files
-
Header Files
@@ -117,6 +114,9 @@
Header Files
+
+ Header Files
+
@@ -134,9 +134,6 @@
Source Files
-
- Source Files
-
Source Files
@@ -167,6 +164,9 @@
Source Files
+
+ Source Files
+
diff --git a/Sources/Platform/EFI/EfiCommon.h b/Sources/Platform/EFI/EfiCommon.h
index 47ece16..ee8e911 100644
--- a/Sources/Platform/EFI/EfiCommon.h
+++ b/Sources/Platform/EFI/EfiCommon.h
@@ -67,6 +67,7 @@ unsigned __int64 __readcr0(void);
unsigned __int64 __readcr2(void);
unsigned __int64 __readcr3(void);
unsigned __int64 __readcr4(void);
+unsigned __int64 __readcr8(void);
unsigned __int64 __readdr(unsigned int);
unsigned __int64 __readeflags(void);
unsigned __int64 __readmsr(unsigned long);
@@ -80,6 +81,7 @@ unsigned char __vmx_vmwrite(unsigned __int64, unsigned __int64);
unsigned long __segmentlimit(unsigned long);
void __cpuid(int[4], int);
void __cpuidex(int[4], int, int);
+void __debugbreak(void);
void __invlpg(void *);
void __lidt(void *);
void __sidt(void *);
@@ -92,21 +94,31 @@ void __writecr3(unsigned __int64);
void __writecr4(unsigned __int64);
void __writedr(unsigned int, unsigned __int64);
void __writemsr(unsigned long, unsigned __int64);
+void _disable(void);
+void _enable(void);
void _lgdt(void *);
void _sgdt(void *);
void _xsetbv(unsigned int, unsigned __int64);
+//
+// Required. Otherwise, link error occurs.
+//
+#pragma intrinsic(_disable)
+#pragma intrinsic(_enable)
+
//
// MSVC compatibility macro definitions.
//
#define __drv_aliasesMem
#define __drv_allocatesMem(x)
#define __drv_freesMem(x)
+#define __drv_strictTypeMatch(x)
#define _Acquires_lock_(x)
#define _In_
#define _In_opt_
#define _In_range_(x, y)
#define _In_reads_bytes_(x)
+#define _In_z_
#define _Inout_
#define _IRQL_raises_(x)
#define _IRQL_requires_max_(x)
diff --git a/Sources/Platform/EFI/EfiHostInitialization.c b/Sources/Platform/EFI/EfiHostInitialization.c
index 3d6e202..6c3c671 100644
--- a/Sources/Platform/EFI/EfiHostInitialization.c
+++ b/Sources/Platform/EFI/EfiHostInitialization.c
@@ -33,7 +33,7 @@
#include "EfiHostInitialization.h"
#include "EfiAsm.h"
#include "EfiPlatform.h"
-#include "../../Utils.h"
+#include "../../Ia32Utils.h"
#include "EfiLogger.h"
//