EtwpTracingProvEnableCallback

void __fastcall EtwpTracingProvEnableCallback(const _GUID *a1, int a2){
  _ETW_SILODRIVERSTATE *v2; 
  char v3; 
  unsigned int i; 
  _ETW_GUID_ENTRY *j; 
  _WMI_LOGGER_CONTEXT *v6; 
  __int64 v7; 
  _WMI_LOGGER_CONTEXT *v8; 
  _ETHREAD *CurrentThread; 
  __int64 v10; 
  unsigned int v11; 
  _DWORD *v12; 
  __int64 v13; 
  _ETW_GUID_ENTRY *NextGuidEntry; 
  __int64 v15; 
  _ETW_GUID_ENTRY *k; 
  __int64 v17; 
  _ETHREAD *v18; 
  __int64 v19; 
  unsigned int v20; 
  _EX_PUSH_LOCK *v21; 
  __int64 v22; 
  _EX_PUSH_LOCK *m; 
  __int64 v24; 
  _ETW_GUID_ENTRY *v25; 
  _EX_PUSH_LOCK *v26; 

  if( a2 == 2 )
  {
    v2 = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
    v3 = 0;
    for( i = 0; i < *(_DWORD *)(EtwpHostSiloState + 16); ++i )
    {
      v6 = EtwpAcquireLoggerContextByLoggerId(v2, i, 0);
      v8 = v6;
      if( v6 )
      {
        EtwpEventWriteTemplateSession(v7, (const _EVENT_DESCRIPTOR *)ETW_EVENT_SESSION_INFO, (__int64)v6);
        EtwpReleaseLoggerContext(v8, 0);
      }
      v2 = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
    }
    for( j = 0i64; ; j = (_ETW_GUID_ENTRY *)v15 )
    {
      NextGuidEntry = EtwpGetNextGuidEntry(v2, j, EtwGroupGuidType);
      v15 = (__int64)NextGuidEntry;
      if( !NextGuidEntry )
        break;
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --CurrentThread->Tcb.KernelApcDisable;
      ExAcquirePushLockExclusiveEx(&NextGuidEntry->Lock, 0i64);
      *(_QWORD *)(v15 + 416) = KeGetCurrentThread();
      if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_GROUP_ENTRY_INFO) )
        EtwpEventWriteGuidEntry(v10, &ETW_EVENT_GROUP_ENTRY_INFO, v15);
      v11 = 0;
      v12 = (_DWORD *)(v15 + 128);
      do
      {
        if( *v12 && EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_ENABLE_INFO) )
          EtwpEventWriteEnableInfo(v13, v15, v11);
        ++v11;
        v12 += 8;
      }
      while( v11 < 8 );
      *(_QWORD *)(v15 + 416) = 0i64;
      ExReleasePushLockEx(v15 + 408, 0);
      KeLeaveCriticalRegionThread(KeGetCurrentThread());
      v2 = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
    }
    for( k = 0i64; ; k = (_ETW_GUID_ENTRY *)v26 )
    {
      v25 = EtwpGetNextGuidEntry((_ETW_SILODRIVERSTATE *)EtwpHostSiloState, k, EtwTraceGuidType);
      v26 = (_EX_PUSH_LOCK *)v25;
      if( !v25 )
        break;
      v17 = *(_QWORD *)&v25->Guid.Data1 - *(_QWORD *)&EventTracingProvGuid;
      if( !v17 )
        v17 = v26[6]._bf_0 - *((_QWORD *)&EventTracingProvGuid + 1);
      if( v17 )
      {
        v18 = (_ETHREAD *)KeGetCurrentThread();
        --v18->Tcb.KernelApcDisable;
        ExAcquirePushLockExclusiveEx(v26 + 51, 0i64);
        v3 = 1;
        v26[52]._bf_0 = (__int64)KeGetCurrentThread();
      }
      if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_GUID_ENTRY_INFO) )
        EtwpEventWriteGuidEntry(v19, &ETW_EVENT_GUID_ENTRY_INFO, (__int64)v26);
      v20 = 0;
      v21 = v26 + 16;
      do
      {
        if( LODWORD(v21->_bf_0) && EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_ENABLE_INFO) )
          EtwpEventWriteEnableInfo(v22, (__int64)v26, v20);
        ++v20;
        v21 += 4;
      }
      while( v20 < 8 );
      for( m = (_EX_PUSH_LOCK *)v26[7]._bf_0; m != &v26[7]; m = (_EX_PUSH_LOCK *)m->_bf_0 )
      {
        if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_REG_ENTRY_INFO) )
          EtwpEventWriteRegEntry(v24, (__int64)m);
      }
      if( v3 )
      {
        v26[52]._bf_0 = 0i64;
        ExReleasePushLockEx((_DWORD)v26 + 408, 0);
        KeLeaveCriticalRegionThread(KeGetCurrentThread());
        v3 = 0;
      }
    }
  }
}

Referenced by:

No references.