MiPerformMemoryChange

VOID __stdcall MiPerformMemoryChange(
        UINT64 StartPage,
        UINT64 NumberOfPages,
        PHYSICAL_MEMORY_DESCRIPTOR **NewPhysicalMemoryBlock,
        PHYSICAL_MEMORY_DESCRIPTOR **NewPageRunBlock,
        UINT64 Flags){
  unsigned __int8 v9; 
  PHYSICAL_MEMORY_DESCRIPTOR *v10; 
  unsigned __int64 v11; 
  bool v12; 
  PHYSICAL_MEMORY_DESCRIPTOR *v13; 
  __int64 v14; 
  PHYSICAL_MEMORY_DESCRIPTOR *v15; 
  PHYSICAL_MEMORY_DESCRIPTOR *v16; 
  UINT64 v17; 

  v9 = ExAcquireSpinLockExclusive((INT64 *)&stru_140C50B28 + 12);
  v10 = *NewPhysicalMemoryBlock;
  v11 = v9;
  v12 = MmPhysicalMemoryBlock[-1].Run[0].PageCount-- == 1;
  v13 = 0i64;
  v14 = *(_QWORD *)&qword_140C50AE0;
  if( v12 )
    v13 = MmPhysicalMemoryBlock;
  MmPhysicalMemoryBlock = v10;
  *NewPhysicalMemoryBlock = v13;
  v12 = (*(_QWORD *)(v14 - 8))-- == 1i64;
  v15 = 0i64;
  v16 = *NewPageRunBlock;
  if( v12 )
    v15 = *(PHYSICAL_MEMORY_DESCRIPTOR **)&qword_140C50AE0;
  v17 = StartPage + NumberOfPages - 1;
  *NewPageRunBlock = v15;
  *(_QWORD *)&qword_140C50AE0 = v16;
  if( (Flags & 1) == 0 )
  {
    if( v17 == *(&stru_140C50B28 + 852) )
      *(&stru_140C50B28 + 852) = StartPage - 1;
    *(&stru_140C50B28 + 853) -= NumberOfPages;
    goto LABEL_13;
  }
  if( v17 > *(&stru_140C50B28 + 852) )
    *(&stru_140C50B28 + 852) = StartPage + NumberOfPages - 1;
  if( (Flags & 4) == 0 )
  {
    *(&stru_140C50B28 + 853) += NumberOfPages;
LABEL_13:
    byte_140C50ACC = 1;
  }
  MiInitializeNonPagedPoolThresholds((UINT8)v15);
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&stru_140C50B28 + 12);
  __writecr8(v11);
}

Referenced by:

MiAddPhysicalMemory
MiRemovePhysicalMemory