MiUpdatePartitionMemory

VOID __stdcall MiUpdatePartitionMemory(_MI_PARTITION *Partition, _MI_INSERT_PAGES *InsertInfo){
  INT64 *p_DynamicMemoryLock; 
  unsigned __int8 v5; 
  _PHYSICAL_MEMORY_DESCRIPTOR *MemoryNodeRuns; 
  _PHYSICAL_MEMORY_DESCRIPTOR *v7; 
  _PHYSICAL_MEMORY_DESCRIPTOR *MemoryRuns; 
  unsigned __int64 v9; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  p_DynamicMemoryLock = (INT64 *)&Partition->Core.DynamicMemoryLock;
  memset(&LockHandle, 0, sizeof(LockHandle));
  v5 = ExAcquireSpinLockExclusive((INT64 *)&Partition->Core.DynamicMemoryLock);
  MemoryNodeRuns = Partition->Core.MemoryNodeRuns;
  v7 = (_PHYSICAL_MEMORY_DESCRIPTOR *)*((_QWORD *)InsertInfo + 1);
  MemoryRuns = Partition->Core.MemoryRuns;
  Partition->Core.MemoryNodeRuns = (_PHYSICAL_MEMORY_DESCRIPTOR *)*((_QWORD *)InsertInfo + 2);
  v9 = v5;
  Partition->Core.MemoryRuns = v7;
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C4DB30 + 258, &LockHandle);
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  ExReleaseSpinLockExclusiveFromDpcLevel(p_DynamicMemoryLock);
  __writecr8(v9);
  MiComputeNodeMemory(Partition);
  if( MemoryNodeRuns )
    MiDereferencePageRunsEx((INT64)MemoryNodeRuns, 0i64);
  if( MemoryRuns )
    MiDereferencePageRunsEx((INT64)MemoryRuns, 0i64);
}

Referenced by:

MiMakePartitionMemoryBlock