MiFillPageWithImageExtentContents

_KPRCB *__stdcall MiFillPageWithImageExtentContents(
        ULONG_PTR BugCheckParameter3,
        INT64 a2,
        ULONG_PTR BugCheckParameter2,
        ULONG_PTR BugCheckParameter4,
        INT64 a5){
  void *v5; 
  _DWORD *v6; 
  unsigned __int64 v7; 
  unsigned int v9; 
  char *v10; 
  __int64 v11; 
  __int64 v12; 
  int v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  int v16; 
  int v17; 
  int v18; 
  _DWORD *v19; 
  __int64 v20; 
  unsigned __int64 *v21; 
  unsigned __int64 v22; 
  unsigned __int64 v23; 
  unsigned __int64 v24; 
  int v25; 
  __int64 v26; 
  UINT64 v27; 
  const VOID *v28; 
  unsigned __int64 v29; 
  unsigned __int64 v30; 
  int v31; 
  __int64 v32; 
  int v33; 
  __int64 v34; 
  unsigned __int64 Long; 
  int v36; 
  _KPRCB *result; 
  _QWORD *MmInternal; 
  __int16 v39; 
  unsigned __int64 v40; 
  unsigned __int64 HyperSpace; 
  __int64 v42; 
  __int64 v43; 
  ULONG_PTR v44; 
  unsigned __int8 CurrentIrql; 

  v5 = (void *)BugCheckParameter4;
  v39 = BugCheckParameter2;
  v6 = *(_DWORD **)&BugCheckParameter3;
  v7 = *(_QWORD *)&BugCheckParameter2;
  v44 = (BugCheckParameter2 & 0xFFF) + BugCheckParameter4;
  v9 = (v44 > 0x1000) + 3;
  if( BugCheckParameter4 == 4096 )
    v9 = (v44 > 0x1000) + 2;
  if( (_DWORD)a5 )
  {
    CurrentIrql = 17;
  }
  else
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
  }
  v43 = v9;
  HyperSpace = (unsigned __int64)MiAllocateHyperSpace();
  v10 = (char *)MmGetPteBase() + ((HyperSpace >> 9) & 0x7FFFFFFFF8i64);
  LODWORD(v11) = MiMakeValidPte((_XSTATE_CONFIGURATION *)v10, a2, 2684354564i64);
  v12 = v11;
  LOBYTE(v13) = MiPteInShadowRange((UINT64)v10);
  if( v13 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v12 & 1) != 0 )
    v12 |= v14;
  *(_QWORD *)v10 = v12;
  v15 = v7 >> 12;
  v16 = 0;
  v17 = *v6 - 1;
  if( v17 < 0 )
    goto LABEL_52;
  do
  {
    v18 = (v16 + v17) >> 1;
    v19 = &v6[12 * v18];
    v20 = (unsigned int)v19[8];
    if( (unsigned int)v15 >= (unsigned int)v20 )
    {
      if( (unsigned int)v15 < (int)v20 + v19[12] )
        break;
      v16 = v18 + 1;
    }
    else
    {
      if( !v18 )
        KeBugCheckEx(0x1Au, (PVOID)0x13000, (PVOID)v7, v6, v5);
      v17 = v18 - 1;
    }
  }
  while( v17 >= v16 );
  if( v17 < v16 )
LABEL_52:
    KeBugCheckEx(0x1Au, (PVOID)0x13001, (PVOID)v7, v6, v5);
  v21 = (unsigned __int64 *)(v10 + 8);
  v40 = *((_QWORD *)v19 + 5) + (unsigned int)v15 - v20;
  LODWORD(v22) = MiMakeValidPte((_XSTATE_CONFIGURATION *)(v10 + 8), v40, 536870913i64);
  v23 = v22;
  v24 = v22;
  LOBYTE(v25) = MiPteInShadowRange((UINT64)(v10 + 8));
  if( v25 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v23 & 1) != 0 )
    v24 |= 0x8000000000000000ui64;
  *v21 = v24;
  v26 = (_QWORD)v21 << 25;
  v27 = (UINT64)(v10 + 16);
  v42 = (_QWORD)MmGetPteBase() << 25;
  v28 = (const VOID *)((v39 & 0xFFF) + ((v26 - v42) >> 16));
  if( v44 > 0x1000 )
  {
    if( v40 >= *((_QWORD *)v19 + 5) + *((_QWORD *)v19 + 6) - 1i64 )
    {
      if( ((char *)(v19 + 14) - (char *)v6 - 8) / 48 == *v6 )
        KeBugCheckEx(0x1Au, (PVOID)0x13002, (PVOID)v7, v6, (PVOID)BugCheckParameter4);
      v29 = *((_QWORD *)v19 + 11) << 12;
    }
    else
    {
      v29 = (v23 & 0xFFFFFFFFFFFFF000ui64) + 4096;
    }
    v23 ^= (v23 ^ v29) & 0xFFFFFFFFF000i64;
    v30 = v23;
    LOBYTE(v31) = MiPteInShadowRange(v27);
    if( v31 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v23 & 1) != 0 )
      v30 = v23 | 0x8000000000000000ui64;
    *(_QWORD *)v27 = v30;
    v27 = (UINT64)(v10 + 24);
  }
  memmove((VOID *)HyperSpace, v28, BugCheckParameter4);
  if( BugCheckParameter4 != 4096 )
  {
    v32 = v23 ^ (v23 ^ (*(&stru_140C4DB30 + 498) << 12)) & 0xFFFFFFFFF000i64;
    LOBYTE(v33) = MiPteInShadowRange(v27);
    if( v33 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v32 & 1) != 0 )
      v32 |= 0x8000000000000000ui64;
    *(_QWORD *)v27 = v32;
    memmove(
      (VOID *)(HyperSpace + BugCheckParameter4),
      (const VOID *)((__int64)((v27 << 25) - v42) >> 16),
      4096 - BugCheckParameter4);
  }
  v34 = v43;
  do
  {
    Long = ZeroPte.u.Long;
    LOBYTE(v36) = MiPteInShadowRange((UINT64)v10);
    if( v36 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
      Long = ZeroPte.u.Long | 0x8000000000000000ui64;
    *(_QWORD *)v10 = Long;
    v10 += 8;
    --v34;
  }
  while( v34 );
  result = KeGetCurrentPrcb();
  MmInternal = result->MmInternal;
  if( MmInternal )
    MmInternal[1543] = 0i64;
  if( CurrentIrql != 17 )
  {
    result = (_KPRCB *)CurrentIrql;
    __writecr8(CurrentIrql);
  }
  return result;
}

Referenced by:

MiCopyFromDirectMapExtent
MiCopyImageExtentContents