AlpcRegisterLogRoutine
INT64 __stdcall AlpcRegisterLogRoutine(){
_QWORD *PoolWithTag;
unsigned int v1;
_QWORD *v2;
VOID(__stdcall **i)(PVOID, UINT64);
_QWORD *v5;
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x18ui64, 0x634C6C41ui64);
v1 = 0;
v2 = PoolWithTag;
if( !PoolWithTag )
return 3221225626i64;
PoolWithTag[2] = EtwpTraceALPC;
ExAcquirePushLockExclusiveEx((UINT64)&AlpcpLogLock, 0i64);
for( i = (VOID(__stdcall **)(PVOID, UINT64))AlpcpLogCallbackListHead;
i != (VOID(__stdcall **)(PVOID, UINT64))&AlpcpLogCallbackListHead;
i = (VOID(__stdcall **)(PVOID, UINT64))*i )
{
if( i[2] == EtwpTraceALPC )
{
ExFreePoolWithTag(v2, 0);
v1 = -1073740008;
goto LABEL_11;
}
}
v5 = off_140C0EC90;
if( *(PVOID **)off_140C0EC90 != &AlpcpLogCallbackListHead )
__fastfail(3u);
*v2 = &AlpcpLogCallbackListHead;
v2[1] = v5;
*v5 = v2;
off_140C0EC90 = v2;
AlpcpLogEnabled = 1;
LABEL_11:
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&AlpcpLogLock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&AlpcpLogLock);
KeAbPostRelease(&AlpcpLogLock);
return v1;
}Referenced by:
EtwpEnableKernelTrace