EtwpCoverageSamplerUnloadImage
VOID __stdcall EtwpCoverageSamplerUnloadImage(INT64 a1, UINT64 a2, INT64 a3){
_EX_PUSH_LOCK *v6;
_ETHREAD *CurrentThread;
_LIST_ENTRY *v8;
v8 = 0i64;
if( (int)EtwpCovSampAcquireSamplerRundown(&v8) < 0 )
goto LABEL_8;
if( a2 < 0xFFFF800000000000ui64 )
{
v6 = *(_EX_PUSH_LOCK **)(a1 + 2544);
if( !v6 )
goto LABEL_8;
}
else
{
v6 = (_EX_PUSH_LOCK *)(*(&ExBootDevicesRemovedEvent + 151) + 752i64);
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(v6 + 1, 0i64);
v6[2]._bf_0 = (__int64)KeGetCurrentThread();
EtwpCovSampProcessRemoveModule((INT64)v6, a2, a3);
v6[2]._bf_0 = 0i64;
if( (_InterlockedExchangeAdd64(&v6[1]._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v6 + 1);
KeAbPostRelease(&v6[1]);
KeLeaveCriticalRegion();
LABEL_8:
if( v8 )
{
ExReleaseRundownProtection((_EX_RUNDOWN_REF *)&ExBootDevicesRemovedEvent + 152);
KeLeaveCriticalRegion();
}
}Referenced by:
PerfLogImageUnload