EtwpUpdateLoggerSecurityDescriptor

NTSTATUS __stdcall EtwpUpdateLoggerSecurityDescriptor(_WMI_LOGGER_CONTEXT *LoggerContext, VOID *SecurityDescriptor){
  int v3; 
  __int64 v4; 
  _ETHREAD *CurrentThread; 
  __int64 v6; 
  int v8[10]; 
  unsigned __int64 v9; 

  v9 = 0i64;
  v3 = ObLogSecurityDescriptor(SecurityDescriptor, (VOID **)&v9, 0x10ui64);
  if( v3 >= 0 )
  {
    v4 = _InterlockedExchange64(
           (volatile __int64 *)&LoggerContext->SecurityDescriptor,
           (v9 | 0xF) & -(__int64)(v9 != 0));
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    _InterlockedOr(v8, 0);
    if( (*(&ExBootDevicesRemovedEvent + 2104) & 1) != 0 )
      ExfAcquireReleasePushLockExclusive((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 263);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
    ObDereferenceSecurityDescriptor((VOID *)(v4 & 0xFFFFFFFFFFFFFFF0ui64), (unsigned int)(v4 & 0xF) + 1);
    if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_CHANGE_SESSION_SD) )
      EtwpEventWriteTemplateSession(v6, &ETW_EVENT_CHANGE_SESSION_SD, (__int64)LoggerContext);
  }
  return v3;
}

Referenced by:

EtwpUpdateTrace