EtwRegisterEventCallback

NTSTATUS __stdcall EtwRegisterEventCallback(UINT64 a1, INT64 a2, INT64 a3){
  unsigned int v5; 
  NTSTATUS v6; 
  _ETW_SILODRIVERSTATE *EtwSiloState; 
  _ETHREAD *CurrentThread; 
  _WMI_LOGGER_CONTEXT *v9; 
  VOID **PoolWithTag; 

  v5 = a1;
  v6 = 0;
  EtwSiloState = PsGetCurrentServerSiloGlobals((_KSPIN_LOCK *)a1)->EtwSiloState;
  if( !a2 || a2 != qword_140CFBB98 )
    return -1073741790;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  v9 = EtwpAcquireLoggerContextByLoggerId(EtwSiloState, v5, 0);
  if( v9 )
  {
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x10ui64, 1131902021i64);
    if( PoolWithTag )
    {
      PoolWithTag[1] = (VOID *)a3;
      if( _InterlockedCompareExchange64(
             (volatile signed __int64 *)&v9->CallbackContext,
             (signed __int64)PoolWithTag,
             0i64) )
      {
        v6 = -1073741811;
        ExFreePoolWithTag(PoolWithTag, 0);
      }
    }
    else
    {
      v6 = -1073741670;
    }
    EtwpReleaseLoggerContext(v9, 0);
  }
  else
  {
    v6 = -1073741162;
  }
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v6;
}

Referenced by:

No references.