IopLiveDumpMarkRequiredDumpData

NTSTATUS __stdcall IopLiveDumpMarkRequiredDumpData(_LIVEDUMP_CONTEXT *Context, UINT64 *MaxAdditionalPageCount){
  _LIVEDUMP_CONTEXT v2; 
  __int64 v5; 
  __int64 v6; 
  NTSTATUS result; 
  int v8; 
  NTSTATUS v9; 
  _TRIAGE_DEVICE_NODE **v10; 
  _TRIAGE_DEVICE_NODE *v11; 
  __int64 v12; 
  _KAFFINITY_ENUMERATION_CONTEXT v13; 
  _MM_KERNEL_DUMP_CONTEXT Contexta[2]; 
  __int64 v15; 
  _LIVEDUMP_CONTEXT *v16; 
  __int64 v17; 
  UINT64 *v18; 
  __int64 v19; 
  UINT64 ProcIndex; 

  v2 = Context[20];
  v17 = 0i64;
  v19 = 0i64;
  *(_DWORD *)(&v13.CurrentIndex + 1) = 0;
  v5 = 0i64;
  *(&v13.CurrentIndex + 3) = 0;
  LODWORD(ProcIndex) = 0;
  if( (v2 & 0x80u) != 0 )
  {
    LODWORD(v6) = IopLiveDumpGetMillisecondCounter(0);
    v5 = v6;
  }
  LODWORD(v19) = v19 | 1;
  v16 = Context + 136;
  v18 = MaxAdditionalPageCount;
  *(_QWORD *)Contexta = IoSetDumpRange;
  v15 = 0i64;
  result = MmAddRangeToCrashDump(Contexta, &KdDebuggerDataBlock, 0x380ui64);
  if( result >= 0 )
  {
    result = MmAddRangeToCrashDump(Contexta, &KiProcessorBlock, 8i64 * (unsigned int)KeNumberProcessors_0);
    if( result >= 0 )
    {
      result = IopLiveDumpMarkLoadedModuleList(Contexta);
      if( result >= 0 )
      {
        v13.CurrentMask = KeActiveProcessors.Bitmap[0];
        v13.Affinity = &KeActiveProcessors;
        v13.CurrentIndex = 0;
        while( 1 )
        {
          KeEnumerateNextProcessor(&ProcIndex, &v13);
          if( v8 )
            break;
          result = IopLiveDumpMarkProcessorData(Contexta, (unsigned int)ProcIndex);
          if( result < 0 )
            return result;
        }
        result = MmAddPrivateDataToCrashDump(Contexta, 2ui64);
        if( result >= 0 )
        {
          result = MmAddRangeToCrashDump(Contexta, &KUSER_SHARED_DATA, 0x720ui64);
          if( result >= 0 )
          {
            result = MmAddPrivateDataToCrashDump(Contexta, 4ui64);
            if( result >= 0 )
            {
              result = MmAddPrivateDataToCrashDump(Contexta, 8ui64);
              v9 = result;
              if( result >= 0 )
              {
                if( *Context != 351
                  || *((_QWORD *)Context + 1) != 2i64
                  || (v10 = (_TRIAGE_DEVICE_NODE **)*((_QWORD *)Context + 2),
                      result = MmAddRangeToCrashDump(Contexta, v10, 0x38ui64),
                      result >= 0)
                  && (result = IopLiveDumpMarkDeviceNode(Contexta, v10[6]), v9 = result, result >= 0)
                  && ((v11 = (_TRIAGE_DEVICE_NODE *)*((_QWORD *)Context + 4)) == 0i64
                   || (result = IopLiveDumpMarkDeviceNode(Contexta, v11), v9 = result, result >= 0)) )
                {
                  if( (Context[20] & 0x80u) != 0 )
                  {
                    LODWORD(v12) = IopLiveDumpGetMillisecondCounter(0);
                    IopLiveDumpTraceMarkRequiredDumpDataDuration((_GUID *)Context, v12 - v5);
                  }
                  return v9;
                }
              }
            }
          }
        }
      }
    }
  }
  return result;
}

Referenced by:

IopLiveDumpEndMirroringCallback