PopDiagTraceFxRundown
VOID __stdcall PopDiagTraceFxRundown(){
_ETHREAD *CurrentThread;
UINT64 *i;
EVENT_DESCRIPTOR *v2;
__int64 j;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&PopFxPluginLock, 0i64);
for( i = (UINT64 *)PopFxPluginList; i != &PopFxPluginList; i = (UINT64 *)*i )
PopDiagTraceFxPluginRegistration(i, i[3], 1u);
if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxPluginLock, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)&PopFxPluginLock);
KeAbPostRelease(&PopFxPluginLock);
ExAcquirePushLockSharedEx((UINT64)&PopFxDeviceListLock, 0i64);
for( j = PopFxDeviceList; (ULONG_PTR *)j != &PopFxDeviceList; j = *(_QWORD *)j )
{
if( *(_QWORD *)(j + 48) )
{
PopFxTraceDeviceRegistration(j, 1, v2);
PopDiagTraceDeviceVerboseRundown((_POP_FX_DEVICE *)j);
}
}
if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxDeviceListLock, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)&PopFxDeviceListLock);
KeAbPostRelease(&PopFxDeviceListLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}Referenced by:
PopDiagTraceControlCallback