IopAddTriageDumpDataBlock

VOID __fastcall IopAddTriageDumpDataBlock(
        UINT64 NumDataArrays,
        _IO_TRIAGE_DUMP_DATA_ARRAY *DataArrays,
        _IO_TRIAGE_DUMP_DATA_ARRAY *ModifyArray,
        VOID *Address,
        UINT64 Length){
  char *v6; 
  unsigned int v8; 
  unsigned int v9; 
  char *i; 
  unsigned int v11; 
  char **j; 
  unsigned int v13; 
  _QWORD *v14; 
  unsigned __int64 v15; 

  v6 = (char *)Address;
  v8 = NumDataArrays;
  if( (unsigned int)(Length - 1) <= 0x3FFFE && KiIsAddressRangeValid((INT64)Address, (unsigned int)Length) )
  {
    v9 = 0;
    for( i = &v6[(unsigned int)Length]; v9 < v8; DataArrays += 4 )
    {
      v11 = 0;
      for( j = (char **)*((_QWORD *)DataArrays + 1); v11 < *DataArrays; j += 2 )
      {
        v15 = (unsigned __int64)j[1];
        if( (unsigned __int64)v6 < v15 && i > *j )
        {
          if( v6 < *j )
          {
            if( (unsigned __int64)i <= v15 )
              i = *j;
          }
          else
          {
            if( (unsigned __int64)i <= v15 )
              return;
            v6 = j[1];
          }
        }
        ++v11;
      }
      ++v9;
    }
    if( ModifyArray )
    {
      v13 = *ModifyArray;
      if( *ModifyArray < (unsigned int)ModifyArray[1] )
      {
        v14 = (_QWORD *)(*((_QWORD *)ModifyArray + 1) + 16i64 * v13);
        *ModifyArray = v13 + 1;
        *v14 = v6;
        v14[1] = i;
      }
    }
  }
}

Referenced by:

IoAddTriageDumpDataBlock
IopAddRunTimeTriageDataBlocks