IopFillTriageDumpDataBlocks
int __fastcall IopFillTriageDumpDataBlocks(unsigned int *a1, int a2, __int64 a3, __int64 a4){
__int64 v4;
__int64 v5;
__int64 v7;
__int64 v8;
char *v9;
unsigned int i;
__int64 v11;
ULONGLONG *v12;
unsigned int v13;
__int64 v14;
unsigned __int64 v15;
int v16;
char *v17;
size_t v18;
ULONGLONG pullResult;
char *v21;
__int64 v22;
ULONGLONG *v23;
__int64 v24;
__int64 v25;
__int64 v27;
v27 = a3;
v4 = a4;
LODWORD(v5) = a2;
pullResult = 0i64;
v7 = a4 + a1[30];
v24 = v7;
v8 = v7;
v22 = v7;
v9 = (char *)(v7 + 16i64 * a1[31]);
v21 = v9;
for( i = 0; i < (unsigned int)v5; ++i )
{
v11 = i;
v25 = i;
v12 = *(ULONGLONG **)(a3 + 16i64 * i + 8);
v13 = 0;
while( 1 )
{
v23 = v12;
if( v13 >= *(_DWORD *)(a3 + 16 * v11) )
break;
v5 = (v8 - v7) >> 4;
if( (unsigned int)v5 >= a1[31] )
return v5;
LODWORD(v5) = v8 + 16;
if( v8 + 16 > v4 + (unsigned __int64)a1[1] )
return v5;
LODWORD(v5) = RtlULongLongSub(v12[1], *v12, &pullResult);
if( (int)v5 < 0 )
return v5;
v17 = &v9[(unsigned int)pullResult];
if( v17 < v9 || (unsigned __int64)v17 > v15 )
return v5;
*(_QWORD *)v8 = v14;
*(_DWORD *)(v8 + 8) = (_DWORD)v9 - v16;
v18 = *((_DWORD *)v12 + 2) - *(_DWORD *)v12;
*(_DWORD *)(v8 + 12) = v18;
memmove(v9, (const VOID *)*v12, v18);
v9 += *(unsigned int *)(v8 + 12);
v21 = v9;
v8 += 16i64;
v22 = v8;
++v13;
v12 += 2;
v11 = v25;
v4 = a4;
a3 = v27;
}
LODWORD(v5) = a2;
}
return v5;
}Referenced by:
IoFillTriageDumpBuffer