EtwpKsrCallback

VOID __stdcall EtwpKsrCallback(VOID *CallbackContext, VOID *Argument1, VOID *Argument2){
  int v3; 
  bool v4; 
  unsigned int v5; 
  _ETW_SILODRIVERSTATE *i; 
  _WMI_LOGGER_CONTEXT *v7; 
  _WMI_LOGGER_CONTEXT *v8; 
  struct _ETW_SOFT_RESTART_CONTEXT *SoftRestartContext; 
  UINT8 v10; 

  v3 = (int)Argument1;
  if( !(_DWORD)Argument1 )
  {
LABEL_8:
    EtwpSavePersistedLoggers();
    goto LABEL_9;
  }
  if( (_DWORD)Argument1 != 1 )
  {
    if( (_DWORD)Argument1 == 2 )
    {
      EtwpSavePersistedLoggers();
      return;
    }
    if( (_DWORD)Argument1 != 3 )
    {
      if( (_DWORD)Argument1 != 4 )
        return;
      goto LABEL_9;
    }
    goto LABEL_8;
  }
LABEL_9:
  v4 = !v3 || v3 == 3;
  EtwpKsrPrepared = v4;
  v5 = 0;
  for( i = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState; v5 < *(_DWORD *)(EtwpHostSiloState + 16); ++v5 )
  {
    v7 = EtwpAcquireLoggerContextByLoggerId(i, v5, 0);
    v8 = v7;
    if( v7 )
    {
      SoftRestartContext = v7->SoftRestartContext;
      v10 = 0;
      if( SoftRestartContext )
      {
        v10 = 1;
        KeWaitForSingleObject((UINT64)&v7->LoggerMutex, 0, 0, 0, 0i64);
        if( !v3 || v3 == 3 )
        {
          if( *((_BYTE *)SoftRestartContext + 32) )
            EtwpPreserveLogger(v8);
        }
        else
        {
          EtwpCancelMemoryPreservation(v8);
        }
      }
      EtwpReleaseLoggerContext(v8, v10);
    }
    i = (_ETW_SILODRIVERSTATE *)EtwpHostSiloState;
  }
}

Referenced by:

No references.