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