MiProbeLeafPteAccess

INT64 __fastcall MiProbeLeafPteAccess(INT64 a1, UINT64 a2){
  __int64 v2; 
  int v3; 
  WCHAR *v4; 
  UINT64 v5; 
  int v6; 
  int v7; 
  INT64 result; 
  UINT64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  _QWORD *v13; 
  char *v14; 
  int v15; 
  INT64 v16; 
  __int64 v17; 
  int v18; 
  int v19; 
  unsigned __int64 PteBase; 
  unsigned __int64 v21; 
  char v22; 
  unsigned __int64 v23; 
  int v24; 
  INT64 v25; 
  int CanPageMove; 
  int v27; 
  int IsPfnFileOnly; 
  int v29; 
  __int64 v30; 
  MMPTE *v31; 
  int v32; 
  INT64 *v33; 
  INT64 **v34; 
  int v35; 
  UINT64 v36; 
  NTSTATUS v37; 
  INT64 *v38; 
  INT64 **v39; 
  char v40; 
  unsigned __int64 v41; 
  int v42; 
  __int64 v43; 
  __int64 v44; 
  _QWORD *CloneAddress; 
  __int64 v46; 
  __int64 v47; 
  _QWORD *v48; 
  __int64 v49; 
  int v50; 
  int v51; 
  INT64 *v52; 
  INT64 **v53; 
  INT64 v54; 
  PWCHAR UpcaseTable; 
  INT64 v56; 
  __int64 v57; 
  UpcaseTable = (PWCHAR)a2;
  v2 = *(_QWORD *)(a1 + 40);
  v3 = 0;
  v4 = (WCHAR *)a2;
  v5 = *(_QWORD *)a1;
  v6 = *(_DWORD *)(a1 + 64) & 0xF;
  v7 = *(_DWORD *)(a1 + 88);
  *(_DWORD *)a2 = 0;
  v57 = v2;
  if( (v2 & 4) == 0 && v6 == 1 )
  {
    ++dword_140C4E4C8;
    return 3221225477i64;
  }
  if( &v57 < (__int64 *)MmGetPml4eBase() || &v57 > (__int64 *)MmGetPxeUserLimit() )
    a2 = v2;
  v10 = (a2 >> 12) & 0xFFFFFFFFFi64;
  v11 = 48 * v10;
  v12 = 0xFFFF800000000000ui64;
  if( ((*((_QWORD *)MmGetPfnDb() + 6 * v10 + 5) >> 50) & 1) != 0 )
  {
    v13 = (_QWORD *)qword_140C4EBC0;
    v14 = (char *)MmGetPfnDb() + v11;
    if( qword_140C4EBC0 )
    {
      if( ((*((_QWORD *)v14 + 5) >> 60) & 7) == 1 )
      {
        v10 = v11 / 0x30;
        if( qword_140C4EBC0 )
        {
          do
          {
            v11 = v13[3];
            if( v10 < v11 )
            {
              v13 = (_QWORD *)*v13;
            }
            else
            {
              if( v10 - v11 < v13[4] )
              {
                ++dword_140C4E4F8;
                return 3221225477i64;
              }
              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(v54) = 0;
        LODWORD(v56) = 0;
        if( (unsigned int)MiGetPfnPageSizeIndexUnsynchronized(v16, &v54, &v56) != 3 && (_DWORD)v54 == 6 )
        {
          v4 = UpcaseTable;
          v12 = 0xFFFF800000000000ui64;
          goto LABEL_21;
        }
LABEL_32:
        ++dword_140C4E4F4;
        return 3221225477i64;
      }
      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)&antNameB;
    v19 = *((unsigned __int8 *)&antNameB + ((v5 >> 39) & 0x1FF) - 256);
  }
  else
  {
    v19 = 0;
  }
  if( v6 == 6 && v19 == 12 )
    v18 = 1;
  v23 = 0x8000000000000000ui64;
  if( v7 == 3 )
  {
    if( v5 > 0x7FFFFFFEFFFFi64 )
      return 3221225477i64;
    if( (v2 & 0x8000000000000000ui64) != 0 )
    {
      if( (v2 & 0x800) != 0 )
        return 3221225496i64;
      goto LABEL_59;
    }
  }
  else if( !v7 )
  {
    if( v18 )
    {
      if( !v14 )
        return 0i64;
      LOBYTE(v24) = MI_PFN_IS_PROTO((UNICODE_STRING *)v14, (UNICODE_STRING *)v10, 0, v4);
      if( v24 )
      {
        CanPageMove = MiCanPageMove(v25);
        if( CanPageMove == v27 || (IsPfnFileOnly = MiIsPfnFileOnly((INT64)v14), IsPfnFileOnly == v29) )
        {
          v30 = *((_QWORD *)v14 + 2);
          if( (v30 & 0x400) == 0 )
            goto LABEL_55;
          if( qword_140C4DC80 && (v30 & 0x10) == 0 )
            v30 &= ~qword_140C4DC80;
          if( (*(_DWORD *)(*(_QWORD *)(v30 >> 16) + 56i64) & 0x20) != 0 )
          {
LABEL_55:
            v31 = (MMPTE *)MiIsDriverPage(*(_QWORD *)(a1 + 16));
            if( v31 )
            {
              MiUnlockProbePacketWorkingSet(a1);
              v32 = MiSplitDriverPage(v31, *(_QWORD *)(a1 + 16));
              MiLockProbePacketWorkingSet(a1, v33, v34);
              if( v32 < 0 )
              {
                ++dword_140C4E4F0;
                return(unsigned int)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 0i64;
    }
    if( v14 )
    {
      LOBYTE(v35) = MI_PFN_IS_PROTO((UNICODE_STRING *)v14, (UNICODE_STRING *)v10, 0, v4);
      if( !v35 )
      {
        if( (MiFlags & 0x8000) != 0 && ((*((_QWORD *)v14 + 5) >> 60) & 7) == 3 )
          MiClearPfnImageVerified(v36, 8);
        return 0i64;
      }
    }
    goto LABEL_88;
  }
  if( (v2 & 0x42) == 0
    && v6 == 1
    && ((*(_DWORD *)(*(_QWORD *)(a1 + 80) + 1124i64) & 0x8000) != 0 || !MiOkToSetPteDirtyForNotValidFault(v2, v5)) )
  {
    MiUnlockProbePacketWorkingSet(a1);
    v37 = MmAccessFault(2ui64, (PVOID)v5, 0, 0i64);
    MiLockProbePacketWorkingSet(a1, v38, v39);
    if( v37 < 0 )
    {
      ++dword_140C4E4C0;
      return(unsigned int)v37;
    }
    goto LABEL_108;
  }
LABEL_75:
  if( !v14 )
    return 0i64;
  v40 = v14[34];
  if( (v40 & 0x20) != 0 && (v40 & 8) == 0 && (*((_QWORD *)v14 + 3) & 0x3FFFFFFFFFFFFFFFi64) == 0 )
    return 0i64;
  v41 = *((_QWORD *)v14 + 5);
  if( ((v41 >> 60) & 7) == 1 || (v41 & 0x1000000000i64) != 0 || *((__int64 *)v14 + 1) <= 0 )
  {
    if( v7 )
      return 0i64;
    LOBYTE(v42) = MI_PFN_IS_PROTO((UNICODE_STRING *)v14, (UNICODE_STRING *)v10, v23, v4);
    if( !v42 )
      return 0i64;
    v44 = *(_QWORD *)(a1 + 80);
    if( !v44 )
      return 0i64;
    if( (*(_DWORD *)(a1 + 64) & 0x10) == 0 )
      return 0i64;
    CloneAddress = MiLocateCloneAddress(v44, v43 | *((_QWORD *)v14 + 1));
    if( !CloneAddress )
      return 0i64;
    if( *(_QWORD *)(*(_QWORD *)(v46 + 1680) + 360i64) > CloneAddress[12] )
      goto LABEL_95;
  }
LABEL_88:
  if( v7 != 3 )
    goto LABEL_102;
  if( (v2 & v23) != 0 )
    return 3221225541i64;
  v47 = *(_QWORD *)(a1 + 80);
  if( !v47
    || (*(_DWORD *)(a1 + 64) & 0x10) == 0
    || (v48 = MiLocateCloneAddress(v47, v23 | *((_QWORD *)v14 + 1))) == 0i64 )
  {
    if( (v2 & 0x200) != 0 || (*((_QWORD *)v14 + 5) & 0x1000000000i64) == 0 && *((__int64 *)v14 + 1) > 0 )
      goto LABEL_102;
    if( MiProcessCommitIntact() )
    {
      ++*(_QWORD *)(a1 + 104);
      v3 = v50;
      goto LABEL_102;
    }
    return 3221225477i64;
  }
  if( *(_QWORD *)(*(_QWORD *)(v49 + 1680) + 360i64) > v48[12] )
  {
LABEL_95:
    result = MiSplitReducedCommitClonePage((unsigned __int64 *)a1);
    if( (int)result < 0 )
    {
      ++dword_140C4E4EC;
      return result;
    }
    goto LABEL_108;
  }
LABEL_102:
  v51 = MiCopyOnWrite(v5, *(UINT64 **)(a1 + 16), -1i64, 0i64);
  if( v51 >= 0 )
  {
LABEL_108:
    *(_DWORD *)UpcaseTable = 1;
    return 0i64;
  }
  if( v3 )
    --*(_QWORD *)(a1 + 104);
  if( *(_BYTE *)(a1 + 68) != 2 && (*(_DWORD *)(*(_QWORD *)(a1 + 72) + 1300i64) & 0xC) == 0 )
  {
    MiUnlockProbePacketWorkingSet(a1);
    MiCopyOnWriteCheckConditions(*(_QWORD *)(a1 + 96), (unsigned int)v51);
    MiLockProbePacketWorkingSet(a1, v52, v53);
    goto LABEL_108;
  }
  ++dword_140C4E4F0;
  return 3221225495i64;
}

Referenced by:

MiProbeAndLockPages
MiProbeLeafFrame