MiValidateImagePfn

INT64 __fastcall MiValidateImagePfn(
        ULONG_PTR a1,
        __int64 a2,
        __int64 a3,
        unsigned int a4,
        char a5,
        int a6,
        __int64 a7,
        int a8){
  _QWORD *v11; 
  _MMPFN *v12; 
  VOID *v13; 
  INT64 v14; 
  int ProtectionPfnCompatible; 
  UINT64 v16; 
  void *v17; 
  int v18; 
  int v19; 
  UINT64 v20; 
  VOID *v21; 
  void *v22; 
  int v23; 
  CHAR v24; 
  INT64 result; 
  UINT64 ValidateFlags; 
  char v29; 
  __int64 MappingVa; 
  v11 = *(_QWORD **)(a1 + 96);
  v12 = (_MMPFN *)((char *)MmGetPfnDb() + 48 * a7);
  v13 = (VOID *)(v11[5] & 0xFFFFFFFFFFFFFFF8ui64);
  if( (*(_DWORD *)(a1 + 92) & 0xC0000) != 0 && !v11[7] )
  {
    result = MiGetSectionStrongImageReference(*(_QWORD *)(a1 + 96));
    if( (int)result < 0 )
      return result;
  }
  v14 = MiReservePtes((INT64)&qword_140C4EC80, 1ui64);
  if( v14 )
  {
    v29 = 0;
  }
  else
  {
    if( ((MiFlags & 0x4000) == 0 || (*(_DWORD *)(a1 + 92) & 0xC0000) == 0) && a4 != -1 )
      return 3221225626i64;
    v14 = MiReserveFaultPte();
    if( !v14 )
      return 3221225626i64;
    v29 = 1;
  }
  MappingVa = ((v14 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
  ProtectionPfnCompatible = MiMakeProtectionPfnCompatible(1ui64, v12);
  *(_QWORD *)v14 = MiMakeValidPte(v14, a7, ProtectionPfnCompatible | 0x20000000u);
  v17 = 0i64;
  v18 = a8 | 2;
  if( (a6 & 2) == 0 )
    v18 = a8;
  if( (MiFlags & 0x4000) != 0 && (*(_DWORD *)(a1 + 92) & 0xC0000) != 0 )
  {
    v19 = v18;
    if( a4 != -1 )
    {
      v21 = (VOID *)MappingVa;
      if( v11[4] )
        v19 = v18 | 1;
      goto LABEL_11;
    }
    goto LABEL_22;
  }
  v19 = v18;
  if( a4 == -1 )
  {
LABEL_22:
    v21 = (VOID *)MappingVa;
LABEL_11:
    LODWORD(ValidateFlags) = v19;
    v23 = SeValidateImageData(v13, v21, 0x1000ui64, a2, ValidateFlags, (_EPROCESS *)a3);
    if( v23 < 0 )
    {
      _InterlockedIncrement(&dword_140C4C9DC);
    }
    else
    {
      v24 = 0;
      if( (MiFlags & 0x40000) != 0 && (*(_DWORD *)(a1 + 92) & 0xC0000) == 0 && ((*((_BYTE *)v12 + 16) >> 5) & 2) != 0 )
        v24 = 3;
      if( (*((_DWORD *)v12 + 4) & 0x400i64) != 0 )
        MiMarkPfnVerified((UINT64)v12, v24);
    }
    goto LABEL_15;
  }
  v20 = a4;
  v21 = (VOID *)MappingVa;
  LODWORD(v22) = MiRevertRelocatedImagePfn((PVOID)MappingVa, (_CONTROL_AREA *)a1, v20, v16);
  v17 = v22;
  if( v22 == (void *)-1i64 )
  {
    v17 = 0i64;
LABEL_10:
    v19 = v18;
    goto LABEL_11;
  }
  if( v22 )
  {
    v21 = v22;
    goto LABEL_10;
  }
  v23 = -1073741670;
LABEL_15:
  if( v29 )
    MiReleaseFaultPte(v14);
  else
    MiReleasePtes((INT64)&qword_140C4EC80, v14, 1ui64);
  if( v17 )
    ExFreePoolWithTag(v17, 0);
  return(unsigned int)v23;
}

Referenced by:

MiValidateInPage
MiWalkEntireImage