SepCaptureFqbnArray
INT64 __fastcall SepCaptureFqbnArray(CHAR *Src, UINT64 a2, INT64 a3, CHAR **a4){
unsigned int v4;
UINT64 v6;
UINT8 *PoolWithTag;
UINT64 v9;
unsigned int i;
unsigned int v11;
UINT8 *v12;
CHAR *v13;
unsigned int v14;
UINT8 *v15;
unsigned int j;
__int64 v17;
unsigned __int64 v18;
v4 = a2;
v6 = 24i64 * (unsigned int)a2;
if( v6 > 0xFFFFFFFF )
return 3221225621i64;
PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, (unsigned int)v6, 0x74416553ui64);
if( !PoolWithTag )
return 3221225626i64;
if( (_DWORD)v6 )
{
if( ((unsigned __int8)Src & 3) != 0 )
ExRaiseDatatypeMisalignment();
if( (unsigned __int64)&Src[(unsigned int)v6] > 0x7FFFFFFF0000i64 || &Src[(unsigned int)v6] < Src )
MEMORY[0x7FFFFFFF0000] = 0;
}
memmove(PoolWithTag, (UINT8 *)Src, (unsigned int)v6);
if( (((unsigned int)v6 + 1i64) & 0xFFFFFFFFFFFFFFFEui64) < (unsigned int)v6 )
{
LABEL_27:
v14 = -1073741675;
goto LABEL_28;
}
v9 = ((_DWORD)v6 + 1) & 0xFFFFFFFE;
for( i = 0; i < v4; ++i )
{
v11 = v9 + *(unsigned __int16 *)&PoolWithTag[24 * i + 8];
if( v11 < (unsigned int)v9 )
goto LABEL_27;
v9 = v11;
}
v12 = (UINT8 *)ExAllocatePoolWithTag(PagedPool, v9, 0x74416553ui64);
v13 = (CHAR *)v12;
if( !v12 )
{
v14 = -1073741670;
LABEL_28:
ExFreePoolWithTag(PoolWithTag, 0);
return v14;
}
memmove(v12, PoolWithTag, v6);
v15 = (UINT8 *)((unsigned __int64)&v13[v6 + 1] & 0xFFFFFFFFFFFFFFFEui64);
for( j = 0; j < v4; ++j )
{
v17 = *(unsigned __int16 *)&PoolWithTag[24 * j + 8];
if( (_WORD)v17 )
{
v18 = *(_QWORD *)&PoolWithTag[24 * j + 16];
if( (v18 & 1) != 0 )
ExRaiseDatatypeMisalignment();
if( v18 + v17 > 0x7FFFFFFF0000i64 || v18 + v17 < v18 )
{
MEMORY[0x7FFFFFFF0000] = 0;
LOWORD(v17) = *(_WORD *)&PoolWithTag[24 * j + 8];
}
}
memmove(v15, *(UINT8 **)&PoolWithTag[24 * j + 16], (unsigned __int16)v17);
*(_QWORD *)&v13[24 * j + 16] = v15;
v15 += *(unsigned __int16 *)&PoolWithTag[24 * j + 8];
}
ExFreePoolWithTag(PoolWithTag, 0);
*a4 = v13;
return 0i64;
}Referenced by:
SepCaptureTokenSecurityAttributesInformation