CmpParseInfBuffer
VOID **__fastcall CmpParseInfBuffer(UINT8 *a1, unsigned int a2, int *a3){
__int64 v3;
void *v5;
CHAR v6;
VOID **result;
VOID **v8;
unsigned int v9;
UINT8 *v10;
char v11;
char v12;
int v13;
CHAR v14;
INT8 *P;
CHAR *v16;
UINT8 *v17;
INT64 a2a[2];
CHAR a3a[8];
int v21;
v3 = a2;
*(_QWORD *)a3a = 0i64;
v5 = 0i64;
v6 = 0;
*(_OWORD *)a2a = 0i64;
result = ExAllocatePoolWithTag(1ui64, 0x30ui64, 1768967491i64);
v8 = result;
if( !result )
return result;
v9 = 1;
*result = 0i64;
result[1] = 0i64;
result[2] = 0i64;
result[3] = 0i64;
*((_DWORD *)result + 8) = 0;
result[5] = 0i64;
v10 = &a1[v3];
v16 = (CHAR *)a1;
v11 = 0;
v17 = v10;
v12 = 0;
P = 0i64;
v21 = 1;
do
{
CmpGetToken((const CHAR **)&v16, (UINT64)v10, (INT64)a2a);
if( v9 <= 6 )
{
if( v9 != 6 )
{
switch( v9 )
{
case 1u:
v13 = a2a[0];
if( LODWORD(a2a[0]) )
{
if( LODWORD(a2a[0]) != 1 )
{
if( LODWORD(a2a[0]) != 2 )
goto LABEL_58;
v9 = 2;
}
goto LABEL_24;
}
goto LABEL_57;
case 2u:
v13 = a2a[0];
if( LODWORD(a2a[0]) != 3 )
{
if( LODWORD(a2a[0]) != 4 )
goto LABEL_58;
v9 = 3;
v6 = a3a[0];
P = (INT8 *)a2a[1];
goto LABEL_24;
}
a3a[0] = 0;
a2a[1] = (INT64)&EmptyValue;
v6 = 0;
break;
case 3u:
v13 = a2a[0];
if( LODWORD(a2a[0]) != 3 )
goto LABEL_58;
break;
case 4u:
v13 = a2a[0];
if( LODWORD(a2a[0]) )
{
if( LODWORD(a2a[0]) != 1 )
{
v11 = 1;
v12 = 1;
goto LABEL_61;
}
if( !CmpAppendSection((INT64)v8, P, v6) )
goto LABEL_58;
v9 = 5;
}
else
{
if( !CmpAppendSection((INT64)v8, P, v6) )
goto LABEL_58;
v11 = 1;
}
P = 0i64;
goto LABEL_24;
default:
v13 = a2a[0];
if( LODWORD(a2a[0]) )
{
if( LODWORD(a2a[0]) != 1 )
{
if( LODWORD(a2a[0]) == 2 )
{
v9 = 2;
}
else
{
if( LODWORD(a2a[0]) != 4 )
{
v11 = v9 - 4;
v12 = v9 - 4;
goto LABEL_61;
}
v5 = (void *)a2a[1];
v9 = 6;
v6 = a3a[0];
}
}
goto LABEL_24;
}
goto LABEL_57;
}
v9 = 4;
goto LABEL_24;
}
v13 = a2a[0];
if( LODWORD(a2a[0]) )
{
switch( LODWORD(a2a[0]) )
{
case 1:
if( CmpAppendLine(v8, 0i64, 0) && CmpAppendValue((INT64)v8, (INT64)v5, v6) )
{
v5 = 0i64;
goto LABEL_41;
}
break;
case 5:
if( !CmpAppendLine(v8, (INT64)v5, v6) )
goto LABEL_58;
v5 = 0i64;
v9 = 8;
goto LABEL_24;
case 6:
if( CmpAppendLine(v8, 0i64, 0) && CmpAppendValue((INT64)v8, (INT64)v5, v6) )
{
v5 = 0i64;
v9 = 7;
goto LABEL_24;
}
break;
default:
goto LABEL_58;
}
}
else if( CmpAppendLine(v8, 0i64, 0) && CmpAppendValue((INT64)v8, (INT64)v5, v6) )
{
v5 = 0i64;
goto LABEL_57;
}
}
else
{
if( v9 != 7 )
{
if( v9 != 8 )
{
v13 = a2a[0];
if( LODWORD(a2a[0]) )
{
if( LODWORD(a2a[0]) != 1 )
{
if( LODWORD(a2a[0]) != 6 )
goto LABEL_58;
v9 = 7;
goto LABEL_24;
}
goto LABEL_41;
}
goto LABEL_57;
}
v13 = a2a[0];
if( LODWORD(a2a[0]) )
{
if( LODWORD(a2a[0]) != 1 )
{
if( LODWORD(a2a[0]) != 4 )
goto LABEL_58;
v14 = 0;
goto LABEL_22;
}
a3a[0] = 0;
a2a[1] = (INT64)&EmptyValue;
v6 = 0;
if( !CmpAppendValue((INT64)v8, (INT64)&EmptyValue, 0) )
{
v12 = 1;
v11 = 1;
goto LABEL_61;
}
LABEL_41:
v9 = 5;
goto LABEL_24;
}
a3a[0] = 0;
a2a[1] = (INT64)&EmptyValue;
v6 = 0;
if( !CmpAppendValue((INT64)v8, (INT64)&EmptyValue, 0) )
v12 = 1;
LABEL_57:
v11 = 1;
goto LABEL_24;
}
v13 = a2a[0];
if( LODWORD(a2a[0]) == 4 )
{
v14 = a3a[0];
LABEL_22:
if( !CmpAppendValue((INT64)v8, a2a[1], v14) )
goto LABEL_58;
v9 = 9;
goto LABEL_24;
}
if( LODWORD(a2a[0]) != 6 )
{
LABEL_58:
v11 = 1;
v12 = 1;
goto LABEL_61;
}
a3a[0] = 0;
a2a[1] = (INT64)&EmptyValue;
v6 = 0;
if( CmpAppendValue((INT64)v8, (INT64)&EmptyValue, 0) )
goto LABEL_24;
}
v11 = 1;
v12 = 1;
LABEL_24:
if( !v12 )
{
if( v13 == 1 )
++v21;
goto LABEL_27;
}
LABEL_61:
*a3 = v21;
if( P && v6 )
ExFreePoolWithTag(P, 0);
if( v5 && v6 )
ExFreePoolWithTag(v5, 0);
ExFreePoolWithTag(v8, 0);
v8 = 0i64;
LABEL_27:
v10 = v17;
}
while( !v11 );
if( v8 )
v8[1] = 0i64;
return v8;
}Referenced by:
EmpParseInfDatabase