EtwpTiAllocVadQueryEventWriteWorkItemContext
NTSTATUS __stdcall EtwpTiAllocVadQueryEventWriteWorkItemContext(
INT64 a1,
UINT64 a2,
UINT64 a3,
VOID *a4,
VOID *Src,
UINT64 a6,
INT64 a7,
CHAR **a8){
unsigned int v8;
__int64 v9;
unsigned int v10;
_DWORD *v12;
unsigned int v13;
unsigned __int64 v14;
unsigned int v15;
unsigned int v16;
unsigned __int64 v17;
VOID **PoolWithTag;
VOID **v19;
char *v20;
size_t *v21;
INT64 v22;
__int64 v23;
size_t v24;
char *v25;
__int64 v26;
VOID *v27;
v8 = 0;
v9 = (unsigned int)a3;
v10 = 0;
if( (_DWORD)a3 )
{
v12 = (_DWORD *)(a1 + 8);
do
{
v13 = v8 + *v12;
if( v13 < v8 )
return -1073741675;
++v10;
v12 += 4;
v8 = v13;
}
while( v10 < (unsigned int)a3 );
}
v14 = 16i64 * (unsigned int)a2;
if( v14 > 0xFFFFFFFF )
return -1073741675;
v15 = v14 + 80;
if( (unsigned int)v14 >= 0xFFFFFFB0 )
return -1073741675;
v16 = v15 + v8;
if( v15 + v8 < v15 )
return -1073741675;
v17 = 8i64 * (unsigned int)a6;
if( v17 > 0xFFFFFFFF || v16 + (unsigned int)v17 < v16 )
return -1073741675;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v16 + (unsigned int)v17, 1853049172i64);
v19 = PoolWithTag;
if( !PoolWithTag )
return -1073741801;
PoolWithTag[4] = PoolWithTag + 10;
v20 = (char *)PoolWithTag + (unsigned int)v14 + 80;
PoolWithTag[5] = v20;
PoolWithTag[9] = &v20[v8];
if( (_DWORD)v9 )
{
v21 = (size_t *)(a1 + 8);
v22 = -8 - a1;
v23 = v9;
do
{
memmove(v20, *((const VOID **)v21 - 1), *v21);
v24 = *v21;
v25 = (char *)v21 + v22 + (_QWORD)v19[4];
*((_DWORD *)v25 + 3) = 0;
*(_QWORD *)v25 = v20;
*((_DWORD *)v25 + 2) = v24;
v26 = *v21;
v21 += 4;
v20 += v26;
--v23;
}
while( v23 );
}
*((_DWORD *)v19 + 12) = v9;
ObfReferenceObjectWithTag(a4, 0x69547445ui64);
v27 = v19[9];
v19[8] = a4;
memmove(v27, Src, v17);
v19[7] = (VOID *)a7;
*((_DWORD *)v19 + 13) = a6;
*a8 = (CHAR *)v19;
return 0;
}Referenced by:
EtwpTiAsyncVadQueryEventWrite