WheapReportDeferredLiveDumps

INT64 __stdcall WheapReportDeferredLiveDumps(){
  void *v0; 
  __int64 v1; 
  bool v2; 
  unsigned int v3; 
  __int64 v4; 
  v0 = 0i64;
  ExAcquireFastMutex(&WheapLiveDumpLock);
  if( (__int64 *)WheapLiveDumpRecordList != &WheapLiveDumpRecordList )
  {
    v0 = (void *)WheapLiveDumpRecordList;
    v1 = *(_QWORD *)WheapLiveDumpRecordList;
    if( *(__int64 **)(WheapLiveDumpRecordList + 8) != &WheapLiveDumpRecordList
      || *(_QWORD *)(v1 + 8) != WheapLiveDumpRecordList )
    {
LABEL_18:
      __fastfail(3u);
    }
    WheapLiveDumpRecordList = *(_QWORD *)WheapLiveDumpRecordList;
    *(_QWORD *)(v1 + 8) = &WheapLiveDumpRecordList;
  }
  KeReleaseGuardedMutex(&WheapLiveDumpLock);
  v2 = 0;
  v3 = 0;
  while( v0 )
  {
    if( !v2 )
      v3 = WheapReportLiveDump((INT64)v0);
    ExFreePoolWithTag(v0, 0x61656857u);
    if( !v2 )
      v2 = v3 != 0;
    ExAcquireFastMutex(&WheapLiveDumpLock);
    v0 = (void *)WheapLiveDumpRecordList;
    if( (__int64 *)WheapLiveDumpRecordList == &WheapLiveDumpRecordList )
    {
      v0 = 0i64;
    }
    else
    {
      if( *(__int64 **)(WheapLiveDumpRecordList + 8) != &WheapLiveDumpRecordList )
        goto LABEL_18;
      v4 = *(_QWORD *)WheapLiveDumpRecordList;
      if( *(_QWORD *)(*(_QWORD *)WheapLiveDumpRecordList + 8i64) != WheapLiveDumpRecordList )
        goto LABEL_18;
      WheapLiveDumpRecordList = *(_QWORD *)WheapLiveDumpRecordList;
      *(_QWORD *)(v4 + 8) = &WheapLiveDumpRecordList;
    }
    KeReleaseGuardedMutex(&WheapLiveDumpLock);
  }
  return v3;
}

Referenced by:

WheaCrashDumpInitializationComplete