KiTrackSystemCallEntry

NTSTATUS __fastcall KiTrackSystemCallEntry(VOID *SysCallAddress, INT64 a2, INT64 a3, INT64 a4){
  int v6; 
  int v8; 
  INT64 v9; 
  int v10; 
  NTSTATUS v11; 
  INT64 v12; 

  v6 = a3;
  LOBYTE(v8) = KeIsTraceCallbackAllowed(KeGetCurrentThread()->PreviousMode);
  if( v8 )
  {
    v9 = *(_QWORD *)KiSystemServiceTraceCallbackTable;
    if( (*(_BYTE *)(KiSystemServiceTraceCallbackTable + 8) & 1) != 0 && v9 )
      v9 ^= KiSystemServiceTraceCallbackTable;
    v10 = *(_BYTE *)(KiSystemServiceTraceCallbackTable + 8) & 1;
    while( v9 )
    {
      v11 = KiSystemServiceTraceTableCompareFunction((UINT64)SysCallAddress, v9);
      if( v11 >= 0 )
      {
        if( v11 <= 0 )
          break;
        v12 = *(_QWORD *)(v9 + 8);
      }
      else
      {
        v12 = *(_QWORD *)v9;
      }
      if( v10 && v12 )
        v9 ^= v12;
      else
        v9 = v12;
    }
    if( v9 && *(_BYTE *)(v9 + 40) && KiDynamicTraceEnabled )
    {
      _InterlockedIncrement(&KiSystemServiceTraceCallbacksActive);
      if( *(_BYTE *)(v9 + 40) )
        ((void(__fastcall *)(_QWORD, _QWORD, _QWORD, INT64, int, INT64))qword_140CFBBA0)(
          *(_QWORD *)(v9 + 24),
          *(_QWORD *)(v9 + 48),
          *(unsigned int *)(v9 + 32),
          a2,
          v6,
          a4);
      _InterlockedDecrement(&KiSystemServiceTraceCallbacksActive);
    }
  }
  else
  {
    LODWORD(v9) = 0;
  }
  return v9;
}

Referenced by:

KiSystemCall64