MiZeroWithSystemPtes

UINT64 __fastcall MiZeroWithSystemPtes(_XSTATE_CONFIGURATION *a1, UINT64 NumberOfEntries, _MMPFN *a3){
  __int64 v5; 
  UINT64 v6; 
  INT64 v7; 
  struct {unsigned __int16 ReferenceCount;} *v8; 
  UINT64 v10; 
  _XSTATE_CONFIGURATION *v11; 
  __int64 v12; 
  int v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  unsigned __int64 v17; 
  int v18; 
  UINT64 j; 
  UINT64 i; 
  UINT64 v21; 
  _MI_TB_FLUSH_LIST TbFlushList[48]; 

  if( (a3->u4._bf_0 & 0x1000000000i64) == 0 )
    goto LABEL_6;
  LODWORD(v5) = MiGetPfnPageSizeIndex((INT64)a3);
  if( (_DWORD)v5 == -1 )
    v5 = 3i64;
  if( (unsigned int)v5 < 3 )
    v6 = MiLargePageSizes[v5];
  else
LABEL_6:
    v6 = 1i64;
  v7 = a3 - MmGetPfnDb();
  if( a1 )
  {
    v10 = NumberOfEntries;
    v11 = a1;
    if( NumberOfEntries >= v6 )
      v10 = v6;
    v21 = v10;
    v12 = (__int64)(((_QWORD)a1 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
    MiMakeProtectionPfnCompatible((_BYTE *)4, a3);
    LODWORD(v14) = MiMakeValidPte(a1, v7, v13 | 0xA0000000);
    v15 = 0i64;
    v16 = v14;
    for( i = 0i64; i < v6; ++i )
    {
      v17 = v16;
      LOBYTE(v18) = MiPteInShadowRange((UINT64)v11);
      if( v18 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v16 & 1) != 0 )
        v17 = v16 | 0x8000000000000000ui64;
      v11->EnabledFeatures = v17;
      v11 = (_XSTATE_CONFIGURATION *)((char *)v11 + 8);
      ++v15;
      v16 ^= (v16 ^ (v16 + 4096)) & 0xFFFFFFFFF000i64;
      if( v15 == NumberOfEntries )
      {
        memset(TbFlushList, 0i64, 0xB8u);
        MiZeroMemory((VOID *)v12, ((char *)v11 - (char *)a1) >> 3 << 12);
        if( i + 1 == v6 )
        {
          v12 = 0i64;
          break;
        }
        for( j = 0i64; j < NumberOfEntries; ++j )
          *((_MMPTE *)&a1->EnabledFeatures + j) = ZeroPte;
        memset(&TbFlushList[3], 0, 20);
        TbFlushList[0] = 0;
        LOWORD(TbFlushList[1]) = 0;
        TbFlushList[2] = 20;
        MiInsertTbFlushEntry(TbFlushList, (VOID *)v12, NumberOfEntries, 0i64);
        MiFlushTbList(TbFlushList);
        v15 = 0i64;
        v11 = a1;
      }
    }
    if( v12 )
      MiZeroMemory((VOID *)v12, ((char *)v11 - (char *)a1) >> 3 << 12);
    return v21;
  }
  else
  {
    if( v6 )
    {
      v8 = &a3->u3 + 1;
      do
      {
        MiZeroPhysicalPage(v7++, 1ui64, (_MI_PFN_CACHE_ATTRIBUTE)(LOBYTE(v8->ReferenceCount) >> 6));
        v8 += 24;
        --v6;
      }
      while( v6 );
    }
    return 0i64;
  }
}

Referenced by:

MiZeroInParallelWorker