MiProbeLeafPteAccess

NTSTATUS __stdcall MiProbeLeafPteAccess(INT64 a1, UINT64 rdx0){
  __int64 v2; 
  int v3; 
  wchar_t *v4; 
  UINT64 v5; 
  int v6; 
  int v7; 
  NTSTATUS result; 
  UINT64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  _QWORD *v13; 
  char *v14; 
  int v15; 
  _MMPFN *v16; 
  __int64 v17; 
  int v18; 
  int v19; 
  unsigned __int64 PteBase; 
  unsigned __int64 v21; 
  char v22; 
  unsigned __int64 v23; 
  int v24; 
  _MMPFN *v25; 
  NTSTATUS CanPageMove; 
  int v27; 
  int v28; 
  int v29; 
  __int64 v30; 
  _MMPTE *v31; 
  int v32; 
  int v33; 
  void *v34; 
  int v35; 
  int v36; 
  char v37; 
  unsigned __int64 v38; 
  int v39; 
  __int64 v40; 
  _EPROCESS *v41; 
  _MMCLONE_DESCRIPTOR *CloneAddress; 
  _MMPTE **v43; 
  __int64 v44; 
  _EPROCESS *v45; 
  _MMCLONE_DESCRIPTOR *v46; 
  __int64 v47; 
  int v48; 
  int v49; 
  NTSTATUS v50; 
  INT64 a2; 
  PWCHAR UpcaseTable; 
  INT64 a3; 
  __int64 v54; 

  UpcaseTable = (PWCHAR)rdx0;
  v2 = *(_QWORD *)(a1 + 40);
  v3 = 0;
  v4 = (wchar_t *)rdx0;
  v5 = *(_QWORD *)a1;
  v6 = *(_DWORD *)(a1 + 64) & 0xF;
  v7 = *(_DWORD *)(a1 + 88);
  *(_DWORD *)rdx0 = 0;
  v54 = v2;
  if( (v2 & 4) == 0 && v6 == 1 )
  {
    ++*(&stru_140C4DB30 + 614);
    return -1073741819;
  }
  if( &v54 < (__int64 *)MmGetPml4eBase() || &v54 > (__int64 *)MmGetPxeUserLimit() )
    rdx0 = v2;
  v10 = (rdx0 >> 12) & 0xFFFFFFFFFi64;
  v11 = 48 * v10;
  v12 = 0xFFFF800000000000ui64;
  if( (((unsigned __int64)MmGetPfnDb()[v10].u4._bf_0 >> 50) & 1) != 0 )
  {
    v13 = (_QWORD *)*(&stru_140C4DB30 + 530);
    v14 = (char *)MmGetPfnDb() + v11;
    if( *(&stru_140C4DB30 + 530) )
    {
      if( ((*((_QWORD *)v14 + 5) >> 60) & 7) == 1 )
      {
        v10 = v11 / 0x30;
        if( *(&stru_140C4DB30 + 530) )
        {
          do
          {
            v11 = v13[3];
            if( v10 < v11 )
            {
              v13 = (_QWORD *)*v13;
            }
            else
            {
              if( v10 - v11 < v13[4] )
              {
                ++*(&stru_140C4DB30 + 626);
                return -1073741819;
              }
              v13 = (_QWORD *)v13[1];
            }
          }
          while( v13 );
        }
      }
    }
    LOBYTE(v15) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v14, (_UNICODE_STRING *)v10, v11, v4);
    if( !v15 )
    {
      v10 = *((_QWORD *)v14 + 5);
      if( (v10 & 0x1000000000i64) != 0 )
      {
        LODWORD(a2) = 0;
        LODWORD(a3) = 0;
        if( MiGetPfnPageSizeIndexUnsynchronized(v16, &a2, &a3) != 3 && (_DWORD)a2 == 6 )
        {
          v4 = UpcaseTable;
          v12 = 0xFFFF800000000000ui64;
          goto LABEL_21;
        }
LABEL_32:
        ++*(&stru_140C4DB30 + 625);
        return -1073741819;
      }
      PteBase = (unsigned __int64)MmGetPteBase();
      v21 = (__int64)((*((_QWORD *)v14 + 1) << 25) - (PteBase << 25)) >> 16;
      if( v21 >= PteBase && v21 <= (unsigned __int64)MmGetPteLimit() )
      {
        v10 &= v17;
        if( v10 != 0xFFFFFFFFDi64 )
        {
          v22 = v14[34];
          if( (v22 & 0x20) == 0
            || (v10 = 0x3FFFFFFFFFFFFFFFi64, (*((_QWORD *)v14 + 3) & 0x3FFFFFFFFFFFFFFFi64) != 0)
            || !*((_WORD *)v14 + 16) )
          {
            if( (v22 & 8) == 0 && (v12 | (*(_QWORD *)v14 >> 13) & 0xFFFFFFFFFFFFFFF0ui64) != 0xFFFF800000000030ui64 )
              goto LABEL_32;
          }
        }
      }
    }
  }
  else
  {
    v14 = 0i64;
  }
LABEL_21:
  v18 = 0;
  if( v5 >= v12 )
  {
    v10 = (UINT64)&stru_140C4DB30 + 7128;
    v19 = *((unsigned __int8 *)&stru_140C4DB30 + ((v5 >> 39) & 0x1FF) + 6872);
  }
  else
  {
    v19 = 0;
  }
  if( v6 == 6 && v19 == 12 )
    v18 = 1;
  v23 = 0x8000000000000000ui64;
  if( v7 == 3 )
  {
    if( v5 > 0x7FFFFFFEFFFFi64 )
      return -1073741819;
    if( (v2 & 0x8000000000000000ui64) != 0 )
    {
      if( (v2 & 0x800) != 0 )
        return -1073741800;
      goto LABEL_59;
    }
  }
  else if( !v7 )
  {
    if( v18 )
    {
      if( !v14 )
        return 0;
      LOBYTE(v24) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v14, (_UNICODE_STRING *)v10, 0, v4);
      if( v24 )
      {
        CanPageMove = MiCanPageMove(v25);
        if( CanPageMove == v27 || (LOBYTE(v28) = MiIsPfnFileOnly((INT64)v14), v28 == v29) )
        {
          v30 = *((_QWORD *)v14 + 2);
          if( (v30 & 0x400) == 0 )
            goto LABEL_55;
          if( *(&stru_140C4DB30 + 42) && (v30 & 0x10) == 0 )
            v30 &= ~*(&stru_140C4DB30 + 42);
          if( (*(_DWORD *)(*(_QWORD *)(v30 >> 16) + 56i64) & 0x20) != 0 )
          {
LABEL_55:
            v31 = (_MMPTE *)MiIsDriverPage(*(_QWORD *)(a1 + 16));
            if( v31 )
            {
              MiUnlockProbePacketWorkingSet((_MI_PROBE_PACKET *)a1);
              v32 = MiSplitDriverPage(v31, *(_QWORD *)(a1 + 16));
              MiLockProbePacketWorkingSet((_MI_PROBE_PACKET *)a1);
              if( v32 < 0 )
              {
                ++*(&stru_140C4DB30 + 624);
                return v32;
              }
              goto LABEL_108;
            }
            v23 = 0x8000000000000000ui64;
          }
        }
      }
    }
    goto LABEL_75;
  }
  if( (v2 & 0x800) == 0 )
  {
LABEL_59:
    if( v7 != 3 && (v6 != 6 || !v18) )
    {
      *(_DWORD *)v4 = 2;
      return 0;
    }
    if( v14 )
    {
      LOBYTE(v33) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v14, (_UNICODE_STRING *)v10, 0, v4);
      if( !v33 )
      {
        if( (MiFlags & 0x8000) != 0 && ((*((_QWORD *)v14 + 5) >> 60) & 7) == 3 )
          MiClearPfnImageVerified(v34, 8ui64);
        return 0;
      }
    }
    goto LABEL_88;
  }
  if( (v2 & 0x42) == 0 && v6 == 1 )
  {
    if( (*(_DWORD *)(*(_QWORD *)(a1 + 80) + 1124i64) & 0x8000) != 0
      || (LOBYTE(v35) = MiOkToSetPteDirtyForNotValidFault(v2, v5), !v35) )
    {
      MiUnlockProbePacketWorkingSet((_MI_PROBE_PACKET *)a1);
      v36 = MmAccessFault(2ui64, (PVOID)v5, 0, 0i64);
      MiLockProbePacketWorkingSet((_MI_PROBE_PACKET *)a1);
      if( v36 < 0 )
      {
        ++*(&stru_140C4DB30 + 612);
        return v36;
      }
      goto LABEL_108;
    }
  }
LABEL_75:
  if( !v14 )
    return 0;
  v37 = v14[34];
  if( (v37 & 0x20) != 0 && (v37 & 8) == 0 && (*((_QWORD *)v14 + 3) & 0x3FFFFFFFFFFFFFFFi64) == 0 )
    return 0;
  v38 = *((_QWORD *)v14 + 5);
  if( ((v38 >> 60) & 7) == 1 || (v38 & 0x1000000000i64) != 0 || *((__int64 *)v14 + 1) <= 0 )
  {
    if( v7 )
      return 0;
    LOBYTE(v39) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v14, (_UNICODE_STRING *)v10, v23, v4);
    if( !v39 )
      return 0;
    v41 = *(_EPROCESS **)(a1 + 80);
    if( !v41 )
      return 0;
    if( (*(_DWORD *)(a1 + 64) & 0x10) == 0 )
      return 0;
    CloneAddress = MiLocateCloneAddress(v41, (VOID *)(v40 | *((_QWORD *)v14 + 1)));
    if( !CloneAddress )
      return 0;
    if( *(_QWORD *)(*(_QWORD *)(v44 + 1680) + 360i64) > CloneAddress->NestingLevel )
      goto LABEL_95;
  }
LABEL_88:
  if( v7 != 3 )
    goto LABEL_102;
  if( (v2 & v23) != 0 )
    return -1073741755;
  v45 = *(_EPROCESS **)(a1 + 80);
  if( !v45
    || (*(_DWORD *)(a1 + 64) & 0x10) == 0
    || (v46 = MiLocateCloneAddress(v45, (VOID *)(v23 | *((_QWORD *)v14 + 1)))) == 0i64 )
  {
    if( (v2 & 0x200) != 0 || (*((_QWORD *)v14 + 5) & 0x1000000000i64) == 0 && *((__int64 *)v14 + 1) > 0 )
      goto LABEL_102;
    LOBYTE(v48) = MiProcessCommitIntact();
    if( v48 )
    {
      ++*(_QWORD *)(a1 + 104);
      v3 = v49;
      goto LABEL_102;
    }
    return -1073741819;
  }
  if( *(_QWORD *)(*(_QWORD *)(v47 + 1680) + 360i64) > v46->NestingLevel )
  {
LABEL_95:
    MiSplitReducedCommitClonePage((_MI_PROBE_PACKET *)a1, v43);
    if( result < 0 )
    {
      ++*(&stru_140C4DB30 + 623);
      return result;
    }
    goto LABEL_108;
  }
LABEL_102:
  v50 = MiCopyOnWrite(v5, *(INT64 **)(a1 + 16), 0xFFFFFFFFFFFFFFFFui64, 0i64);
  if( v50 >= 0 )
  {
LABEL_108:
    *(_DWORD *)UpcaseTable = 1;
    return 0;
  }
  if( v3 )
    --*(_QWORD *)(a1 + 104);
  if( *(_BYTE *)(a1 + 68) != 2 && (*(_DWORD *)(*(_QWORD *)(a1 + 72) + 1300i64) & 0xC) == 0 )
  {
    MiUnlockProbePacketWorkingSet((_MI_PROBE_PACKET *)a1);
    MiCopyOnWriteCheckConditions(*(_QWORD *)(a1 + 96), (unsigned int)v50);
    MiLockProbePacketWorkingSet((_MI_PROBE_PACKET *)a1);
    goto LABEL_108;
  }
  ++*(&stru_140C4DB30 + 624);
  return -1073741801;
}

Referenced by:

MiProbeAndLockPages
MiProbeLeafFrame