Handle NMI and exception vm-exits. 
  259{
  260    
  261    
  262    
  263    
  264    
  265    
  266    
  267    
  268 
  269    switch (InterruptExit.Vector)
  270    {
  272 
  273        
  274        
  275        
  276        {
  279 
  280            __vmx_vmread(VMCS_GUEST_RIP, &GuestRip);
  283            {
  285                {
  286                    
  287                    
  288                    
  290 
  291                    
  292                    
  293                    
  295                }
  296            }
  297        }
  298 
  299        break;
  300 
  302 
  303        
  304        
  305        
  307        {
  308            
  309            
  310            
  312        }
  313 
  314        break;
  315 
  317 
  318        
  319        
  320        
  322 
  323        break;
  324 
  326 
  328        {
  329            
  330            
  331            
  333        }
  334 
  335        break;
  336 
  338 
  339        if (VCpu->EnableExternalInterruptsOnContinue ||
  340            VCpu->EnableExternalInterruptsOnContinueMtf ||
  341            VCpu->RegisterBreakOnMtf)
  342        {
  343            
  344            
  345            
  346        }
  347        else
  348        {
  349            
  350            
  351            
  353        }
  354 
  355        break;
  356 
  357    default:
  358 
  359        
  360        
  361        
  363 
  364        break;
  365    }
  366}
#define NULL_ZERO
Definition BasicTypes.h:51
unsigned char BYTE
Definition BasicTypes.h:24
#define NULL64_ZERO
Definition BasicTypes.h:52
unsigned __int64 UINT64
Definition BasicTypes.h:21
BOOLEAN DebuggingCallbackHandleDebugBreakpointException(UINT32 CoreId)
routine callback to handle debug breakpoint exception
Definition Callback.c:360
BOOLEAN DebuggingCallbackHandleBreakpointException(UINT32 CoreId)
routine callback to handle breakpoint exception
Definition Callback.c:339
_Use_decl_annotations_ BOOLEAN SyscallHookHandleUD(VIRTUAL_MACHINE_STATE *VCpu)
Detect whether the #UD was because of Syscall or Sysret or not.
Definition EferHook.c:228
BOOLEAN EptCheckAndHandleBreakpoint(VIRTUAL_MACHINE_STATE *VCpu)
Check if the breakpoint vm-exit relates to EPT hook or not.
Definition Ept.c:1211
VOID EventInjectInterruptOrException(_In_ VMEXIT_INTERRUPT_INFORMATION InterruptExit)
re-inject interrupt or exception to the guest
Definition Events.c:155
VOID EventInjectUndefinedOpcode(VIRTUAL_MACHINE_STATE *VCpu)
Inject #UD to the guest (Invalid Opcode - Undefined Opcode)
Definition Events.c:79
VOID EventInjectBreakpoint()
Inject #BP to the guest (Event Injection)
Definition Events.c:46
VOID HvSuppressRipIncrement(VIRTUAL_MACHINE_STATE *VCpu)
Suppress the incrementation of RIP.
Definition Hv.c:324
VOID IdtEmulationHandlePageFaults(_Inout_ VIRTUAL_MACHINE_STATE *VCpu, _In_ VMEXIT_INTERRUPT_INFORMATION InterruptExit)
Handle Page-fault exception bitmap VM-exits.
Definition IdtEmulation.c:209
_Use_decl_annotations_ BOOLEAN MemoryMapperReadMemorySafe(UINT64 VaAddressToRead, PVOID BufferToSaveMemory, SIZE_T SizeToRead)
Read memory safely by mapping the buffer (It's a wrapper)
Definition MemoryMapper.c:1101