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