MiUpdatePrivateDemandZeroView

INT64 __fastcall MiUpdatePrivateDemandZeroView(INT64 a1, INT64 a2, INT64 a3){
  __int64 v3; 
  __int64 v4; 
  INT64 v5; 
  INT64 v6; 
  UINT64 v7; 
  unsigned __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  _MMPTE *ProtoPteAddress; 
  unsigned __int64 v12; 
  _SUBSECTION *v13; 
  UINT64 v14; 
  unsigned __int64 v15; 
  _MMPTE *v16; 
  bool v17; 
  unsigned int v18; 
  int v19; 
  __int64 v20; 
  __int64 v21; 
  unsigned __int64 v22; 
  unsigned __int64 v23; 
  unsigned int v24; 
  INT64 v25; 
  INT64 v26; 
  UINT64 v27; 
  INT64 v28; 
  UINT8 v29; 
  _MMPTE *PteBase; 
  INT64 v31; 
  __int64 v32; 
  _SUBSECTION *v34; 
  INT64 v35; 
  PVOID OpaquePointer; 
  INT64 v37; 
  unsigned __int64 v38; 
  unsigned __int64 v39; 
  UINT8 v40; 
  int v42; 
  _MMPTE *v43; 
  v42 = a3;
  v3 = *(unsigned int *)(a2 + 24);
  v4 = *(unsigned __int8 *)(a2 + 32);
  v34 = 0i64;
  v5 = a2;
  v35 = a1 + 1664;
  v6 = 0i64;
  v7 = v3 | (v4 << 32);
  v8 = (unsigned __int64)*(unsigned __int8 *)(a2 + 33) << 32;
  v9 = *(unsigned int *)(a2 + 28);
  v37 = 0i64;
  v10 = v9 | v8;
  ProtoPteAddress = MiGetProtoPteAddress((_MMVAD *)a2, v7, 6ui64, &v34);
  v43 = ProtoPteAddress;
  v12 = *(_QWORD *)(v5 + 80) + 8 * (v10 - v7);
  v38 = v12;
  v13 = v34;
  v14 = (UINT64)MmGetPteBase() + 8 * (v7 & 0xFFFFFFFFFi64);
  while( 1 )
  {
    if( !v13 )
      return v6;
    v15 = v12;
    v16 = (_MMPTE *)*((_QWORD *)v13 + 1);
    if( (unsigned __int64)v16 + 8 * *((unsigned int *)v13 + 11) - 8 <= v12 )
      v15 = (unsigned __int64)v16 + 8 * *((unsigned int *)v13 + 11) - 8;
    v17 = (*((_BYTE *)v13 + 34) & 2) == 0;
    v39 = v15;
    if( v17 )
    {
      v18 = *((unsigned __int16 *)v13 + 16);
      if( (v18 & 8) == 0 || (v18 & 0xA) == 10 )
      {
        v19 = *((_DWORD *)v13 + 10);
        if( v19 )
          v16 = (_MMPTE *)((char *)v16 + 8 * ((unsigned __int64)(unsigned int)((v19 << 9) - 1) >> 12) + 8);
        if( (unsigned __int64)v16 <= v15 )
          break;
      }
    }
LABEL_40:
    v32 = 8i64 * (unsigned int)((__int64)(v15 - (_QWORD)ProtoPteAddress + 8) >> 3);
    ProtoPteAddress = (_MMPTE *)((char *)ProtoPteAddress + v32);
    v14 += v32;
    v43 = ProtoPteAddress;
    if( (unsigned __int64)ProtoPteAddress > v12 )
      return v6;
    v13 = (_SUBSECTION *)*((_QWORD *)v13 + 2);
    v34 = v13;
  }
  if( ProtoPteAddress < v16 )
  {
    v43 = v16;
    v20 = v16 - ProtoPteAddress;
    ProtoPteAddress = v16;
    v14 += 8 * (v20 >> 3);
  }
  if( (unsigned __int64)ProtoPteAddress <= v12 )
  {
    v21 = 0i64;
    if( (unsigned __int64)ProtoPteAddress <= v15 )
    {
      do
      {
        v22 = MI_READ_PTE_LOCK_FREE((INT64)ProtoPteAddress);
        if( (v22 & 1) != 0 )
        {
          LODWORD(v23) = v18 >> 1;
        }
        else
        {
          if( !v22 )
            break;
          v23 = v22 >> 5;
        }
        if( (v23 & 0x1F) == 24 )
          break;
        v21 = (unsigned int)(v21 + 1);
        ProtoPteAddress = (_MMPTE *)((char *)ProtoPteAddress + 8);
      }
      while( (unsigned __int64)ProtoPteAddress <= v15 );
      v12 = v38;
      v43 = ProtoPteAddress;
    }
    if( (v18 & 0xA) != 10 )
    {
      v6 += (unsigned int)v21;
      v37 = v6;
    }
    if( !v42 || !(_DWORD)v21 )
    {
      v14 += 8 * v21;
      goto LABEL_40;
    }
    v24 = v18 >> 1;
    if( (v18 & 8) != 0 )
      LOBYTE(v24) = v24 & 2 | 4;
    v25 = MiSwizzleInvalidPte(32i64 * (v24 & 0x1F));
    v26 = v35;
    v27 = 0i64;
    OpaquePointer = 0i64;
    v28 = v25;
    v29 = MiLockWorkingSetShared(v35);
    v40 = v29;
    while( 1 )
    {
      if( !v27 )
        goto LABEL_31;
      if( (v14 & 0xFFF) == 0 )
        break;
LABEL_35:
      *(_QWORD *)v14 = v28;
      MiIncreaseUsedPtesCount(OpaquePointer, 1ui64);
      v5 = a2;
      v14 += 8i64;
      LODWORD(v21) = v21 - 1;
      if( !(_DWORD)v21 )
      {
        ProtoPteAddress = v43;
        v15 = v39;
        v31 = v35;
        if( v27 )
          MiUnlockPageTableInternal(v35, v27);
        MiUnlockWorkingSetShared(v31, v40);
        v12 = v38;
        v13 = v34;
        v6 = v37;
        v5 = a2;
        goto LABEL_40;
      }
    }
    MiUnlockPageTableInternal(v26, v27);
LABEL_31:
    if( MiWorkingSetIsContended(v26) || KeShouldYieldProcessor() )
    {
      MiUnlockWorkingSetShared(v26, v29);
      MiLockWorkingSetShared(v26);
    }
    MiMakeSystemAddressValid(v14, 0i64, (*(_DWORD *)(v5 + 48) >> 12) & 0x3F, v29, 0);
    PteBase = MmGetPteBase();
    OpaquePointer = MiGetUsedPtesHandle((__int64)((v14 << 25) - ((_QWORD)PteBase << 25)) >> 16);
    v27 = (UINT64)PteBase + ((v14 >> 9) & 0x7FFFFFFFF8i64);
    goto LABEL_35;
  }
  return v6;
}

Referenced by:

MiMapViewOfImageSection