MiInitializeMdlOneNodeBatchPages

void __fastcall MiInitializeMdlOneNodeBatchPages(__int64 a1, _QWORD *a2, __int64 a3){
  __int64 v3; 
  _QWORD *v4; 
  UINT64 v5; 
  _MMPFN *v6; 
  _MMPFN *v7; 
  _MMPFN *v8; 
  _MMPFN *v9; 
  _MMPFN *PfnDb; 
  int v11; 
  char v12; 
  _MMPFN *v13; 
  bool v14; 
  __int64 v15; 
  _MMPFN *v16; 
  __int64 v17; 
  int v18; 
  int v19; 
  int v20; 
  __int64 *v21; 
  __int64 v22; 
  __int64 v23; 
  INT64 v24[2]; 
  __int128 v25; 
  __int128 v26; 

  v3 = *(int *)(a1 + 60);
  v4 = a2;
  v21 = a2;
  v5 = *(unsigned int *)(a1 + 8);
  v6 = 0i64;
  v23 = a3;
  v7 = 0i64;
  v19 = *(_DWORD *)(a1 + 8);
  v8 = 0i64;
  v22 = 0i64;
  v9 = 0i64;
  *(_OWORD *)v24 = 0i64;
  v25 = 0i64;
  v26 = 0i64;
  if( !a3 )
    goto LABEL_11;
  PfnDb = MmGetPfnDb();
  v11 = v5 & 1;
  v20 = v11;
  do
  {
    v12 = 0;
    v13 = &PfnDb[*v4];
    if( v11 || !MiPfnZeroingNeeded(&PfnDb[*v4], (_MI_PFN_CACHE_ATTRIBUTE)v3) )
    {
      if( *((unsigned __int8 *)&v13->u3 + 2) >> 6 == (_DWORD)v3 )
        goto LABEL_5;
      goto LABEL_15;
    }
    if( (_DWORD)v25 )
      goto LABEL_14;
    LODWORD(v17) = MiSearchNumaNodeTable((PVOID)(v13 - PfnDb));
    if( MiCreateColorAnchors((INT64)v24, *(unsigned int *)(v17 + 8)) )
    {
      v18 = 3;
      if( (v19 & 8) != 0 )
        v18 = 7;
      v24[1] = __PAIR64__(v3, v18);
      v15 = *v21;
LABEL_14:
      MiInsertMdlPageNeedsZero((__int64)v24, v15, 1i64);
      ++v22;
      v12 = 1;
LABEL_15:
      if( (_DWORD)v3 == 3 && v12 == 1 )
      {
        if( MiPageAttributeBatchChangeNeeded(v13, MiCached) == 1 )
        {
          v16 = v6;
          v6 = v13;
        }
        else
        {
          v16 = v7;
          v7 = v13;
        }
        v13->OriginalPte.u.Long = (unsigned __int64)v16;
      }
      else if( MiPageAttributeBatchChangeNeeded(v13, (_MI_PFN_CACHE_ATTRIBUTE)v3) == 1 )
      {
        if( !v12
          || *((_DWORD *)&stru_140C4DB30 + 4 * ((unsigned __int64)*((unsigned __int8 *)&v13->u3 + 2) >> 6) + v3 + 106) == (_DWORD)v3 )
        {
          v13->OriginalPte.u.Long = (unsigned __int64)v8;
          v8 = v13;
        }
        else
        {
          v13->OriginalPte.u.Long = (unsigned __int64)v9;
          v9 = v13;
        }
      }
      goto LABEL_19;
    }
    MiZeroAndConvertPage((_MI_ZERO_THREAD_CONTEXT *)v13, 3ui64, (unsigned int)v3, 2);
LABEL_19:
    PfnDb = MmGetPfnDb();
LABEL_5:
    v11 = v20;
    v4 = v21 + 1;
    v14 = v23-- == 1;
    ++v21;
  }
  while( !v14 );
  if( v8 )
    MiChangePageAttributeBatch(v8, (_MI_PFN_CACHE_ATTRIBUTE)v3, 0i64);
  if( v6 )
    MiChangePageAttributeBatch(v6, MiCached, (_MMPTE)-1i64);
  if( v22 )
  {
    MiZeroInParallel((_COLORED_PAGE_INFO *)v24, v5, (UINT64)PfnDb);
    if( v6 )
      MiChangePageAttributeBatch(v6, MiNotMapped, 0i64);
    if( v7 )
      MiChangePageAttributeBatch(v7, MiNotMapped, 0i64);
    if( v9 )
      MiChangePageAttributeBatch(v9, (_MI_PFN_CACHE_ATTRIBUTE)v3, 0i64);
  }
LABEL_11:
  MiDeleteColorAnchors((INT64)v24);
}

Referenced by:

MiInitializeMdlBatchPages