47 if ((pListHook->Msr == Msr) && (!pListHook->Disabled))
49 bWasEnabled = pListHook->WasEnabled;
73 ERROR(
"[ERROR] IntEnableMsrExit failed: 0x%08x\n", status);
162 Hook->Disabled =
TRUE;
167 if ((Hook->Msr == pHook->Msr) && (pHook != Hook) && (!pHook->Disabled))
175 bDisable = !Hook->WasEnabled;
184 ERROR(
"[ERROR] IntDisableMsrExit failed: 0x%08x\n", status);
196 ERROR(
"[ERROR] IntHookMsrDeleteHook failed: 0x%08x\n", status);
217 ERROR(
"[ERROR] IntHookMsrRemoveHook failed: 0x%08x\n", status);
252 ERROR(
"[ERROR] IntHookMsrDeleteHook failed: 0x%08x\n", status);
#define INT_STATUS_SUCCESS
PFUNC_MsrReadWriteHookCallback Callback
The callback.
INTSTATUS IntHookMsrUninit(void)
Uninit the model specific register hooks state.
#define INT_SUCCESS(Status)
#define HpAllocWithTag(Len, Tag)
int INTSTATUS
The status data type.
LIST_ENTRY Link
List entry element.
INT64 HooksCount
Total number of MSR hooks.
INTSTATUS IntEnableMsrExit(DWORD Msr, BOOLEAN *OldValue)
MSR_HOOK_STATE * MsrHooks
MSR hook state.
static void IntHookMsrRemoveAllHooks(void)
Remove all model specific register write hooks.
#define INT_STATUS_NOT_INITIALIZED
static BOOLEAN RemoveEntryList(LIST_ENTRY *Entry)
CPU_STATE State
The state of this VCPU. Describes what action is the VCPU currently doing.
#define HpFreeAndNullWithTag(Add, Tag)
static void InsertTailList(LIST_ENTRY *ListHead, LIST_ENTRY *Entry)
static INTSTATUS IntEnableMsrNotifications(void)
LIST_HEAD MsrHooksList
The list of MSR hooks.
static INTSTATUS IntHookMsrDeleteHook(HOOK_MSR *Hook)
Permanently delete a model specific register hook.
static void InitializeListHead(LIST_ENTRY *ListHead)
INTSTATUS IntHookMsrRemoveHook(HOOK_MSR *Hook)
Remove a model specific register hook.
INTSTATUS IntHookMsrSetHook(DWORD Msr, DWORD Flags, PFUNC_MsrReadWriteHookCallback Callback, void *Context, void **Hook)
Set a model-specific register write hook.
BOOLEAN WasEnabled
True if MSR exiting for this MSR was already enabled.
GUEST_STATE gGuest
The current guest state.
INTSTATUS(* PFUNC_MsrReadWriteHookCallback)(DWORD Msr, DWORD Flags, INTRO_ACTION *Action, void *Context, QWORD OriginalValue, QWORD *NewValue)
Model specific register access callback.
#define INT_STATUS_NOT_INITIALIZED_HINT
#define INT_STATUS_INVALID_PARAMETER_1
VCPU_STATE * gVcpu
The state of the current VCPU.
#define list_for_each(_head, _struct_type, _var)
DWORD Flags
Access flags. See IG_MSR_HOOK_TYPE.
INTSTATUS IntHookMsrInit(void)
Initialize the model specific registers hook state.
void * Context
Optional context.
INTSTATUS IntHookMsrCommit(void)
Commit the model specific register hooks.
INTSTATUS IntDisableMsrExit(DWORD Msr, BOOLEAN *OldValue)
#define INT_STATUS_INSUFFICIENT_RESOURCES
#define INT_STATUS_INVALID_PARAMETER_3
static INTSTATUS IntDisableMsrNotifications(void)