PfTCreateTraceDump
__int64 __fastcall PfTCreateTraceDump(_QWORD *a1){
__int64 *v1;
__int64 v2;
int v3;
int v4;
unsigned int i;
size_t v6;
VOID **PoolWithTag;
VOID **v8;
char *v9;
__int16 v10;
unsigned int v11;
unsigned __int64 v12;
__int64 v13;
unsigned __int16 v14;
unsigned __int16 v15;
__int64 v16;
__int64 v17;
__int64 v18;
unsigned __int64 v19;
__int64 v20;
__int64 v21;
__int64 v22;
unsigned __int64 v23;
unsigned __int16 v24;
unsigned __int16 v25;
int v26;
int v27;
unsigned int v28;
VOID **v29;
VOID **v30;
char *v31;
unsigned int v32;
unsigned __int64 v33;
unsigned int v34;
unsigned int v35;
unsigned __int64 v36;
_WORD *v37;
__int64 v38;
__int64 v39;
unsigned int v40;
__int64 v41;
unsigned __int16 v42;
unsigned __int16 v43;
__int64 v44;
unsigned __int64 v45;
_OWORD *v46;
__int64 v47;
unsigned __int64 v48;
_OWORD *v49;
unsigned __int16 v50;
unsigned __int16 v51;
unsigned __int64 v52;
unsigned __int16 v53;
unsigned __int16 v54;
int v55;
unsigned int v57;
__int16 v58;
__int64 v59;
__int64 v60;
__int16 v61;
__int64 v62;
__int64 v63;
__int64 v64;
__int64 v65;
__int64 v66;
__int64 v67;
__int64 v68;
__int64 v69;
VOID **P;
unsigned __int64 v71;
char *v72;
unsigned __int64 v73;
VOID **v74;
__int64 v75[12];
unsigned __int16 v77;
__int16 v78;
unsigned __int64 v79;
memset(v75, 0i64, sizeof(v75));
v1 = (__int64 *)*(&stru_140C4DB30 + 965);
v2 = *(&stru_140C4DB30 + 966);
v3 = 0;
v4 = 0;
for( i = 0; v1 != (__int64 *)((char *)&stru_140C4DB30 + 7720); v1 = (__int64 *)*v1 )
i += *((_DWORD *)v1 + 8);
v6 = 2 * i;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 2i64 * i, 1951688272i64);
P = PoolWithTag;
v8 = PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, v6);
v9 = (char *)&stru_140C4DB30 + 7680;
v10 = *(_WORD *)(*(&stru_140C4DB30 + 966) + 36i64);
v78 = v10;
do
{
v9 = (char *)*((_QWORD *)v9 + 1);
v11 = 0;
if( *((_DWORD *)v9 + 4) )
{
while( 1 )
{
v12 = ((unsigned __int64)(v9 + 31) & 0xFFFFFFFFFFFFFFF8ui64) + 16i64 * v11;
v13 = *(_QWORD *)v12;
if( ((unsigned __int8)*(_QWORD *)v12 & 3u) < 2 )
break;
v57 = ((unsigned int)v13 >> 2) & 0x3FF;
v3 += v57;
v11 = v57 + v11 - 1;
if( (v13 & 3) == 2 )
{
LODWORD(v13) = *(_DWORD *)(v12 + 16);
v12 += 16i64;
goto LABEL_8;
}
LABEL_26:
if( ++v11 >= *((_DWORD *)v9 + 4) )
goto LABEL_27;
}
++v3;
LABEL_8:
if( (v13 & 3) != 0 )
{
v15 = -1;
if( (*(_BYTE *)v12 & 0x18) == 16 )
v14 = *(_WORD *)(v12 + 10);
else
v14 = -1;
}
else
{
v14 = *(_WORD *)(v12 + 10);
v15 = *(_WORD *)(v12 + 8);
}
if( v15 == 0xFFFF )
{
v19 = 0i64;
}
else
{
v16 = *(unsigned __int16 *)(v2 + 36);
if( v15 < (unsigned __int16)v16 || v15 >= (unsigned int)(*(_DWORD *)(v2 + 32) + v16) )
{
v66 = v2;
while( 1 )
{
v66 = *(_QWORD *)(v66 + 8);
if( (_UNKNOWN *)v66 == (_UNKNOWN *)((char *)&stru_140C4DB30 + 7720) )
v66 = *(&stru_140C4DB30 + 966);
if( v66 == v2 )
break;
v67 = *(unsigned __int16 *)(v66 + 36);
if( v15 >= (unsigned __int16)v67 && v15 < (unsigned int)(*(_DWORD *)(v66 + 32) + v67) )
{
v17 = v66 + 47;
v18 = v15 - v67;
v2 = v66;
goto LABEL_14;
}
}
v19 = 0i64;
}
else
{
v17 = v2 + 47;
v18 = v15 - v16;
LABEL_14:
v19 = (v17 & 0xFFFFFFFFFFFFFFF8ui64) + 40 * v18 + 8;
}
}
if( v14 == 0xFFFF )
{
v23 = 0i64;
}
else
{
v20 = *(unsigned __int16 *)(v2 + 36);
if( v14 < (unsigned __int16)v20 || v14 >= (unsigned int)(*(_DWORD *)(v2 + 32) + v20) )
{
v68 = v2;
while( 1 )
{
v68 = *(_QWORD *)(v68 + 8);
if( (_UNKNOWN *)v68 == (_UNKNOWN *)((char *)&stru_140C4DB30 + 7720) )
v68 = *(&stru_140C4DB30 + 966);
if( v68 == v2 )
break;
v69 = *(unsigned __int16 *)(v68 + 36);
if( v14 >= (unsigned __int16)v69 && v14 < (unsigned int)(*(_DWORD *)(v68 + 32) + v69) )
{
v21 = v68 + 47;
v22 = v14 - v69;
v2 = v68;
v10 = v78;
goto LABEL_19;
}
}
v10 = v78;
v23 = 0i64;
}
else
{
v21 = v2 + 47;
v22 = v14 - v20;
LABEL_19:
v23 = (v21 & 0xFFFFFFFFFFFFFFF8ui64) + 40 * v22 + 8;
}
}
if( v19 )
{
v24 = v15 - v10;
if( *((_WORD *)v8 + v24) != 0xFFFF )
{
*((_WORD *)v8 + v24) = -1;
++v4;
}
}
if( v23 )
{
v25 = v14 - v10;
if( *((_WORD *)v8 + v25) != 0xFFFF )
{
*((_WORD *)v8 + v25) = -1;
++v4;
}
}
goto LABEL_26;
}
LABEL_27:
;
}
while( v9 != (char *)*(&stru_140C4DB30 + 960) );
if( v3 )
{
v26 = 16 * v3;
v27 = 32 * v4;
v28 = v27 + ((v26 + 63) & 0xFFFFFFF8);
v29 = ExAllocatePoolWithTag(1ui64, v28, 1146381904i64);
v74 = v29;
if( v29 )
{
v30 = v29 + 4;
*((_OWORD *)v29 + 1) = 0i64;
v31 = (char *)&stru_140C4DB30 + 7680;
*((_OWORD *)v29 + 2) = 0i64;
v29[6] = 0i64;
*((_DWORD *)v29 + 6) = v28 - 16;
v32 = 0;
*((_DWORD *)v29 + 4) = 852013;
*((_DWORD *)v29 + 5) = 1128485697;
v33 = (unsigned __int64)v29 + (unsigned int)(v26 + 24) + 32;
*((_DWORD *)v29 + 7) = 0;
v34 = 0;
*((_DWORD *)v29 + 10) = v26 + 24;
*((_DWORD *)v29 + 8) = 24;
v71 = (unsigned __int64)v29 + (unsigned int)(v26 + 24 + v27) + 32;
v75[9] = v71;
*((_DWORD *)v29 + 12) = v26 + 24 + v27;
v79 = v33;
v77 = 0;
do
{
v31 = (char *)*((_QWORD *)v31 + 1);
v35 = 0;
v72 = v31;
if( *((_DWORD *)v31 + 4) )
{
v36 = (unsigned __int64)(v31 + 31) & 0xFFFFFFFFFFFFFFF8ui64;
v73 = v36;
while( 1 )
{
v37 = (_WORD *)(v36 + 16i64 * v35);
v38 = 2i64 * v34;
v39 = (__int64)&v30[v38 + 3];
if( ((unsigned __int8)*(_QWORD *)v37 & 3u) >= 2 )
{
v40 = ((unsigned int)*(_QWORD *)v37 >> 2) & 0x3FF;
v35 = v40 + v35 - 1;
}
else
{
v40 = 1;
}
if( v39 + (unsigned __int64)(16 * v40) > v33 )
break;
memmove(&v30[v38 + 3], v37, 16 * v40);
*((_DWORD *)v30 + 1) += v40;
v34 += v40;
if( (*(_DWORD *)v37 & 3) == 2 )
{
v37 += 8;
v39 = (__int64)&v30[v38 + 5];
}
v41 = *(_QWORD *)v37;
if( ((unsigned __int8)*(_QWORD *)v37 & 3u) < 2 )
{
if( (v41 & 3) != 0 )
{
v43 = -1;
if( (v41 & 0x18) == 16 )
v42 = v37[5];
else
v42 = -1;
}
else
{
v42 = v37[5];
v43 = v37[4];
}
if( v43 == 0xFFFF )
{
v46 = 0i64;
}
else
{
v44 = *(unsigned __int16 *)(v2 + 36);
if( v43 < (unsigned __int16)v44 || v43 >= (unsigned int)(*(_DWORD *)(v2 + 32) + v44) )
{
v62 = v2;
while( 1 )
{
v62 = *(_QWORD *)(v62 + 8);
if( (_UNKNOWN *)v62 == (_UNKNOWN *)((char *)&stru_140C4DB30 + 7720) )
v62 = *(&stru_140C4DB30 + 966);
if( v62 == v2 )
break;
v63 = *(unsigned __int16 *)(v62 + 36);
if( v43 >= (unsigned __int16)v63 && v43 < (unsigned int)(*(_DWORD *)(v62 + 32) + v63) )
{
v2 = v62;
v45 = ((v62 + 47) & 0xFFFFFFFFFFFFFFF8ui64) + 40 * (v43 - v63);
goto LABEL_45;
}
}
v46 = 0i64;
}
else
{
v45 = ((v2 + 47) & 0xFFFFFFFFFFFFFFF8ui64) + 40 * (v43 - v44);
LABEL_45:
v46 = (_OWORD *)(v45 + 8);
}
}
if( v42 == 0xFFFF )
{
v49 = 0i64;
}
else
{
v47 = *(unsigned __int16 *)(v2 + 36);
if( v42 < (unsigned __int16)v47 || v42 >= (unsigned int)(*(_DWORD *)(v2 + 32) + v47) )
{
v64 = v2;
while( 1 )
{
v64 = *(_QWORD *)(v64 + 8);
if( (_UNKNOWN *)v64 == (_UNKNOWN *)((char *)&stru_140C4DB30 + 7720) )
v64 = *(&stru_140C4DB30 + 966);
if( v64 == v2 )
break;
v65 = *(unsigned __int16 *)(v64 + 36);
if( v42 >= (unsigned __int16)v65 && v42 < (unsigned int)(*(_DWORD *)(v64 + 32) + v65) )
{
v2 = v64;
v48 = ((v64 + 47) & 0xFFFFFFFFFFFFFFF8ui64) + 40 * (v42 - v65);
goto LABEL_50;
}
}
v49 = 0i64;
}
else
{
v48 = ((v2 + 47) & 0xFFFFFFFFFFFFFFF8ui64) + 40 * (v42 - v47);
LABEL_50:
v49 = (_OWORD *)(v48 + 8);
}
}
if( v46 )
{
v50 = v43 - v78;
v51 = *((_WORD *)P + v50);
v52 = v79;
if( v51 == 0xFFFF )
{
v51 = v77;
v58 = v77 + 1;
*((_WORD *)P + v50) = v77;
v59 = 32i64 * v77++;
if( v59 + v79 + 32 > v71 )
{
v77 = v58 - 1;
}
else
{
*(_OWORD *)(v59 + v79) = *v46;
*(_OWORD *)(v59 + v79 + 16) = v46[1];
++*((_WORD *)v30 + 6);
}
}
*(_WORD *)(v39 + 8) = v51;
}
else
{
v52 = v79;
}
if( v49 )
{
v53 = v42 - v78;
v54 = *((_WORD *)P + v53);
if( v54 == 0xFFFF )
{
v54 = v77;
*((_WORD *)P + v53) = v77;
v60 = 32i64 * v77;
v61 = ++v77;
if( v52 + v60 + 32 > v71 )
{
v77 = v61 - 1;
}
else
{
*(_OWORD *)(v60 + v52) = *v49;
*(_OWORD *)(v60 + v52 + 16) = v49[1];
++*((_WORD *)v30 + 6);
}
}
*(_WORD *)(v39 + 10) = v54;
}
}
v31 = v72;
++v35;
v33 = v79;
v36 = v73;
if( v35 >= *((_DWORD *)v72 + 4) )
goto LABEL_59;
}
v31 = v72;
LABEL_59:
v32 = 0;
}
}
while( v31 != (char *)*(&stru_140C4DB30 + 960) );
v8 = P;
v55 = LODWORD(v75[9]) - *((_DWORD *)v30 + 4) - (_DWORD)v30;
*((_WORD *)v30 + 7) = HIWORD(v75[10]);
*((_DWORD *)v30 + 5) = v55;
*a1 = v74;
}
else
{
v32 = -1073741670;
}
}
else
{
v32 = -2147483622;
}
ExFreePoolWithTag(v8, 0);
}
else
{
v32 = -1073741670;
}
PfTFreeBufferList((_PFP_BUFFER_MANAGER *)&stru_140C4DB30 + 319);
PfTFreeBufferList((_PFP_BUFFER_MANAGER *)((char *)&stru_140C4DB30 + 7696));
return v32;
}Referenced by:
PfTGenerateTrace