MiCreateSharedZeroPages

__int64 __fastcall MiCreateSharedZeroPages(int *a1, unsigned __int64 *a2){
  UINT64 *v2; 
  __int64 v4; 
  UINT64 v6; 
  UINT64 v7; 
  unsigned int v8; 
  unsigned int v9; 
  _MI_PARTITION *v10; 
  _MMPFN *PageChain; 
  int v12; 
  unsigned __int64 v13; 
  unsigned int v14; 
  _MMPFN *PfnDb; 
  _RTL_BITMAP_EX *v16; 
  __int64 v17; 
  __int64 v18; 
  unsigned int v19; 
  int v20; 
  unsigned __int64 v22; 
  __int64 v23; 
  _MMPFN *ClusterPage; 
  unsigned int v25; 
  UINT8 *SuboptimalPage; 
  _QWORD *a1a; 
  int v28; 
  UINT64 v29; 
  v2 = (UINT64 *)*((_QWORD *)a1 + 3);
  v4 = *((_QWORD *)a1 + 8);
  v6 = *((_QWORD *)a1 + 2);
  v7 = (UINT64)v2;
  v8 = (*(_DWORD *)v2 >> 5) & 0x1F;
  if( v4 )
  {
    v22 = *(unsigned int *)(v4 + 48);
    if( (v22 & 0x100000) == 0 && MiVadPageSizes[(v22 >> 18) & 3] == 16 )
    {
      LODWORD(SuboptimalPage) = a1[9];
      ClusterPage = MiGetClusterPage((_MMVAD *)v4, (VOID *)v6, *a2, (unsigned int)a1[8], SuboptimalPage);
      PageChain = ClusterPage;
      if( ClusterPage )
      {
        if( (*((_QWORD *)ClusterPage + 3) & 0xFFFFFFFFFi64) == 0xFFFFFFFFFi64 )
        {
          *a2 = 1i64;
        }
        else
        {
          *a2 = 16i64;
          v25 = (unsigned int)v6 >> 12;
          v6 &= 0xFFFFFFFFFFFF0000ui64;
          *((_QWORD *)a1 + 2) = v6;
          v2 -= v25 & 0xF;
        }
        goto LABEL_3;
      }
      v7 = *((_QWORD *)a1 + 3);
      *a2 = 1i64;
    }
  }
  MiSharedVaToPartition(*(_QWORD *)(*((_QWORD *)a1 + 1) + 56i64), v6, v7);
  v9 = MiProtectionToCacheAttribute(v8);
  LODWORD(SuboptimalPage) = 258;
  PageChain = MiGetPageChain(
                v10,
                *(_MMSUPPORT_INSTANCE **)(*((_QWORD *)a1 + 1) + 56i64),
                (unsigned int)a1[12],
                v9,
                (UINT64)SuboptimalPage,
                0xFFFFFFFFFFFFFFFFui64,
                a2);
  if( !PageChain )
    return 3221225495i64;
LABEL_3:
  v12 = 0;
  a1a = (_QWORD *)*((_QWORD *)a1 + 7);
  v28 = 0;
  if( v4 )
  {
    v23 = *(unsigned int *)(v4 + 52);
    LODWORD(v23) = v23 & 0x7FFFFFFF;
    if( (v23 | ((unsigned __int64)*(unsigned __int8 *)(v4 + 34) << 31)) == 0x7FFFFFFFEi64 )
    {
      v12 = 64;
      v28 = 64;
    }
  }
  v13 = v6 & 0xFFFFFFFFFFFFF000ui64;
  v14 = 0;
  if( *a2 )
  {
    PfnDb = MmGetPfnDb();
    do
    {
      v16 = (_RTL_BITMAP_EX *)PageChain;
      v17 = *((_QWORD *)PageChain + 3) & 0xFFFFFFFFFi64;
      v29 = (UINT64)PageChain;
      if( v17 == 0xFFFFFFFFFi64 )
        PageChain = 0i64;
      else
        PageChain = (_MMPFN *)((char *)PfnDb + 48 * v17);
      v18 = ((char *)v16 - (char *)PfnDb) / 48;
      if( (MiFlags & 0x80u) != 0 && (++dword_140C4E50C & MmPageValidationFrequency) == 0 )
      {
        MiArePageContentsZero((PVOID)v18);
        v12 = v28;
        v16 = (_RTL_BITMAP_EX *)v29;
      }
      v19 = (*(_DWORD *)v2 >> 5) & 0x1F;
      if( v19 == 24 )
        v19 = 1;
      v20 = v12 | 0x112;
      v28 = v20;
      if( (*a1 & 4) != 0 || ((v19 - 4) & 0xFFFFFFFD) != 0 )
        v28 = v20 | 0x20;
      MiInitializePfn(v16, v2, v19);
      *v2 = MiMakeValidPte((UINT64)v2, v18, v19 | 0x20000000);
      if( (*a1 & 4) != 0 )
      {
        MiLockAndDecrementShareCount(v29, 0);
        if( a1a )
        {
          if( (*a1 & 8) == 0 && v13 == *(_QWORD *)(a1a[1] + 16i64 * a1a[3]) + (a1a[4] << 12) )
            MiAdvanceFaultList(a1a);
        }
      }
      v12 = v28;
      ++v14;
      v13 += 4096i64;
      ++v2;
      PfnDb = MmGetPfnDb();
    }
    while( v14 < *a2 );
  }
  return 273i64;
}

Referenced by:

MiResolveDemandZeroFault