SePrivilegePolicyCheck

NTSTATUS __stdcall SePrivilegePolicyCheck(
        UINT64 *RemainingDesiredAccess,
        UINT64 *PreviouslyGrantedAccess,
        _SECURITY_SUBJECT_CONTEXT *SubjectSecurityContext,
        VOID *ExplicitToken,
        PRIVILEGE_SET **PrivilegeSet,
        INT8 PreviousMode){
  unsigned int v6; 
  char v7; 
  int v11; 
  int v12; 
  char v13; 
  char v14; 
  UINT64 v16; 
  char v17; 
  VOID **PoolWithTag; 
  int v19; 
  __int64 v20; 
  __int64 v21; 
  __int64 v22; 
  _LUID_AND_ATTRIBUTES RequiredPrivileges; 

  v6 = 0;
  v7 = 0;
  v11 = 0;
  if( SubjectSecurityContext )
  {
    ExplicitToken = SubjectSecurityContext->ClientToken;
    if( !SubjectSecurityContext->ClientToken )
      ExplicitToken = SubjectSecurityContext->PrimaryToken;
  }
  v12 = *(_DWORD *)RemainingDesiredAccess;
  if( (*(_DWORD *)RemainingDesiredAccess & 0x1000000) != 0 )
  {
    RequiredPrivileges.Luid = SeSecurityPrivilege;
    RequiredPrivileges.Attributes = 0;
    if( !SepPrivilegeCheck((_TOKEN *)ExplicitToken, &RequiredPrivileges, 1ui64, 1ui64, PreviousMode) )
      return -1073741727;
    *(_DWORD *)RemainingDesiredAccess &= ~0x1000000u;
    v11 = v19;
    *(_DWORD *)PreviouslyGrantedAccess |= 0x1000000u;
    v7 = v19;
    v12 = *(_DWORD *)RemainingDesiredAccess;
  }
  if( (v12 & 0x80000) == 0 )
    goto LABEL_4;
  RequiredPrivileges.Luid = (_LUID)SeTakeOwnershipPrivilege;
  RequiredPrivileges.Attributes = 0;
  if( SepPrivilegeCheck((_TOKEN *)ExplicitToken, &RequiredPrivileges, 1ui64, 1ui64, PreviousMode) )
  {
    *(_DWORD *)RemainingDesiredAccess &= ~0x80000u;
    ++v11;
    *(_DWORD *)PreviouslyGrantedAccess |= 0x80000u;
    v14 = v16;
    v13 = 0;
    goto LABEL_6;
  }
  RequiredPrivileges.Luid = (_LUID)SeRelabelPrivilege;
  RequiredPrivileges.Attributes = 0;
  if( SepPrivilegeCheck((_TOKEN *)ExplicitToken, &RequiredPrivileges, v16, (unsigned int)v16, PreviousMode) )
  {
    *(_DWORD *)RemainingDesiredAccess &= ~0x80000u;
    ++v11;
    *(_DWORD *)PreviouslyGrantedAccess |= 0x80000u;
    v13 = v17;
  }
  else
  {
LABEL_4:
    v13 = 0;
  }
  v14 = 0;
LABEL_6:
  if( !v11 )
    return 0;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)(12 * v11 + 8), 1917871443i64);
  *PrivilegeSet = (PRIVILEGE_SET *)PoolWithTag;
  if( PoolWithTag )
  {
    *(_DWORD *)PoolWithTag = v11;
    (*PrivilegeSet)->Control = 0;
    if( v14 )
    {
      v6 = 1;
      (*PrivilegeSet)->Privilege[0].Luid = (_LUID)SeTakeOwnershipPrivilege;
      (*PrivilegeSet)->Privilege[0].Attributes = 0x80000000;
    }
    if( v7 )
    {
      v20 = v6++;
      v21 = v20;
      (*PrivilegeSet)->Privilege[v21].Luid = SeSecurityPrivilege;
      (*PrivilegeSet)->Privilege[v21].Attributes = 0x80000000;
    }
    if( v13 )
    {
      v22 = v6;
      (*PrivilegeSet)->Privilege[v22].Luid = (_LUID)SeRelabelPrivilege;
      (*PrivilegeSet)->Privilege[v22].Attributes = 0x80000000;
    }
    return 0;
  }
  return -1073741670;
}

Referenced by:

SeAccessCheckByTypeWithAdminlessChecks
SepAccessCheckAndAuditAlarmWithAdminlessChecks