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