IopLiveDumpGetCapturePagesNoLock
VOID __stdcall IopLiveDumpGetCapturePagesNoLock(
_RTL_BITMAP *BitMap,
_LIVEDUMP_BUFFER_DESCRIPTOR *BufferDescriptor,
UINT64 *PfnArrary,
UINT64 *PageCount,
UINT64 *ChunkIndex){
UINT64 v5;
UINT64 v6;
unsigned int v7;
_LIVEDUMP_BUFFER_DESCRIPTOR v11;
char v12;
UINT64 SetBits;
__int64 v14;
__int64 v15;
_QWORD *v16;
v5 = -1i64;
v6 = *((_QWORD *)BufferDescriptor + 6);
v7 = (unsigned int)PageCount;
*(_DWORD *)ChunkIndex = 0;
if( v6 != -1i64 )
{
v11 = 0;
v12 = 1;
if( (_DWORD)PageCount )
{
while( 1 )
{
SetBits = RtlFindSetBitsEx((_RTL_BITMAP_EX *)BitMap, 1ui64, v6);
if( SetBits < v6 || SetBits == -1i64 )
break;
v14 = *(unsigned int *)ChunkIndex;
v6 = SetBits + 1;
PfnArrary[v14] = SetBits;
v11 = v14 + 1;
*(_DWORD *)ChunkIndex = v14 + 1;
if( (int)v14 + 1 >= v7 )
goto LABEL_8;
}
v11 = *(_DWORD *)ChunkIndex;
v12 = 0;
}
LABEL_8:
if( v12 )
v5 = PfnArrary[v11 - 1] + 1;
}
*((_QWORD *)BufferDescriptor + 6) = v5;
if( *(_DWORD *)ChunkIndex )
{
v15 = *((_QWORD *)BufferDescriptor + 7);
BufferDescriptor[10] = *(_DWORD *)ChunkIndex;
*v16 = v15;
*((_QWORD *)BufferDescriptor + 7) = v15 + 1;
}
}Referenced by:
IopLiveDumpBufferDumpData
IopLiveDumpGetNtMergePages