EtwInitialize
VOID __stdcall EtwInitialize(UINT64 Phase){
void *v1;
INT64 v2;
__int64 v3;
__int64 v4;
if( (unsigned int)Phase >= 2 )
{
if( (_DWORD)Phase == 2 )
{
v2 = EtwpHostSiloState;
v3 = 0i64;
for( EtwpFileSystemReady = 1; (unsigned int)v3 < *(_DWORD *)(EtwpHostSiloState + 16); v3 = (unsigned int)(v3 + 1) )
{
if( ExAcquireRundownProtectionCacheAwareEx(
*(PEX_RUNDOWN_REF_CACHE_AWARE *)(*(_QWORD *)(v2 + 448) + 8 * v3),
1u) )
{
if( (unsigned int)v3 >= *(_DWORD *)(EtwpHostSiloState + 16) )
v4 = 1i64;
else
v4 = *(_QWORD *)(*(_QWORD *)(EtwpHostSiloState + 456) + 8 * v3);
if( (v4 & 1) == 0 && (*(_DWORD *)(v4 + 12) & 0x400) == 0 && EtwpBuffersFlushRequired((_DWORD *)v4) )
{
if( ObGetCurrentIrql() > 2u )
{
if( !_interlockedbittestandset((volatile signed __int32 *)(v4 + 836), 8u) )
KeInsertQueueDpc((PRKDPC)(v4 + 584), 0i64, 0i64);
}
else
{
KeSetEvent((PRKEVENT)(v4 + 496), 0);
}
}
ExReleaseRundownProtectionCacheAwareEx(
*(PEX_RUNDOWN_REF_CACHE_AWARE *)(*(_QWORD *)(EtwpHostSiloState + 448) + 8 * v3),
1u);
}
v2 = EtwpHostSiloState;
}
}
}
else
{
EtwpInitialize(Phase, v1);
}
}Referenced by:
CmCompleteRegistryInitialization
IoInitSystemPreDrivers