WheapReportLiveDump

NTSTATUS __stdcall WheapReportLiveDump(INT64 a1){
  __int64 v1; 
  void *BugCheckParam3; 
  void *v3; 
  unsigned __int64 BugCheckParam4; 
  int v5; 
  unsigned int *v6; 
  unsigned __int64 v7; 
  INT64 v8; 
  INT64 v9; 
  int inserted; 

  v1 = *(_QWORD *)(a1 + 24);
  BugCheckParam3 = 0i64;
  v3 = (void *)*(int *)(a1 + 16);
  BugCheckParam4 = 0i64;
  v5 = 0;
  v6 = (unsigned int *)(v1 + 128);
  if( *(_WORD *)(v1 + 10) )
  {
    while( 1 )
    {
      a1 = *((_QWORD *)v6 + 2) - *(_QWORD *)&XPF_MCA_SECTION_GUID.Data1;
      if( !a1 )
        a1 = *((_QWORD *)v6 + 3) - *(_QWORD *)XPF_MCA_SECTION_GUID.Data4;
      if( !a1 )
        break;
      v6 += 18;
      if( ++v5 >= (unsigned int)*(unsigned __int16 *)(v1 + 10) )
        goto LABEL_8;
    }
    v7 = *(_QWORD *)(*v6 + v1 + 40);
    BugCheckParam4 = (unsigned int)v7;
    BugCheckParam3 = (void *)HIDWORD(v7);
  }
LABEL_8:
  LODWORD(v8) = LkmdTelCreateReport(
                  (PWCHAR)a1,
                  (UINT32)BugCheckParam3,
                  v3,
                  (PVOID)v1,
                  BugCheckParam3,
                  (PVOID)BugCheckParam4);
  v9 = v8;
  if( !v8 )
    return -1073741670;
  inserted = LkmdTelInsertTriageDataBlock(v8, (PVOID)v1, *(_DWORD *)(v1 + 20));
  if( inserted >= 0 )
    inserted = LkmdTelSubmitReport(v9);
  if( *(_DWORD *)(v9 + 8) )
  {
    if( *(_QWORD *)v9 )
      ExFreePoolWithTag(*(PVOID *)v9, 0x74614454u);
    *(_DWORD *)(v9 + 8) = 0;
  }
  ExFreePoolWithTag((PVOID)v9, 0x74614454u);
  return inserted;
}

Referenced by:

WheapCreateLiveDumpFromPreviousSession
WheapReportDeferredLiveDumps