WheapAllocErrorRecord

INT64 __fastcall WheapAllocErrorRecord(INT64 a1, UINT64 *a2){
  unsigned int v4; 
  VOID *PoolWithTag; 
  INT64 v6; 
  unsigned int v7; 
  INT64 PreallocatedErrorRecord; 
  v4 = *(_DWORD *)(a1 + 32);
  *(_DWORD *)a2 = v4;
  if( KeGetCurrentIrql() > 2u )
  {
    PreallocatedErrorRecord = WheapGetPreallocatedErrorRecord(a1);
    v6 = PreallocatedErrorRecord;
    if( PreallocatedErrorRecord )
    {
      *(_DWORD *)(PreallocatedErrorRecord + 24) = 1;
      goto LABEL_6;
    }
LABEL_7:
    *(_DWORD *)a2 = 0;
    return v6;
  }
  PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, v4, *(unsigned int *)(a1 + 36));
  v6 = (INT64)PoolWithTag;
  if( !PoolWithTag )
    goto LABEL_7;
  v7 = *(_DWORD *)a2;
  memset((INT64)PoolWithTag, 0i64);
  WheapInitializeErrorRecordWrapper(v6, v7, a1);
LABEL_6:
  *(_QWORD *)(v6 + 32) = a1;
  return v6;
}

Referenced by:

WheaReportHwError
WheapReportBootError