CreateTlgAggregateSession
CHAR *__fastcall CreateTlgAggregateSession(CHAR a1, CHAR a2){
VOID *PoolWithTag;
VOID *v5;
char *v6;
char *v7;
_QWORD *v8;
PEX_TIMER Timer;
PoolWithTag = ExAllocatePoolWithTag((_POOL_TYPE)(a1 != 0 ? PagedPool : NonPagedPoolNx), 0x178ui64, 0x47417254ui64);
v5 = PoolWithTag;
if( PoolWithTag )
memset((INT64)PoolWithTag, 0i64);
if( !v5 )
goto LABEL_13;
*((_QWORD *)v5 + 34) = 0i64;
if( a2 || !a1 )
{
v6 = (char *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x40ui64, 0x47417254ui64);
v7 = v6;
if( v6 )
memset((INT64)v6, 0i64);
*((_QWORD *)v5 + 33) = v7;
if( !v7 )
goto LABEL_13;
KeInitializeEvent((_KEVENT *)(v7 + 32), NotificationEvent, 0);
v8 = (_QWORD *)*((_QWORD *)v5 + 33);
v8[2] = TlgAggregateInternalFlushWorkItemRoutineKernelMode;
v8[3] = v5;
*v8 = 0i64;
*(_WORD *)(*((_QWORD *)v5 + 33) + 56i64) = 0;
if( a2 )
{
Timer = ExAllocateTimer((PEXT_CALLBACK)TlgAggregateInternalFlushTimerCallbackKernelMode, *((PVOID *)v5 + 33), 8u);
*((_QWORD *)v5 + 45) = Timer;
if( !Timer )
{
LABEL_13:
DestroyAggregateSession(v5);
return 0i64;
}
}
}
return(CHAR *)v5;
}Referenced by:
TlgRegisterAggregateProviderEx