MiFinalizeImageHeaderPage

NTSTATUS __stdcall MiFinalizeImageHeaderPage(PVOID BugCheckParameter2){
  UINT64 *v1; 
  __int64 v2; 
  __int64 v4; 
  _MMPFN *v5; 
  INT64 v6; 
  __int64 v7; 
  unsigned int v8; 
  int v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  NTSTATUS result; 
  unsigned int v13; 
  UINT64 v14; 
  UINT64 v15; 

  v1 = (UINT64 *)((char *)BugCheckParameter2 + 16);
  v2 = *((_QWORD *)BugCheckParameter2 + 2);
  LODWORD(v15) = 0;
  if( *(&stru_140C4DB30 + 42) && (v2 & 0x10) == 0 )
    v2 &= ~*(&stru_140C4DB30 + 42);
  v4 = v2 >> 16;
  v5 = 0i64;
  v6 = *(_QWORD *)(*(&stru_140C4DB30 + 267) + 8i64 * (*(_WORD *)(*(_QWORD *)v4 + 60i64) & 0x3FF));
  if( (unsigned int)MiUseSlabAllocator(v6, (_BYTE *)v4, *v1, &v15) )
  {
    v8 = (*(unsigned __int16 *)(v7 + 32) >> 1) & 0x1F;
    LOBYTE(v9) = MiIsPfnFromSlabAllocation((INT64)BugCheckParameter2);
    if( !v9 || !MiCheckSlabPage((INT64)BugCheckParameter2, (unsigned int)v15, v8) && !(_DWORD)v15 )
    {
      LODWORD(v14) = 0x20000;
      LODWORD(v10) = MiGetSlabPage(v6, v8, (unsigned int)v15, (INT64 *)0xFFFFFFFFFFFFFFFFi64, v14);
      if( v10 != -1 )
        v5 = &MmGetPfnDb()[v10];
    }
  }
  v11 = MiLockPageInline((_MMPFN *)BugCheckParameter2);
  MiRemoveLockedPageChargeAndDecRef((_MMPFN *)BugCheckParameter2);
  if( v5 && !*((_WORD *)BugCheckParameter2 + 16) )
  {
    LOBYTE(v13) = MiIsPfnFromSlabAllocation((INT64)BugCheckParameter2);
    MiReplaceTransitionPage(BugCheckParameter2, v5, (_MMPTE_COPY_LIST *)v13);
    *v1 = ZeroPte.u.Long;
    MiSetOriginalPtePfnFromFreeList(v1);
    v5 = (_MMPFN *)BugCheckParameter2;
  }
  _InterlockedAnd64((volatile signed __int64 *)BugCheckParameter2 + 3, 0x7FFFFFFFFFFFFFFFui64);
  result = KiIrqlFlags;
  __writecr8(v11);
  if( v5 )
    MiReleaseFreshPage(v5);
  return result;
}

Referenced by:

No references.