KiDebugTrapOrFault
VOID __fastcall KiDebugTrapOrFault(INT64 a1, INT64 a2, INT64 a3, UINT64 a4, INT64 a5, INT64 a6, INT64 a7, INT64 a8){
bool v8;
__int64 v9;
void *retaddr;
__int16 v12;
INT64 v13;
void *v14;
INT64 v15;
v8 = (v12 & 1) == 0;
if( (v12 & 1) != 0 )
{
LABEL_6:
if( v8 || (KiKvaShadow & 1) != 0 )
{
_mm_lfence();
}
else
{
__swapgs();
_mm_lfence();
__swapgs();
}
KxDebugTrapOrFault(v15, v13, a3, a4);
}
else
{
v9 = 8i64;
while( retaddr != (void *)KiDebugTraps[v9 - 1] )
{
if( !--v9 )
{
v8 = 1;
goto LABEL_6;
}
}
if( (KiCpuTracingFlags & 2) != 0 )
__writemsr(0x1D9u, __readmsr(0x1D9u) | 1);
if( (KiKvaShadow & 1) == 0 )
__iretq(retaddr, v12, v13, v14, v15);
KiKernelIstExit(a1, a2, a3, a4, a5, a6, a7, a8);
}
}Referenced by:
KiDebugTrapOrFaultShadow