PopDirectedDripsDiagTraceProblemDevice
VOID __fastcall PopDirectedDripsDiagTraceProblemDevice(INT64 a1, INT64 a2, INT64 a3){
EVENT_DESCRIPTOR *v4;
INT64 v5;
UINT64 v6;
INT64 v7;
INT64 v8;
EVENT_DATA_DESCRIPTOR UserData;
INT64 *v10;
int v11;
int v12;
INT64 *v13;
int v14;
int v15;
v8 = a1;
LODWORD(v7) = a3;
ExAcquirePushLockExclusiveEx((UINT64)&PopDirectedDripsDiagLock, 0i64);
v5 = *(_QWORD *)(v8 + 776);
if( a2 )
{
++*(_DWORD *)(a2 + 4i64 * (int)v7 + 192);
if( !v5 )
goto LABEL_8;
PopDirectedDripsDiagInsertErrorRecord(a2, v5, (unsigned int)v7);
}
if( v5 )
{
*(_DWORD *)(v5 + 152) |= 1 << v7;
if( PopDiagHandleRegistered )
{
v6 = PopDiagHandle;
if( EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_DIRECTED_DRIPS_PROBLEM_DEVICE, v4) )
{
UserData.Reserved = 0;
v12 = 0;
v15 = 0;
UserData.Ptr = v5 + 148;
UserData.Size = 4;
v10 = &v8;
v13 = &v7;
v14 = 4;
v11 = 8;
EtwWrite(v6, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_DIRECTED_DRIPS_PROBLEM_DEVICE, 0i64, 3ui64, &UserData);
}
}
}
LABEL_8:
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&PopDirectedDripsDiagLock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&PopDirectedDripsDiagLock);
KeAbPostRelease(&PopDirectedDripsDiagLock);
}Referenced by:
PopDirectedDripsBuildBroadcastTreeFull
PopDirectedDripsBuildPs4BroadcastTree
PopDirectedDripsVisitPs4Device