WheapSaveRecordForLiveDump

NTSTATUS __stdcall WheapSaveRecordForLiveDump(INT64 a1){
  size_t v1; 
  NTSTATUS v3; 
  VOID **PoolWithTag; 
  VOID ***v5; 

  v1 = *(_DWORD *)(a1 + 60);
  if( v1 + 32 < v1 )
    return -1073741675;
  v3 = 0;
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v1 + 32, 1634035799i64);
  if( !PoolWithTag )
    return -1073741670;
  *((_DWORD *)PoolWithTag + 4) = *(_DWORD *)(*(_QWORD *)(a1 + 32) + 40i64);
  PoolWithTag[3] = PoolWithTag + 4;
  memmove(PoolWithTag + 4, (const VOID *)(a1 + 40), v1);
  ExAcquireFastMutex((PFAST_MUTEX)((char *)&SbiVmbusArrivalEvent + 2976));
  v5 = (VOID ***)*(&SbiVmbusArrivalEvent + 369);
  if( (_UNKNOWN *)**(&SbiVmbusArrivalEvent + 369) != (_UNKNOWN *)((char *)&SbiVmbusArrivalEvent + 2944) )
    __fastfail(3u);
  *PoolWithTag = (char *)&SbiVmbusArrivalEvent + 2944;
  PoolWithTag[1] = v5;
  *v5 = PoolWithTag;
  *(&SbiVmbusArrivalEvent + 369) = PoolWithTag;
  KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&SbiVmbusArrivalEvent + 2976));
  return v3;
}

Referenced by:

WheapCreateLiveDumpFromPreviousSession