IopLiveDumpBufferDumpData

VOID __stdcall IopLiveDumpBufferDumpData(
        _LIVEDUMP_CORRAL_CONTEXT *CorralContext,
        _LIVEDUMP_PROCESSOR_PRIVATE_CONTEXT *PrivateContext){
  _RTL_BITMAP *v2; 
  unsigned int ProcessorNumber; 
  UINT64 *p_Buffer; 
  UINT64 *v5; 
  __int64 v6; 
  __int64 v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned int v11; 
  UINT64 *v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  _DWORD *v16; 
  __int64 v17; 
  unsigned __int64 v18; 
  _DWORD *v19; 
  __int64 v20; 
  unsigned int **v21; 
  UINT64 *v22; 
  UINT64 ChunkIndex; 
  __int64 v24; 
  _DWORD *v25; 
  _RTL_BITMAP *BitMap; 

  v2 = *(_RTL_BITMAP **)CorralContext;
  v24 = 0i64;
  LODWORD(ChunkIndex) = 0;
  ProcessorNumber = PrivateContext->ProcessorNumber;
  p_Buffer = (UINT64 *)&v2[42].Buffer;
  v21 = &v2[42].Buffer;
  if( PrivateContext->ProcessorNumber < v2[49].SizeOfBitMap && ProcessorNumber < v2[63].SizeOfBitMap )
  {
    v5 = *(UINT64 **)&v2[63].Buffer[2 * ProcessorNumber];
    v6 = (__int64)&v2[49].Buffer[4 * ProcessorNumber];
    v22 = v5;
    BitMap = v2 + 34;
    v7 = *(_QWORD *)(v6 + 8) + 48i64;
    v20 = v7;
    while( 1 )
    {
      v8 = (unsigned int)BufferChunkSizeInPages;
      KxAcquireSpinLock(p_Buffer + 4);
      IopLiveDumpGetCapturePagesNoLock(BitMap, (_LIVEDUMP_BUFFER_DESCRIPTOR *)p_Buffer, v5, (UINT64 *)v8, &ChunkIndex);
      KxReleaseSpinLock(p_Buffer + 4);
      v9 = ChunkIndex;
      if( !(_DWORD)ChunkIndex )
        break;
      v10 = 0;
      v11 = 0;
      v25 = *(_DWORD **)(p_Buffer[9] + 8 * v24);
      if( (_DWORD)ChunkIndex )
      {
        v12 = v5;
        do
        {
          v13 = v10++;
          *(_QWORD *)(v7 + 8 * v13) = *v12;
          if( v10 == 16 || v10 && v11 == v9 - 1 )
          {
            v14 = *(_QWORD *)(v6 + 8);
            *(_DWORD *)(v14 + 40) = v10 << 12;
            *(_QWORD *)v14 = 0i64;
            *(_WORD *)(v14 + 10) = 0;
            *(_QWORD *)(v14 + 32) = 0i64;
            *(_DWORD *)(v14 + 44) = 0;
            *(_WORD *)(v14 + 8) = 8 * (((unsigned __int64)(v10 << 12) >> 12) + 6);
            v15 = v10 << 12;
            MmMapMemoryDumpMdlEx(*(_QWORD *)v6, v10, *(_QWORD *)(v6 + 8), 0i64);
            v16 = *(_DWORD **)(*(_QWORD *)(v6 + 8) + 24i64);
            v17 = (__int64)v25;
            v18 = (unsigned __int64)(unsigned int)v15 >> 2;
            v19 = v25;
            while( v18 )
            {
              *v19++ = *v16++;
              --v18;
            }
            v7 = v20;
            v25 = (_DWORD *)(v15 + v17);
            v10 = 0;
          }
          ++v11;
          ++v12;
        }
        while( v11 < v9 );
        p_Buffer = (UINT64 *)v21;
        v5 = v22;
      }
    }
  }
}

Referenced by:

IopLiveDumpProcessCorralStateChange