MiSynchronizeSystemVa

NTSTATUS __stdcall MiSynchronizeSystemVa(INT64 a1, UINT64 a2, INT64 a3, INT64 a4, INT64 a5){
  int v5; 
  INT64 v8; 
  char v9; 
  unsigned __int8 v10; 
  volatile __int32 *v11; 
  UINT8 v12; 
  int v13; 
  unsigned __int8 CurrentIrql; 
  UINT64 v15; 
  INT64 *v16; 
  NTSTATUS v17; 
  VOID *v18; 
  UINT64 v19; 
  _MMPTE *PteBase; 
  INT64 *v21; 
  __int64 v23; 
  __int64 v24; 
  __int64 v25; 
  unsigned __int64 v26; 
  _MMSUPPORT_INSTANCE *AnyMultiplexedVm; 
  _MMPTE *v28; 
  _MMSUPPORT_SHARED *SharedVm; 
  char v30; 
  INT64 *v31; 
  UINT64 v32[2]; 
  __int128 v33; 
  INT64 v34; 

  v5 = 0;
  LODWORD(v34) = 0;
  *(_OWORD *)v32 = 0i64;
  v33 = 0i64;
  if( !(_DWORD)a3 )
    return 0;
  v8 = a5;
  *(_DWORD *)(a5 + 16) = 0;
  v9 = *(_BYTE *)(v8 + 37);
  *(_QWORD *)(v8 + 24) = a1;
  if( (_DWORD)a4 )
  {
    *(_BYTE *)(v8 + 37) = v9 | 1;
    SharedVm = MiGetSharedVm((_MMSUPPORT_INSTANCE *)a1);
    v30 = ExAcquireSpinLockExclusive((INT64 *)&SharedVm->WorkingSetLock);
    SharedVm->GoodCitizenWaiting = 0;
    *(_BYTE *)(v8 + 36) = v30;
    MiFillPteHierarchy(a2, v32);
    if( MiPageTableStillExists((INT64)v32, &v34) )
    {
      if( (_DWORD)v34 )
      {
        if( (*(_DWORD *)(v8 + 4) & 4) == 0 )
          goto LABEL_37;
        *(_DWORD *)(v8 + 16) = v34;
      }
LABEL_16:
      if( (*(_BYTE *)(a1 + 184) & 7) != 2 )
        return 1;
      if( *(_DWORD *)(v8 + 48) == 3 )
      {
        AnyMultiplexedVm = MiGetAnyMultiplexedVm(MiWorkingSetTypeSystemCache, v18);
LABEL_25:
        *(_QWORD *)(v8 + 24) = AnyMultiplexedVm;
        return 1;
      }
      LODWORD(v23) = MiGetSystemCacheReverseMap(a2);
      if( v23 && *(_QWORD *)(v23 + 16) )
      {
        LODWORD(v24) = MiGetSystemCacheReverseMap(a2);
        v25 = *(_QWORD *)(v24 + 24);
        v26 = v25 & 0xFFFFFFFFFFFFFFFEui64;
        if( (v25 & 1) == 0 )
          v26 = *(_QWORD *)(v24 + 24);
        AnyMultiplexedVm = (_MMSUPPORT_INSTANCE *)(*(_QWORD *)(*(&stru_140C4DB30 + 267)
                                                             + 8i64 * (*(_WORD *)(*(_QWORD *)v26 + 60i64) & 0x3FF))
                                                 + 7232i64);
        goto LABEL_25;
      }
    }
  }
  else
  {
    *(_BYTE *)(v8 + 37) = v9 & 0xFE;
    v10 = *(_BYTE *)(a1 + 184) & 7;
    if( v10 >= 6u )
    {
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(2ui64);
    }
    else
    {
      if( v10 == 2 )
        v11 = (volatile __int32 *)((char *)&stru_140C4DB30 + 6544);
      else
        v11 = (volatile __int32 *)(a1 + 192);
      v12 = KeGetCurrentIrql();
      __writecr8(2ui64);
      _m_prefetchw((const void *)v11);
      v13 = *v11 & 0x7FFFFFFF;
      if( v13 != _InterlockedCompareExchange(v11, v13 + 1, v13) )
        ExpWaitForSpinLockSharedAndAcquire((INT64 *)v11, v12);
      if( *((_DWORD *)v11 + 1) )
        _InterlockedExchange(v11 + 1, 0);
      CurrentIrql = v12;
    }
    *(_BYTE *)(v8 + 36) = CurrentIrql;
    v31 = 0i64;
    v15 = 0i64;
    v16 = 0i64;
    v17 = MiFastLockLeafPageTable(a1, a2);
    v18 = (VOID *)v17;
    v19 = a2 >> 9;
    PteBase = MmGetPteBase();
    if( v17 )
    {
      v32[0] = (UINT64)PteBase + (v19 & 0x7FFFFFFFF8i64);
      v32[1] = (UINT64)PteBase + ((v32[0] >> 9) & 0x7FFFFFFFF8i64);
      *(_QWORD *)&v33 = (char *)PteBase + ((v32[1] >> 9) & 0x7FFFFFFFF8i64);
      *((_QWORD *)&v33 + 1) = (char *)PteBase + (((unsigned __int64)v33 >> 9) & 0x7FFFFFFFF8i64);
      v15 = v32[v17];
      v16 = (INT64 *)v32[v17 - 1];
      v31 = v16;
    }
    v21 = (INT64 *)((char *)PteBase + (v19 & 0x7FFFFFFFF8i64));
    if( !v15 )
    {
      v28 = MiLockLowestValidPageTable(a1, v21, &v31);
      v16 = v31;
      v15 = (UINT64)v28;
    }
    *(_QWORD *)(v8 + 40) = v15;
    if( v16 == v21 )
      goto LABEL_16;
    if( (*(_DWORD *)(v8 + 4) & 4) != 0 && (MI_READ_PTE_LOCK_FREE((INT64)v16) & 0x81) == 0x81 )
    {
      do
      {
        v21 = (INT64 *)((char *)PteBase + (((unsigned __int64)v21 >> 9) & 0x7FFFFFFFF8i64));
        ++v5;
      }
      while( v21 != v16 );
      *(_DWORD *)(v8 + 16) = v5;
      return 1;
    }
  }
LABEL_37:
  MiUnlockSystemVa(v8);
  return 0;
}

Referenced by:

MiLockStealSystemVm
MiSystemFault
MiTranslatePageForCopy
MiTrimSharedPageFromViews