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