SepExamineGlobalSaclEx

VOID __stdcall SepExamineGlobalSaclEx(
        _UNICODE_STRING *ObjectType,
        _ACL *ResourceSacl,
        VOID *Token,
        UINT64 DesiredAccess,
        _IOBJECT_TYPE_LIST *ObjectTypeList,
        UINT64 ObjectTypeListLength,
        UINT8 ReturnResultList,
        INT64 *AccessStatus,
        UINT64 *GrantedAccess,
        VOID *PrincipalSelfSid,
        UINT8 bOwner,
        UINT8 *GenerateSuccessAudit,
        UINT8 *GenerateFailureAudit){
  UINT8 *v13; 
  char v14; 
  UINT8 *v15; 
  unsigned int v16; 
  _ETHREAD *CurrentThread; 
  _ACL *v21; 
  char v22; 
  UINT64 v23; 
  char v24[8]; 
  _SEP_GLOBAL_SACL *Match; 

  v13 = GenerateSuccessAudit;
  v14 = 0;
  v15 = GenerateFailureAudit;
  v16 = DesiredAccess;
  if( GenerateSuccessAudit && !*GenerateSuccessAudit || GenerateFailureAudit && !*GenerateFailureAudit )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    Match = 0i64;
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquireResourceSharedLite((UINT64)&unk_140CEC530, 1);
    if( SepRmGlobalSaclFind(&Match, 0i64, ObjectType, 0) >= 0 )
    {
      v21 = (_ACL *)*((_QWORD *)Match + 3);
      if( v21 )
      {
        LOBYTE(GenerateSuccessAudit) = 0;
        v24[0] = 0;
        LODWORD(v23) = ObjectTypeListLength;
        SepExamineSaclEx(
          v21,
          ResourceSacl,
          Token,
          v16,
          ObjectTypeList,
          v23,
          ReturnResultList,
          AccessStatus,
          GrantedAccess,
          PrincipalSelfSid,
          bOwner,
          (UINT8 *)&GenerateSuccessAudit,
          (UINT8 *)v24);
        if( v13 )
        {
          if( *v13 || (v22 = 0, (_BYTE)GenerateSuccessAudit) )
            v22 = 1;
          *v13 = v22;
        }
        if( v15 )
        {
          if( *v15 || v24[0] )
            v14 = 1;
          *v15 = v14;
        }
      }
    }
    ExReleaseResourceLite(&unk_140CEC530);
    KeLeaveCriticalRegion();
  }
}

Referenced by:

SepAccessCheckAndAuditAlarmWithAdminlessChecks