MiCheckUserVirtualAddress

_MMPTE *__stdcall MiCheckUserVirtualAddress(VOID *VirtualAddress, UINT64 *ProtectCode, _MMVAD *Vad, UINT64 Flags){
  unsigned __int64 v7; 
  union {unsigned int LongFlags;_MMVAD_FLAGS VadFlags;_MM_PRIVATE_VAD_FLAGS PrivateVadFlags;_MM_GRAPHICS_VAD_FLAGS GraphicsVadFlags;_MM_SHARED_VAD_FLAGS SharedVadFlags;volatile unsigned int VolatileVadLong;} v8; 
  unsigned __int64 v9; 
  _MMPTE *v10; 
  _MMPTE *v11; 
  char v12; 
  unsigned int v13; 
  _MMEXTEND_INFO *ExtendedInfo; 
  _MMPTE *result; 
  unsigned int v16; 
  int v17; 
  unsigned int v18; 
  __int64 ********LockedVadEvent; 

  if( (KeGetCurrentThread()->ApcState.Process->Flags3 & 1) == 0 )
  {
    v7 = (unsigned __int64)VirtualAddress & 0xFFFFFFFFFFFFF000ui64;
    if( ((unsigned __int64)VirtualAddress & 0xFFFFFFFFFFFFF000ui64) == 2147352576 )
    {
      result = (_MMPTE *)*(&stru_140C4DB30 + 9);
      *(_DWORD *)ProtectCode = 1;
      return result;
    }
    if( v7 == *(&stru_140C4DB30 + 11) && v7 )
    {
      result = (_MMPTE *)*(&stru_140C4DB30 + 10);
      *(_DWORD *)ProtectCode = 1;
      return result;
    }
  }
  if( (Vad->Core.u.LongFlags & 0x70) == 32 && (Vad->u2.LongFlags2 & 0x10000000) != 0 )
  {
    LockedVadEvent = MiLocateLockedVadEvent((__int64)Vad, 32);
    if( LockedVadEvent && LockedVadEvent[1] != (__int64 *******)KeGetCurrentThread() )
      goto LABEL_25;
  }
  v8.LongFlags = (unsigned int)Vad->Core.u;
  if( (v8.LongFlags & 4) != 0 )
    goto LABEL_25;
  if( (v8.LongFlags & 0x100000) != 0 )
  {
    v16 = Vad->Core.u.LongFlags & 0x70;
    if( v16 != 16 && v16 != 48 )
    {
      LOBYTE(v17) = MiIsVadLargePrivate((INT64)Vad);
      if( !v17 && (Vad->Core.u1.LongFlags1 & 0x80000000) != 0 )
      {
        v18 = (Vad->Core.u.LongFlags >> 7) & 0x1F;
LABEL_24:
        result = 0i64;
        *(_DWORD *)ProtectCode = v18;
        return result;
      }
    }
LABEL_25:
    v18 = 24;
    goto LABEL_24;
  }
  if( (Vad->u2.LongFlags2 & 0x1000000) != 0 && (Vad->Core.u.LongFlags & 0x70) != 80 )
    goto LABEL_25;
  v9 = (unsigned __int64)VirtualAddress >> 12;
  MiGetProtoPteAddress();
  v11 = v10;
  if( v10 )
  {
    v12 = Vad->Core.u.LongFlags & 0x70;
    v13 = (Vad->Core.u.LongFlags >> 7) & 0x1F;
    *(_DWORD *)ProtectCode = v13;
    if( v12 == 32 )
    {
      if( v13 == 7 )
        v13 = 256;
      *(_DWORD *)ProtectCode = v13;
    }
  }
  else
  {
    *(_DWORD *)ProtectCode = 24;
  }
  ExtendedInfo = Vad->u4.ExtendedInfo;
  if( (__int64)ExtendedInfo < 0
    && v9 - (Vad->Core.StartingVpn | ((unsigned __int64)Vad->Core.StartingVpnHigh << 32)) > (ExtendedInfo->CommittedSize
                                                                                           - 1) >> 12 )
  {
    *(_DWORD *)ProtectCode = 24;
  }
  return v11;
}

Referenced by:

MiActOnPte
MiCheckVirtualAddress
MiInPagePageTable
MiResolveDemandZeroFault
MiUserFault