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