Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ionescu007/SimpleVisor.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'shv_x.h')
-rw-r--r--shv_x.h80
1 files changed, 68 insertions, 12 deletions
diff --git a/shv_x.h b/shv_x.h
index 56b3c31..624b978 100644
--- a/shv_x.h
+++ b/shv_x.h
@@ -23,26 +23,85 @@ Environment:
#pragma once
+#include "vmx.h"
+
#define SHV_STATUS_SUCCESS 0
#define SHV_STATUS_NOT_AVAILABLE -1
#define SHV_STATUS_NO_RESOURCES -2
#define SHV_STATUS_NOT_PRESENT -3
-typedef struct _SHV_CALLBACK_CONTEXT
-{
- UINT64 Cr3;
- volatile long InitCount;
- INT32 FailedCpu;
- INT32 FailureStatus;
-} SHV_CALLBACK_CONTEXT, *PSHV_CALLBACK_CONTEXT;
+struct _SHV_CALLBACK_CONTEXT;
typedef
void
SHV_CPU_CALLBACK (
- _In_ PSHV_CALLBACK_CONTEXT Context
+ struct _SHV_CALLBACK_CONTEXT* Context
);
typedef SHV_CPU_CALLBACK *PSHV_CPU_CALLBACK;
+typedef struct _SHV_SPECIAL_REGISTERS
+{
+ UINT64 Cr0;
+ UINT64 Cr3;
+ UINT64 Cr4;
+ UINT64 MsrGsBase;
+ UINT16 Tr;
+ UINT16 Ldtr;
+ UINT64 DebugControl;
+ UINT64 KernelDr7;
+ KDESCRIPTOR Idtr;
+ KDESCRIPTOR Gdtr;
+} SHV_SPECIAL_REGISTERS, *PSHV_SPECIAL_REGISTERS;
+
+typedef struct _SHV_VP_DATA
+{
+ union
+ {
+ DECLSPEC_ALIGN(PAGE_SIZE) UINT8 ShvStackLimit[KERNEL_STACK_SIZE];
+ struct
+ {
+ SHV_SPECIAL_REGISTERS SpecialRegisters;
+ CONTEXT ContextFrame;
+ UINT64 SystemDirectoryTableBase;
+ LARGE_INTEGER MsrData[17];
+ UINT64 VmxOnPhysicalAddress;
+ UINT64 VmcsPhysicalAddress;
+ UINT64 MsrBitmapPhysicalAddress;
+ UINT64 EptPml4PhysicalAddress;
+ UINT32 EptControls;
+ };
+ };
+
+ DECLSPEC_ALIGN(PAGE_SIZE) UINT8 MsrBitmap[PAGE_SIZE];
+ DECLSPEC_ALIGN(PAGE_SIZE) VMX_EPML4E Epml4[PML4E_ENTRY_COUNT];
+ DECLSPEC_ALIGN(PAGE_SIZE) VMX_HUGE_PDPTE Epdpt[PDPTE_ENTRY_COUNT];
+
+ DECLSPEC_ALIGN(PAGE_SIZE) VMX_VMCS VmxOn;
+ DECLSPEC_ALIGN(PAGE_SIZE) VMX_VMCS Vmcs;
+} SHV_VP_DATA, *PSHV_VP_DATA;
+
+C_ASSERT(sizeof(SHV_VP_DATA) == (KERNEL_STACK_SIZE + 5 * PAGE_SIZE));
+
+VOID
+_sldt (
+ _In_ UINT16* Ldtr
+ );
+
+VOID
+_ltr (
+ _In_ UINT16 Tr
+ );
+
+VOID
+_str (
+ _In_ UINT16* Tr
+ );
+
+VOID
+__lgdt (
+ _In_ VOID* Gdtr
+ );
+
INT32
ShvLoad (
VOID
@@ -51,7 +110,4 @@ ShvLoad (
VOID
ShvUnload (
VOID
- );
-
-SHV_CPU_CALLBACK ShvVpLoadCallback;
-SHV_CPU_CALLBACK ShvVpUnloadCallback;
+ ); \ No newline at end of file