EtwpAccessCheck

NTSTATUS __stdcall EtwpAccessCheck(
        VOID *SecurityDescriptor,
        UINT64 DesiredAccess,
        _SECURITY_SUBJECT_CONTEXT *UserSecurityContext){
  _ACCESS_MASK v4; 
  _SECURITY_SUBJECT_CONTEXT *p_SubjectContext; 
  _KPROCESSOR_MODE AccessMode; 
  _SECURITY_SUBJECT_CONTEXT SubjectContext; 
  int AccessStatus; 
  unsigned int GrantedAccess; 

  AccessStatus = 0;
  GrantedAccess = 0;
  v4 = DesiredAccess;
  memset(&SubjectContext, 0, sizeof(SubjectContext));
  if( !UserSecurityContext )
    SeCaptureSubjectContext((INT64)&SubjectContext);
  p_SubjectContext = &SubjectContext;
  if( UserSecurityContext )
    p_SubjectContext = UserSecurityContext;
  LOBYTE(AccessMode) = 1;
  SeAccessCheck(
    SecurityDescriptor,
    p_SubjectContext,
    0,
    v4,
    0,
    0i64,
    (PGENERIC_MAPPING)&EtwpGenericMapping,
    AccessMode,
    &GrantedAccess,
    &AccessStatus);
  if( !UserSecurityContext )
    SeReleaseSubjectContext(&SubjectContext);
  return AccessStatus;
}

Referenced by:

EtwpAddRegEntryToGroup
EtwpCheckCurrentUserProcessAccess
EtwpCheckGuidAccess
EtwpCheckLoggerControlAccess
EtwpNotifyGuid
EtwpStartLogger
NtTraceEvent