PspIumFreePartitionPages

VOID __stdcall PspIumFreePartitionPages(INT64 a1, INT64 a2, UINT64 *a3){
  __int64 v3; 
  __int64 v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  unsigned int v9; 

  v3 = *(_QWORD *)(a1 + 160);
  LODWORD(v6) = a2;
  v7 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)(a1 + 88));
  v8 = *(unsigned int *)(a1 + 156);
  v9 = *(_DWORD *)(a1 + 152) - v8 - *(_DWORD *)(a1 + 4);
  if( v9 > (unsigned int)v6 )
    v9 = v6;
  if( v9 )
  {
    v6 = (unsigned int)v6 - v9;
    memmove((VOID *)(v3 + 8 * (v8 + 6)), &a3[v6], 8 * v9);
    *(_DWORD *)(a1 + 156) += v9;
  }
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(a1 + 88));
  __writecr8(v7);
  if( (_DWORD)v6 )
    MmFreeNonChargedSecurePages(*(UINT64 ***)(a1 + 8), (unsigned int)v6, a3);
}

Referenced by:

PspIumFreePhysicalPages