KiMonitorCacheErrata

VOID __stdcall KiMonitorCacheErrata(KTRAP_FRAME *TrapFrame, PVOID Context){
  struct _KPRCB *CurrentPrcb; 
  _DWORD *v3; 
  __int64 v4; 
  volatile signed __int32 *v5; 
  unsigned __int64 v6; 
  INT64 v7; 
  __int64 v8; 
  unsigned __int8 CurrentIrql; 
  const UINT64 *v10; 
  UINT64 v11; 
  _IMAGE_RESOURCE_DATA_ENTRY **v12; 
  INT64 v13; 
  BYTE v15; 
  char v16; 
  CurrentPrcb = KeGetCurrentPrcb();
  v3 = (_DWORD *)KiCacheErrataMonitor;
  v15 = 0;
  v16 = 0;
  v4 = KiCacheErrataMonitor + 16 * (*((unsigned int *)CurrentPrcb + 9) + 16i64);
  _InterlockedExchange64((volatile __int64 *)v4, -1i64);
  *(_DWORD *)(v4 + 8) -= KiSanitizedProfileInterval;
  if( *(int *)(v4 + 8) <= 0 )
  {
    v5 = &v3[4 * *(unsigned int *)(v4 + 12) + 64];
    if( (volatile signed __int32 *)v4 != v5 && !_interlockedbittestandreset64(v5, *((unsigned int *)CurrentPrcb + 9)) )
    {
      v6 = 0i64;
      v7 = (INT64)*(&KiProcessorBlock + *(unsigned int *)(v4 + 12));
      v8 = *(_QWORD *)(v7 + 8);
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(0xFui64);
      if( KiTryToAcquirePrcbLock(v7, &v15) )
      {
        v13 = *(_QWORD *)(v7 + 8);
        if( KiTryToAcquireThreadLock(v13, &v16) )
        {
          v6 = *(_QWORD *)(v13 + 184);
          if( (__int64 *)v6 != KiInitialProcess )
            v6 &= -(__int64)(ObReferenceObjectSafeWithTag(*(PVOID *)(v13 + 184), 0x61727245ui64) != 0);
          KiReleaseThreadLockSafe(v13);
        }
        _InterlockedAnd64((volatile signed __int64 *)(v7 + 48), 0i64);
        v10 = (const UINT64 *)*((_QWORD *)KeGetCurrentPrcb() + 4247);
      }
      if( v8 == *(_QWORD *)(v7 + 8) )
        MmReadProcessPageTables((VOID *)v7, v10, v11, v12);
      __writecr8(CurrentIrql);
      if( v6 )
      {
        if( (__int64 *)v6 != KiInitialProcess )
          ObDereferenceObjectDeferDeleteWithTag((PVOID)v6, 0x61727245ui64);
      }
    }
    *(_DWORD *)(v4 + 8) = *v3;
    *(_DWORD *)(v4 + 12) = (*(_DWORD *)(v4 + 12) + 1) % (unsigned int)KeNumberProcessors_0;
  }
}

Referenced by:

No references.