MiFillPageWithImageExtentContents

INT64 __stdcall MiFillPageWithImageExtentContents(PVOID BugCheckParameter3, INT64 a2){
  ULONG_PTR v2; 
  unsigned int v3; 
  ULONG_PTR BugCheckParameter4; 
  ULONG_PTR v6; 
  unsigned int v8; 
  UINT64 *v9; 
  ULONG_PTR v10; 
  int v11; 
  int v12; 
  int v13; 
  char *v14; 
  __int64 v15; 
  UINT64 ValidPte; 
  UINT64 *v17; 
  unsigned __int64 v18; 
  __int64 v19; 
  INT64 result; 
  __int64 v21; 
  __int16 v22; 
  unsigned __int64 v23; 
  UINT64 dst; 
  __int64 v25; 
  __int64 v26; 
  unsigned int v27; 
  unsigned __int8 CurrentIrql; 
  unsigned int Size; 
  int v30; 
  Size = v3;
  BugCheckParameter4 = v3;
  v22 = v2;
  v6 = v2;
  v27 = (v2 & 0xFFF) + v3;
  v8 = (v27 > 0x1000) + 3;
  if( v3 == 4096 )
    v8 = (v27 > 0x1000) + 2;
  if( v30 )
  {
    CurrentIrql = 17;
  }
  else
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
  }
  v26 = v8;
  dst = MiAllocateHyperSpace(v8);
  v9 = (UINT64 *)((char *)MmGetPteBase() + ((dst >> 9) & 0x7FFFFFFFF8i64));
  *v9 = MiMakeValidPte((UINT64)v9, a2, 2684354564i64);
  v10 = v6 >> 12;
  v11 = 0;
  v12 = *(_DWORD *)BugCheckParameter3 - 1;
  if( v12 < 0 )
    goto LABEL_32;
  do
  {
    v13 = (v11 + v12) >> 1;
    v14 = (char *)BugCheckParameter3 + 48 * v13;
    v15 = *((unsigned int *)v14 + 8);
    if( (unsigned int)v10 >= (unsigned int)v15 )
    {
      if( (unsigned int)v10 < (int)v15 + *((_DWORD *)v14 + 12) )
        break;
      v11 = v13 + 1;
    }
    else
    {
      if( !v13 )
        KeBugCheckEx(0x1Au, 0x13000ui64, v6, (ULONG_PTR)BugCheckParameter3, BugCheckParameter4);
      v12 = v13 - 1;
    }
  }
  while( v12 >= v11 );
  if( v12 < v11 )
LABEL_32:
    KeBugCheckEx(0x1Au, 0x13001ui64, v6, (ULONG_PTR)BugCheckParameter3, BugCheckParameter4);
  v23 = *((_QWORD *)v14 + 5) + (unsigned int)v10 - v15;
  ValidPte = MiMakeValidPte((UINT64)(v9 + 1), v23, 536870913i64);
  v9[1] = ValidPte;
  v17 = v9 + 2;
  v25 = (_QWORD)MmGetPteBase() << 25;
  if( v27 > 0x1000 )
  {
    if( v23 >= *((_QWORD *)v14 + 5) + *((_QWORD *)v14 + 6) - 1i64 )
    {
      if( (v14 + 56 - (_BYTE *)BugCheckParameter3 - 8) / 48 == *(_DWORD *)BugCheckParameter3 )
        KeBugCheckEx(0x1Au, 0x13002ui64, v6, (ULONG_PTR)BugCheckParameter3, Size);
      v18 = *((_QWORD *)v14 + 11) << 12;
    }
    else
    {
      v18 = (ValidPte & 0xFFFFFFFFFFFFF000ui64) + 4096;
    }
    ValidPte ^= (ValidPte ^ v18) & 0xFFFFFFFFF000i64;
    *v17 = ValidPte;
    v17 = v9 + 3;
  }
  memmove((UINT8 *)dst, (UINT8 *)((v22 & 0xFFF) + ((((_QWORD)(v9 + 1) << 25) - v25) >> 16)), Size);
  if( Size != 4096 )
  {
    *v17 = ValidPte ^ (ValidPte ^ (qword_140C4EAC0 << 12)) & 0xFFFFFFFFF000i64;
    memmove((UINT8 *)(dst + Size), (UINT8 *)((((_QWORD)v17 << 25) - v25) >> 16), 4096 - Size);
  }
  v19 = v26;
  do
  {
    *v9++ = ZeroPte;
    --v19;
  }
  while( v19 );
  result = (INT64)KeGetCurrentPrcb();
  v21 = *(_QWORD *)(result + 32760);
  if( v21 )
    *(_QWORD *)(v21 + 12344) = 0i64;
  if( CurrentIrql != 17 )
  {
    result = CurrentIrql;
    __writecr8(CurrentIrql);
  }
  return result;
}

Referenced by:

MiCopyFromDirectMapExtent
MiCopyImageExtentContents