CreateNewEventEntry
__int64 __fastcall CreateNewEventEntry(
char a1,
__int128 *a2,
unsigned __int8 a3,
__int64 a4,
unsigned __int8 a5,
int a6,
__int64 *a7){
unsigned __int8 v7;
__int64 v8;
__int64 v11;
__int64 v12;
unsigned __int8 v13;
unsigned int *v14;
__int64 v15;
__int64 v16;
__int64 v17;
VOID **PoolWithTag;
__int64 v19;
__int64 NextOffset;
VOID *v21;
size_t v22;
__int64 v23;
__int64 v24;
__int128 v25;
unsigned __int8 v26;
const VOID **v27;
__int64 v28;
__int64 v29;
VOID *v30;
size_t v31;
char *v32;
int v33;
__int64 v35[7];
v7 = 0;
v8 = a3;
v11 = 0i64;
v12 = 0i64;
v13 = 0;
*a7 = 0i64;
if( (_BYTE)v8 )
{
v14 = (unsigned int *)(a4 + 8);
do
{
v15 = *v14;
v14 += 4;
if( v13 >= 2u )
v12 += v15;
v16 = v15 + v11;
if( v13 >= 2u )
v16 = v11;
++v13;
v11 = v16;
}
while( v13 < (unsigned __int8)v8 );
}
if( (unsigned __int64)(v12 + v11) > 0xFFFF )
return 3221225621i64;
v17 = v12 + 16 * v8 + 46;
if( !v17 )
return 3221225495i64;
PoolWithTag = ExAllocatePoolWithTag(a1 != 0 ? 1 : 512, v17, 1195471444i64);
v19 = (__int64)PoolWithTag;
if( PoolWithTag )
memset(PoolWithTag, 0i64, v17);
v35[0] = v19;
if( !v19 )
return 3221225495i64;
v35[1] = v17;
NextOffset = CBufferGetNextOffset(v35, 16 * v8);
if( a5 != -2 )
{
do
{
if( v7 < 2u )
{
*(_OWORD *)(NextOffset + 16i64 * v7) = *(_OWORD *)(a4 + 16i64 * v7);
}
else
{
v21 = (VOID *)CBufferGetNextOffset(v35, *(unsigned int *)(a4 + 16i64 * v7 + 8));
memmove(v21, *(const VOID **)(a4 + 16i64 * v7), v22);
*(_QWORD *)(NextOffset + 16i64 * v7) = v21;
*(_DWORD *)(NextOffset + 16i64 * v7 + 12) = *(_DWORD *)(a4 + 16i64 * v7 + 12);
*(_DWORD *)(NextOffset + 16i64 * v7 + 8) = *(_DWORD *)(a4 + 16i64 * v7 + 8);
}
++v7;
}
while( v7 < (unsigned int)a5 + 2 );
}
v24 = CBufferGetNextOffset(v35, 0x2Eui64);
*(_QWORD *)(v24 + 16) = NextOffset;
v25 = *a2;
*(_BYTE *)(v24 + 45) = a5;
v26 = a5 + 2;
*(_BYTE *)(v24 + 44) = v8;
*(_DWORD *)(v24 + 40) = a6;
*(_OWORD *)v24 = v25;
if( (unsigned __int8)(a5 + 2) < (unsigned __int8)v8 )
{
v27 = (const VOID **)(16i64 * v26 + a4 + 8);
v28 = v23 - 54 - a4;
v29 = (unsigned __int8)(v8 - v26);
do
{
v30 = (VOID *)CBufferGetNextOffset(v35, *(unsigned int *)v27);
memmove(v30, *(v27 - 1), v31);
v32 = (char *)v27 + v28;
*(_QWORD *)&v32[*(_QWORD *)(v24 + 16)] = v30;
*(_DWORD *)&v32[*(_QWORD *)(v24 + 16) + 12] = *((_DWORD *)v27 + 1);
v33 = *(_DWORD *)v27;
v27 += 2;
*(_DWORD *)&v32[*(_QWORD *)(v24 + 16) + 8] = v33;
--v29;
}
while( v29 );
}
*a7 = v24;
return 0i64;
}Referenced by:
InsertEventEntryInLookUpTable