DbgkpWerCaptureLiveTriageDump

__int64 __fastcall DbgkpWerCaptureLiveTriageDump(__int64 a1){
  VOID *PoolWithTag; 
  unsigned int v3; 
  int v4; 
  int v5; 
  int v6; 
  int v7; 
  CONTEXT ContextRecord; 
  DbgPrintEx(5u, 3u, "DBGK: Creating mini live dump. ComponentName %ws\n", a1);
  *(_DWORD *)(a1 + 92) = 1048572;
  memset((INT64)&ContextRecord, 0i64);
  PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x40000ui64, 0x57676244ui64);
  *(_QWORD *)(a1 + 144) = PoolWithTag;
  if( PoolWithTag )
  {
    RtlCaptureContext(&ContextRecord);
    v4 = KeCapturePersistentThreadState(
           (__int64)&ContextRecord,
           0i64,
           *(_DWORD *)(a1 + 32),
           *(_QWORD *)(a1 + 40),
           *(_QWORD *)(a1 + 48),
           *(_QWORD *)(a1 + 56),
           *(_QWORD *)(a1 + 64),
           *(_QWORD *)(a1 + 144));
    if( v4 )
    {
      *(_DWORD *)(a1 + 152) = v4;
      v5 = DbgkpWerInvokeCallbacks(a1);
      v3 = v5;
      if( v5 >= 0 )
      {
        v6 = DbgkpWerWriteTriageDump(a1);
        v3 = v6;
        if( v6 >= 0 )
        {
          v7 = WerLiveKernelSubmitReport(*(_QWORD *)(a1 + 104), 0i64);
          v3 = v7;
          if( v7 >= 0 )
            *(_DWORD *)(a1 + 112) |= 1u;
          else
            DbgPrintEx(
              5u,
              0,
              "DBGK: DbgkpWerCaptureLiveTriageDump: WerLiveKernelSubmitReport failed with status 0x%X\n",
              (unsigned int)v7);
        }
        else
        {
          DbgPrintEx(5u, 0, "DBGK: DbgkpWerWriteTriageDump failed, status 0x%X\n", (unsigned int)v6);
        }
      }
      else
      {
        DbgPrintEx(5u, 0, "DBGK: DbgkpWerInvokeCallbacks failed, status 0x%X\n", (unsigned int)v5);
      }
    }
    else
    {
      DbgPrintEx(5u, 0, "DBGK: KeCapturePersistentThreadState failed\n");
      return(unsigned int)-1073741823;
    }
  }
  else
  {
    return(unsigned int)-1073741801;
  }
  return v3;
}

Referenced by:

DbgkpWerProcessPolicyResult