PopDirectedDripsDiagTraceBroadcastVisit
VOID __stdcall PopDirectedDripsDiagTraceBroadcastVisit(INT64 a1, INT64 a2, INT64 a3){
int v4;
int v5;
CHAR *DeviceDiagnostic;
bool v7;
int v8;
REGHANDLE v9;
unsigned int v10;
__int64 v11;
int v12;
int v13;
int v14;
unsigned int v15;
int v16;
INT64 v17;
_EVENT_DATA_DESCRIPTOR UserData;
int *v19;
int v20;
int v21;
INT64 *v22;
int v23;
int v24;
int *v25;
int v26;
int v27;
__int64 v28;
int v29;
int v30;
int *v31;
int v32;
int v33;
v15 = 0;
v13 = 0;
v16 = 0;
v4 = a3;
v17 = a1;
ExAcquirePushLockExclusiveEx(&PopDirectedDripsDiagLock, 0i64);
if( a2 )
v5 = *(_DWORD *)(a2 + 32);
else
v5 = -1;
v14 = v5;
DeviceDiagnostic = *(CHAR **)(v17 + 776);
if( !DeviceDiagnostic )
{
DeviceDiagnostic = PopDirectedDripsDiagCreateDeviceDiagnostic(v17);
if( !DeviceDiagnostic )
goto LABEL_13;
v5 = v14;
}
v7 = (*((_DWORD *)DeviceDiagnostic + 38) & 0x20000) == 0;
*((_DWORD *)DeviceDiagnostic + 37) = v5;
v8 = v13;
if( !v7 )
v8 = 1;
v13 = v8;
if( PopDiagHandleRegistered )
{
v9 = PopDiagHandle;
if( EtwEventEnabled(PopDiagHandle, &POP_ETW_EVENT_DIRECTED_DRIPS_DEVICE_VISIT) )
{
v10 = *(unsigned __int16 *)(v17 + 40);
UserData.Reserved = 0;
v21 = 0;
v24 = 0;
v27 = 0;
v15 = v10 >> 1;
UserData.Ptr = (unsigned __int64)&v14;
v19 = &v13;
v22 = &v17;
v25 = (int *)&v15;
UserData.Size = 4;
v20 = 4;
v26 = 4;
v23 = 8;
v11 = *(_QWORD *)(v17 + 48);
v12 = *(unsigned __int16 *)(v17 + 40);
v30 = 0;
v33 = 0;
v28 = v11;
v31 = &v16;
v29 = v12;
v32 = 4;
v16 = v4;
EtwWrite(v9, &POP_ETW_EVENT_DIRECTED_DRIPS_DEVICE_VISIT, 0, 6u, &UserData);
}
}
*((_DWORD *)DeviceDiagnostic + 38) |= 0x40000u;
LABEL_13:
if( (_InterlockedExchangeAdd64(&PopDirectedDripsDiagLock._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(&PopDirectedDripsDiagLock);
KeAbPostRelease(&PopDirectedDripsDiagLock);
}Referenced by:
PopDirectedDripsVisitDevice