EtwpCrimsonProvEnableCallback

void __fastcall EtwpCrimsonProvEnableCallback(
        const _GUID *a1,
        int a2,
        __int64 a3,
        UINT64 a4,
        unsigned __int64 a5,
        _EVENT_FILTER_DESCRIPTOR *a6,
        void *a7){
  REGHANDLE v9; 
  int v10; 
  int v11; 
  int v12; 
  BOOL v13; 
  int v14; 
  __int64 v15; 
  int *v16; 
  INT64 v17; 
  unsigned __int64 v18; 
  int v19; 
  unsigned int v20; 
  _WORK_QUEUE_ITEM *PoolWithTag; 
  int v22; 
  UINT8 v23; 
  int v24; 
  UINT64 v25; 
  int v26; 
  int v27; 
  unsigned int v28; 
  int v29; 
  int v30; 
  int v31; 
  int v32; 

  KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 2432, 0, 0, 0, 0i64);
  if( (_DWORD)a7 != 1 )
  {
    if( (_DWORD)a7 == 0x2000000 )
    {
      v25 = *(&ExBootDevicesRemovedEvent + 240);
      v26 = EtwProviderEnabled(*(&ExBootDevicesRemovedEvent + 240), 0, 0x10ui64) != 0 ? 0x200 : 0;
      v27 = 100663808;
      v22 = v26 | 0x2000000;
      if( !EtwProviderEnabled(v25, 0, 0x60ui64) )
        v22 = v26;
      v23 = EtwProviderEnabled(v25, 0, 0x1FA0ui64);
      v24 = v22 | 0x4000000;
    }
    else
    {
      if( (_DWORD)a7 != 536870913 )
      {
        v27 = (int)a7;
        v28 = a2 != 0 ? (unsigned int)a7 : 0;
LABEL_26:
        v15 = 1i64;
        goto LABEL_13;
      }
      v27 = 545783808;
      v22 = EtwProviderEnabled(*(&ExBootDevicesRemovedEvent + 251), 0, 0x420ui64) != 0 ? 0x20080000 : 0;
      v23 = EtwProviderEnabled(*(&ExBootDevicesRemovedEvent + 251), 0, 0x40ui64);
      v24 = v22 | 0x20800000;
    }
    if( !v23 )
      v24 = v22;
    v28 = v24;
    goto LABEL_26;
  }
  v9 = *(&ExBootDevicesRemovedEvent + 245);
  v10 = 0;
  if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 245), &ProcessStart)
    || EtwEventEnabled(v9, &EnableProcessTracingCallbacks) )
  {
    v10 = 1;
  }
  v11 = v10 | 2;
  if( !EtwEventEnabled(v9, &ThreadStart) )
    v11 = v10;
  v27 = 524295;
  v12 = v11 | 4;
  if( !EtwEventEnabled(v9, &ImageLoad) )
    v12 = v11;
  v13 = EtwEventEnabled(v9, &JobStart);
  v14 = v12 | 0x80000;
  v29 = 536879104;
  if( !v13 )
    v14 = v12;
  v28 = v14;
  v30 = EtwProviderEnabled(v9, 0, 0x180ui64) != 0 ? 0x20002000 : 0;
  v31 = 1073741826;
  v32 = EtwProviderEnabled(v9, 0, 0x200ui64) != 0 ? 0x40000002 : 0;
  if( a2 == 2 )
    EtwpPsProvCaptureState((VOID *)&PsProvGuid, a4);
  v15 = 3i64;
LABEL_13:
  v16 = &v27;
  do
  {
    v17 = EtwpHostSiloState;
    v18 = (unsigned __int64)(unsigned int)v16[1] >> 29;
    v19 = v16[1] & 0x1FFFFFFF;
    v20 = *v16 & ~v16[1];
    v16 += 2;
    *(_DWORD *)(EtwpHostSiloState + 4 * v18 + 4516) |= v19;
    *(_DWORD *)(v17 + 4 * ((unsigned __int64)v20 >> 29) + 4516) &= ~(v20 & 0x1FFFFFFF);
    --v15;
  }
  while( v15 );
  KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 2432), 0);
  PoolWithTag = (_WORK_QUEUE_ITEM *)ExAllocatePoolWithTag(0x200ui64, 0x20ui64, 1467446341i64);
  if( PoolWithTag )
  {
    PoolWithTag->List.Flink = 0i64;
    PoolWithTag->WorkerRoutine = (void(__fastcall *)(void *))EtwpUpdateKernelGroupsWork;
    PoolWithTag->Parameter = PoolWithTag;
    ExQueueWorkItem(PoolWithTag, DelayedWorkQueue);
  }
}

Referenced by:

No references.