SepAdtMarshallAuditRecord
__int64 __fastcall SepAdtMarshallAuditRecord(void *Src, void **a2, _DWORD *a3, POOL_TYPE a4){
unsigned int v4;
char *v5;
unsigned int v6;
UINT8 *v10;
unsigned int v11;
unsigned int v12;
char *i;
unsigned int v14;
unsigned int v15;
void *PoolWithTag;
unsigned int v17;
int v18;
UINT8 *v19;
signed __int64 *v20;
int v21;
unsigned __int16 *v22;
UINT8 *v23;
UINT8 *v24;
__int16 v25;
unsigned int *v27;
__int64 *v28;
__int64 v29;
__int64 v30;
unsigned int *v31;
UINT8 *v32;
signed __int64 v33;
UINT8 *v34;
UINT8 *v35;
int v36;
UINT8 **v37;
_QWORD *v38;
UINT64 v39;
unsigned int v40;
signed __int64 *v41;
v4 = *((_DWORD *)Src + 2);
v5 = (char *)Src + 24;
v6 = 0;
v10 = (UINT8 *)Src;
v11 = 0;
v12 = 0;
for( i = (char *)Src + 24; v12 < v4; v11 += v14 )
{
if( *(_DWORD *)i == 17 )
{
v27 = (unsigned int *)*((_QWORD *)i + 3);
v14 = 16 * (*v27 + 1);
if( *v27 )
{
v28 = (__int64 *)(*((_QWORD *)v27 + 1) + 8i64);
v29 = *v27;
do
{
v30 = *v28;
v28 += 2;
v14 += (4 * *(unsigned __int8 *)(v30 + 1) + 15) & 0xFFFFFFF8;
--v29;
}
while( v29 );
v10 = (UINT8 *)Src;
}
}
else
{
v14 = (*((_DWORD *)i + 1) + 7) & 0xFFFFFFF8;
}
if( v14 + v11 < v11 )
return(unsigned int)-1073741811;
++v12;
i += 32;
}
v15 = 32 * v4 + 24 + v11;
PoolWithTag = ExAllocatePoolWithTag(a4, v15, 0x70416553ui64);
*a2 = PoolWithTag;
if( !PoolWithTag )
{
*a3 = 0;
return(unsigned int)-1073741670;
}
*a3 = (a4 != PagedPool) + 4;
memmove((UINT8 *)*a2, v10, 1048 - 32i64 * (unsigned int)(32 - *((_DWORD *)v10 + 2)));
v17 = 0;
v40 = 0;
*((_DWORD *)*a2 + 3) = v15;
*((_DWORD *)*a2 + 5) |= 1u;
v18 = *((_DWORD *)v10 + 2);
v19 = (UINT8 *)((char *)*a2 - 32 * (unsigned int)(32 - v18) + 1048);
if( v18 )
{
v20 = (signed __int64 *)((char *)*a2 + 48);
v41 = v20;
do
{
v21 = *(_DWORD *)v5;
if( *(int *)v5 > 22 )
{
if( v21 <= 24 )
goto LABEL_29;
if( v21 > 27 )
{
if( v21 <= 31 )
goto LABEL_29;
switch( v21 )
{
case ' ':
*((_DWORD *)*a2 + 5) |= 2u;
goto LABEL_29;
case '!':
goto LABEL_29;
case '"':
LABEL_25:
v22 = (unsigned __int16 *)*((_QWORD *)v5 + 3);
v23 = v19;
*v20 = v19 - (_BYTE *)*a2;
v24 = v19 + 16;
memmove(v24, *((UINT8 **)v22 + 1), *v22);
v25 = *v22;
*(_WORD *)v23 = *v22;
*((_WORD *)v23 + 1) = v25;
*((_QWORD *)v23 + 1) = v24 - (_BYTE *)*a2;
v19 = &v24[(*v22 + 7i64) & 0xFFFFFFF8i64];
goto LABEL_26;
}
}
}
else
{
if( v21 == 22 )
{
*((_DWORD *)*a2 + 5) |= 2u;
goto LABEL_27;
}
if( v21 > 0 )
{
if( v21 <= 2 )
goto LABEL_25;
if( v21 == 4 )
goto LABEL_29;
if( v21 > 7 )
{
if( v21 > 9 && v21 != 13 )
{
if( v21 == 17 )
{
v31 = (unsigned int *)*((_QWORD *)v5 + 3);
v32 = v19;
*(_OWORD *)v19 = *(_OWORD *)v31;
v33 = v19 - (_BYTE *)*a2;
v19 += 16;
*v20 = v33;
v34 = v19;
v35 = (UINT8 *)*((_QWORD *)v31 + 1);
if( *v31 )
{
memmove(v19, v35, 16i64 * *v31);
v34 = v19;
v17 = v40;
*((_QWORD *)v32 + 1) = v19 - (_BYTE *)*a2;
v36 = *v31;
v19 += 16 * *v31;
}
else
{
*((_QWORD *)v32 + 1) = 0i64;
v36 = *v31;
}
if( v36 )
{
v37 = (UINT8 **)(v35 + 8);
v38 = v34 + 8;
do
{
*v38 = v19 - (_BYTE *)*a2;
v39 = 4i64 * (*v37)[1] + 8;
memmove(v19, *v37, v39);
++v6;
v38 += 2;
v19 += (v39 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
v37 += 2;
}
while( v6 < *v31 );
v20 = v41;
v6 = 0;
v17 = v40;
}
v10 = (UINT8 *)Src;
}
goto LABEL_27;
}
LABEL_29:
memmove(v19, *((UINT8 **)v5 + 3), *((unsigned int *)v5 + 1));
*v20 = v19 - (_BYTE *)*a2;
v19 += (*((unsigned int *)v5 + 1) + 7i64) & 0xFFFFFFFFFFFFFFF8ui64;
LABEL_26:
v17 = v40;
}
}
}
LABEL_27:
++v17;
v20 += 4;
v5 += 32;
v40 = v17;
v41 = v20;
}
while( v17 < *((_DWORD *)v10 + 2) );
}
return v6;
}Referenced by:
SepAdtLogAuditRecord