MiMirrorNodeLargePages

VOID __stdcall MiMirrorNodeLargePages(UINT64 PhaseNumber, _MM_MIRROR_DISPATCH *MirrorDispatch, _MM_MIRROR_DISPATCH a3){
  unsigned __int64 v3; 
  _MM_MIRROR_DISPATCH v4; 
  INT64 v5; 
  unsigned __int64 *v6; 
  unsigned __int64 v7; 
  unsigned int *v8; 
  UINT64 *v9; 
  UINT64 v10; 
  __int64 v11; 
  unsigned int v12; 
  __int64 i; 
  unsigned int v14; 
  __int64 v15; 
  __int64 v16; 
  char **v17; 
  __int64 v18; 
  char *v19; 
  __int64 v20; 
  bool v21; 
  __int64 v22; 
  __int64 v23; 
  __int64 *v24; 
  char *v25; 
  unsigned __int64 v26; 
  __int64 v27; 
  unsigned __int8 CurrentIrql; 
  unsigned __int64 v29; 
  unsigned __int64 v30; 
  unsigned __int64 v31; 
  _KLOCK_QUEUE_HANDLE LockQueue[4]; 
  unsigned int v34; 
  __int64 v36; 

  v29 = *((_QWORD *)MirrorDispatch + 2);
  v3 = v29;
  memset(LockQueue, 0, 24);
  v4 = a3;
  v5 = PhaseNumber;
  CurrentIrql = 17;
  v31 = v29 + 4544i64 * (unsigned __int16)KeNumberNodes;
  if( v29 < v31 )
  {
    v6 = (unsigned __int64 *)(v29 + 4328);
    v30 = v29 + 4328;
    do
    {
      if( !v4 )
      {
        CurrentIrql = KeGetCurrentIrql();
        __writecr8(2ui64);
        LockQueue[0].LockQueue.Next = 0i64;
        LockQueue[0].LockQueue.Lock = v6;
        KxAcquireQueuedSpinLock(&LockQueue[0].LockQueue, v6);
        v5 = PhaseNumber;
      }
      v7 = v3;
      v27 = 3i64;
      v8 = (unsigned int *)((char *)&stru_140C4DB30 + 400);
      v26 = v3;
      v9 = (UINT64 *)MiLargePageSizes;
      v25 = (char *)&stru_140C4DB30 + 400;
      v24 = MiLargePageSizes;
      do
      {
        v10 = *v9;
        v11 = 0i64;
        v12 = *v8;
        v34 = *v8;
        v23 = 0i64;
        do
        {
          for( i = 0i64; i <= 1; ++i )
          {
            v14 = 0;
            if( MmNumberOfChannels )
            {
              do
              {
                v15 = 4i64;
                v22 = 4i64;
                v16 = 32 * (4 * (i + v11) + v14) + 560;
                do
                {
                  v17 = *(char ***)(v7 + v16);
                  if( v12 )
                  {
                    v18 = v12;
                    v36 = v12;
                    do
                    {
                      v19 = *v17;
                      if( *v17 != (char *)v17 )
                      {
                        do
                        {
                          v20 = (v19 - (char *)MmGetPfnDb()) / 48;
                          if( a3 )
                            MiMirrorOmitPagesFromCopy(v5, v20, v10);
                          else
                            MiMirrorAddPagesToBrownList(v20, v10);
                          v19 = *(char **)v19;
                          v5 = PhaseNumber;
                        }
                        while( v19 != (char *)v17 );
                        v18 = v36;
                      }
                      v5 = PhaseNumber;
                      v17 += 3;
                      v36 = --v18;
                    }
                    while( v18 );
                    v15 = v22;
                    v7 = v26;
                    v12 = v34;
                  }
                  v5 = PhaseNumber;
                  v16 += 8i64;
                  v22 = --v15;
                }
                while( v15 );
                ++v14;
              }
              while( v14 < MmNumberOfChannels );
              v11 = v23;
            }
            v5 = PhaseNumber;
          }
          v11 += 2i64;
          v23 = v11;
        }
        while( v11 <= 2 );
        v7 += 1072i64;
        v9 = (UINT64 *)(v24 + 1);
        v8 = (unsigned int *)(v25 + 4);
        ++v24;
        v21 = v27-- == 1;
        v25 += 4;
        v26 = v7;
      }
      while( !v21 );
      v4 = a3;
      if( !a3 )
      {
        KeReleaseInStackQueuedSpinLockFromDpcLevel(LockQueue);
        __writecr8(CurrentIrql);
      }
      v5 = PhaseNumber;
      v3 = v29 + 4544;
      v6 = (unsigned __int64 *)(v30 + 4544);
      v29 = v3;
      v30 += 4544i64;
    }
    while( v3 < v31 );
  }
}

Referenced by:

MiMirrorGatherBrownPages
MiMirrorReduceBlackWrites