IopLiveDumpWriteSecondaryData

NTSTATUS __stdcall IopLiveDumpWriteSecondaryData(
        VOID *DumpFileHandle,
        _IO_LIVEDUMP_SECONDARY_DATA_HEADER *SecondaryDataHeader,
        _LARGE_INTEGER *ByteOffset,
        UINT64 *BytesWritten){
  __int64 v4; 
  UINT64 v5; 
  int v9; 
  __int64 v10; 
  __int64 v11; 
  int Buffer[2]; 
  unsigned int v14; 
  int v15; 
  unsigned int i; 
  __int128 v17; 
  int v18; 
  int v19; 
  int v20; 

  v4 = *((_QWORD *)SecondaryDataHeader + 1);
  v5 = 0i64;
  if( v4 )
  {
    v14 = 16;
    qmemcpy(Buffer, "DumpBlob", sizeof(Buffer));
    v15 = NtBuildNumber;
    v9 = IopLiveDumpWriteBuffer(DumpFileHandle, Buffer, (_CONTEXT *)0x10, ByteOffset);
    if( v9 >= 0 )
    {
      v19 = 0;
      v10 = 32i64;
      v20 = 0;
      v5 = v14;
      for( i = 32; ; v10 = i )
      {
        v17 = *(_OWORD *)v4;
        v18 = *(_DWORD *)(v4 + 24);
        v9 = IopLiveDumpWriteBuffer(DumpFileHandle, &i, (_CONTEXT *)v10, ByteOffset);
        if( v9 < 0 )
          break;
        v5 += i;
        v9 = IopLiveDumpWriteBuffer(
               DumpFileHandle,
               *(VOID **)(v4 + 16),
               (_CONTEXT *)*(unsigned int *)(v4 + 24),
               ByteOffset);
        if( v9 < 0 )
          break;
        v11 = *(unsigned int *)(v4 + 24);
        v4 = *(_QWORD *)(v4 + 32);
        v5 += v11;
        if( !v4 )
          break;
      }
    }
  }
  else
  {
    v9 = 0;
  }
  if( BytesWritten )
    *BytesWritten = v5;
  return v9;
}

Referenced by:

IopLiveDumpWriteDumpFile