EtwpGetDisallowList

NTSTATUS __stdcall EtwpGetDisallowList(
        _ETW_SILODRIVERSTATE *SiloState,
        UINT64 *pTraceHandle,
        VOID *Buffer,
        UINT64 *OutBufferLen){
  size_t v5; 
  NTSTATUS v6; 
  _WMI_LOGGER_CONTEXT *v8; 
  size_t v9; 

  v5 = *(_DWORD *)OutBufferLen;
  v6 = 0;
  v8 = EtwpAcquireLoggerContextByLoggerId(SiloState, *(unsigned __int16 *)pTraceHandle, 0);
  if( !v8 )
    return -1073741811;
  memset(Buffer, 0i64, *(_DWORD *)OutBufferLen);
  ExAcquirePushLockSharedEx(&v8->LoggerLock, 0i64);
  v9 = 16 * v8->DisallowedGuids.Count;
  if( v9 > v5 )
    v6 = -1073741789;
  else
    memmove(Buffer, v8->DisallowedGuids.Guids, v9);
  *(_DWORD *)OutBufferLen = v9;
  if( _InterlockedCompareExchange64(&v8->LoggerLock._bf_0, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared(&v8->LoggerLock);
  KeAbPostRelease(&v8->LoggerLock);
  EtwpReleaseLoggerContext(v8, 0);
  return v6;
}

Referenced by:

NtTraceControl