Поделиться через


MutexSecurity Класс

Определение

Представляет безопасность управления доступом Windows для именованного мьютекса. Этот класс не может быть унаследован.

public ref class MutexSecurity sealed : System::Security::AccessControl::NativeObjectSecurity
public sealed class MutexSecurity : System.Security.AccessControl.NativeObjectSecurity
[System.Security.SecurityCritical]
public sealed class MutexSecurity : System.Security.AccessControl.NativeObjectSecurity
type MutexSecurity = class
    inherit NativeObjectSecurity
[<System.Security.SecurityCritical>]
type MutexSecurity = class
    inherit NativeObjectSecurity
Public NotInheritable Class MutexSecurity
Inherits NativeObjectSecurity
Наследование
Атрибуты

Примеры

В следующем примере кода показано разделение Allow правил и Deny правил и отображение сочетания прав в совместимых правилах. В примере создается MutexSecurity объект, добавляются правила, которые разрешают и запрещают различные права для текущего пользователя, и отображаются результирующая пара правил. Затем в примере разрешены новые права для текущего пользователя и отображается результат, показывающий, что новые права объединяются с существующим Allow правилом.

Замечание

Этот пример не присоединяет объект безопасности к объекту Mutex . Примеры подключения объектов безопасности можно найти в Mutex.GetAccessControl и Mutex.SetAccessControl.

using System;
using System.Threading;
using System.Security.AccessControl;
using System.Security.Principal;

public class Example
{
    public static void Main()
    {
        // Create a string representing the current user.
        string user = Environment.UserDomainName + "\\" + 
            Environment.UserName;

        // Create a security object that grants no access.
        MutexSecurity mSec = new MutexSecurity();

        // Add a rule that grants the current user the 
        // right to enter or release the mutex.
        MutexAccessRule rule = new MutexAccessRule(user, 
            MutexRights.Synchronize | MutexRights.Modify, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        // Add a rule that denies the current user the 
        // right to change permissions on the mutex.
        rule = new MutexAccessRule(user, 
            MutexRights.ChangePermissions, 
            AccessControlType.Deny);
        mSec.AddAccessRule(rule);

        // Display the rules in the security object.
        ShowSecurity(mSec);

        // Add a rule that allows the current user the 
        // right to read permissions on the mutex. This rule
        // is merged with the existing Allow rule.
        rule = new MutexAccessRule(user, 
            MutexRights.ReadPermissions, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        ShowSecurity(mSec);
    }

    private static void ShowSecurity(MutexSecurity security)
    {
        Console.WriteLine("\r\nCurrent access rules:\r\n");

        foreach(MutexAccessRule ar in 
            security.GetAccessRules(true, true, typeof(NTAccount)))
        {
            Console.WriteLine("        User: {0}", ar.IdentityReference);
            Console.WriteLine("        Type: {0}", ar.AccessControlType);
            Console.WriteLine("      Rights: {0}", ar.MutexRights);
            Console.WriteLine();
        }
    }
}

/*This code example produces output similar to following:

Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

        User: TestDomain\TestUser
        Type: Allow
      Rights: Modify, Synchronize


Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

        User: TestDomain\TestUser
        Type: Allow
      Rights: Modify, ReadPermissions, Synchronize
 */
Imports System.Threading
Imports System.Security.AccessControl
Imports System.Security.Principal

Public Class Example

    Public Shared Sub Main()

        ' Create a string representing the current user.
        Dim user As String = Environment.UserDomainName _ 
            & "\" & Environment.UserName

        ' Create a security object that grants no access.
        Dim mSec As New MutexSecurity()

        ' Add a rule that grants the current user the 
        ' right to enter or release the mutex.
        Dim rule As New MutexAccessRule(user, _
            MutexRights.Synchronize _
            Or MutexRights.Modify, _
            AccessControlType.Allow)
        mSec.AddAccessRule(rule)

        ' Add a rule that denies the current user the 
        ' right to change permissions on the mutex.
        rule = New MutexAccessRule(user, _
            MutexRights.ChangePermissions, _
            AccessControlType.Deny)
        mSec.AddAccessRule(rule)

        ' Display the rules in the security object.
        ShowSecurity(mSec)

        ' Add a rule that allows the current user the 
        ' right to read permissions on the mutex. This rule
        ' is merged with the existing Allow rule.
        rule = New MutexAccessRule(user, _
            MutexRights.ReadPermissions, _
            AccessControlType.Allow)
        mSec.AddAccessRule(rule)

        ShowSecurity(mSec)

    End Sub 

    Private Shared Sub ShowSecurity(ByVal security As MutexSecurity)
        Console.WriteLine(vbCrLf & "Current access rules:" & vbCrLf)

        For Each ar As MutexAccessRule In _
            security.GetAccessRules(True, True, GetType(NTAccount))

            Console.WriteLine("        User: {0}", ar.IdentityReference)
            Console.WriteLine("        Type: {0}", ar.AccessControlType)
            Console.WriteLine("      Rights: {0}", ar.MutexRights)
            Console.WriteLine()
        Next

    End Sub
End Class 

'This code example produces output similar to following:
'
'Current access rules:
'
'        User: TestDomain\TestUser
'        Type: Deny
'      Rights: ChangePermissions
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: Modify, Synchronize
'
'
'Current access rules:
'
'        User: TestDomain\TestUser
'        Type: Deny
'      Rights: ChangePermissions
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: Modify, ReadPermissions, Synchronize

Комментарии

Замечание

Этот тип поддерживается только в Windows.

Объект MutexSecurity задает права доступа для именованного системного мьютекса, а также указывает способ аудита попыток доступа. Права доступа к мьютексу выражаются как правила, с каждым правилом доступа, представленным MutexAccessRule объектом. Каждое правило аудита представлено MutexAuditRule объектом.

Это отражает базовую систему безопасности Windows, в которой каждый защищаемый объект имеет по крайней мере один список управления доступом (DACL), который управляет доступом к защищенному объекту и по крайней мере один список системного контроля доступа (SACL), указывающий, какие попытки доступа проверяются. DaCL и SACL — это упорядоченные списки записей управления доступом (ACE), которые указывают доступ и аудит для пользователей и групп. Объект или MutexAuditRule объект MutexAccessRule может представлять несколько ACE.

Замечание

Mutex Объект может представлять локальный мьютекс или именованный системный мьютекс. Безопасность управления доступом Windows имеет смысл только для именованных системных мьютексов.

MutexAccessRuleКлассы MutexSecurityи MutexAuditRule классы скрывают сведения о реализации списков управления доступом и службами управления доступом. Они позволяют игнорировать семнадцать различных типов ACE и сложность правильного поддержания наследования и распространения прав доступа. Эти объекты также предназначены для предотвращения следующих распространенных ошибок управления доступом:

  • Создание дескриптора безопасности с помощью null DACL. Пустая ссылка на DACL позволяет любому пользователю добавлять правила доступа к объекту, потенциально создавая атаку типа "отказ в обслуживании". Новый MutexSecurity объект всегда начинается с пустого DACL, который запрещает всем пользователям доступ.

  • Нарушение канонического порядка acEs. Если список ACE в DACL не хранится в каноническом порядке, пользователи могут непреднамеренно получить доступ к защищенному объекту. Например, права на доступ отказано всегда должны отображаться до разрешенных прав доступа. MutexSecurity объекты поддерживают правильный порядок внутри системы.

  • Управление флагами дескриптора безопасности, которые должны находиться только под контролем resource manager.

  • Создание недопустимых сочетаний флагов ACE.

  • Управление наследуемыми acEs. Наследование и распространение обрабатываются диспетчером ресурсов в ответ на изменения, внесенные в правила доступа и аудита.

  • Вставка бессмысленных acEs в списки управления доступом.

Единственными возможностями, не поддерживаемыми объектами безопасности .NET, являются опасные действия, которые следует избежать большинством разработчиков приложений, таких как:

  • Низкоуровневые задачи, которые обычно выполняются диспетчером ресурсов.

  • Добавление или удаление записей управления доступом таким образом, чтобы не поддерживать каноническое упорядочение.

Чтобы изменить безопасность управления доступом Windows для именованного мьютекса, используйте Mutex.GetAccessControl метод для получения MutexSecurity объекта. Измените объект безопасности, добавив и удалив правила, а затем используйте метод для повторного Mutex.SetAccessControl его кэширования.

Это важно

Изменения, внесенные в MutexSecurity объект, не влияют на уровни доступа именованного мьютекса, пока не вызовете Mutex.SetAccessControl метод, чтобы назначить измененный объект безопасности именованным мьютексу.

Чтобы скопировать безопасность управления доступом из одного мьютекса в другой, используйте Mutex.GetAccessControl метод для получения MutexSecurity объекта, представляющего правила доступа и аудита для первого мьютекса, а затем используйте Mutex.SetAccessControl метод или конструктор, принимаюющий MutexSecurity объект, чтобы назначить эти правила второму мьютексу.

Пользователи с инвестициями в язык определения дескриптора безопасности (SDDL) могут использовать SetSecurityDescriptorSddlForm метод, чтобы задать правила доступа для именованного мьютекса, и GetSecurityDescriptorSddlForm метод для получения строки, представляющей правила доступа в формате SDDL. Это не рекомендуется для новой разработки.

Конструкторы

Имя Описание
MutexSecurity()

Инициализирует новый экземпляр MutexSecurity класса со значениями по умолчанию.

MutexSecurity(String, AccessControlSections)

Инициализирует новый экземпляр MutexSecurity класса с указанными разделами правил безопасности управления доступом из системного мьютекса с указанным именем.

Свойства

Имя Описание
AccessRightType

Возвращает перечисление, которое MutexSecurity класс использует для представления прав доступа.

AccessRulesModified

Возвращает или задает логическое значение, указывающее, были ли изменены правила доступа, связанные с этим ObjectSecurity объектом.

(Унаследовано от ObjectSecurity)
AccessRuleType

Возвращает тип, который MutexSecurity класс использует для представления правил доступа.

AreAccessRulesCanonical

Возвращает логическое значение, указывающее, находятся ли правила доступа, связанные с этим ObjectSecurity объектом, в каноническом порядке.

(Унаследовано от ObjectSecurity)
AreAccessRulesProtected

Возвращает логическое значение, указывающее, защищен ли список управления доступом (DACL), связанный с этим ObjectSecurity объектом.

(Унаследовано от ObjectSecurity)
AreAuditRulesCanonical

Возвращает логическое значение, указывающее, находятся ли правила аудита, связанные с этим ObjectSecurity объектом, в каноническом порядке.

(Унаследовано от ObjectSecurity)
AreAuditRulesProtected

Возвращает логическое значение, указывающее, защищен ли список управления доступом системы (SACL), связанный с этим ObjectSecurity объектом.

(Унаследовано от ObjectSecurity)
AuditRulesModified

Возвращает или задает логическое значение, указывающее, были ли изменены правила аудита, связанные с этим ObjectSecurity объектом.

(Унаследовано от ObjectSecurity)
AuditRuleType

Возвращает тип, который MutexSecurity класс использует для представления правил аудита.

GroupModified

Возвращает или задает логическое значение, указывающее, была ли изменена группа, связанная с защищаемым объектом.

(Унаследовано от ObjectSecurity)
IsContainer

Возвращает логическое значение, указывающее, является ли этот ObjectSecurity объект объектом контейнера.

(Унаследовано от ObjectSecurity)
IsDS

Возвращает логическое значение, указывающее, является ли этот ObjectSecurity объект объектом каталога.

(Унаследовано от ObjectSecurity)
OwnerModified

Возвращает или задает логическое значение, указывающее, был ли изменен владелец защищаемого объекта.

(Унаследовано от ObjectSecurity)
SecurityDescriptor

Возвращает дескриптор безопасности для этого экземпляра.

(Унаследовано от ObjectSecurity)

Методы

Имя Описание
AccessRuleFactory(IdentityReference, Int32, Boolean, InheritanceFlags, PropagationFlags, AccessControlType)

Создает новое правило управления доступом для указанного пользователя с указанными правами доступа, контролем доступа и флагами.

AddAccessRule(AccessRule)

Добавляет указанное правило доступа в список управления доступом (DACL), связанный с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
AddAccessRule(MutexAccessRule)

Ищет соответствующее правило управления доступом, с которым можно объединить новое правило. Если нет, добавляет новое правило.

AddAuditRule(AuditRule)

Добавляет указанное правило аудита в список управления доступом системы (SACL), связанный с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
AddAuditRule(MutexAuditRule)

Ищет правило аудита, с которым можно объединить новое правило. Если нет, добавляет новое правило.

AuditRuleFactory(IdentityReference, Int32, Boolean, InheritanceFlags, PropagationFlags, AuditFlags)

Создает новое правило аудита, указывающее пользователя, к которому применяется правило, права доступа к аудиту и результат, который активирует правило аудита.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetAccessRules(Boolean, Boolean, Type)

Возвращает коллекцию правил доступа, связанных с указанным идентификатором безопасности.

(Унаследовано от CommonObjectSecurity)
GetAuditRules(Boolean, Boolean, Type)

Возвращает коллекцию правил аудита, связанных с указанным идентификатором безопасности.

(Унаследовано от CommonObjectSecurity)
GetGroup(Type)

Возвращает основную группу, связанную с указанным владельцем.

(Унаследовано от ObjectSecurity)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetOwner(Type)

Возвращает владельца, связанного с указанной основной группой.

(Унаследовано от ObjectSecurity)
GetSecurityDescriptorBinaryForm()

Возвращает массив байтовых значений, представляющий сведения о дескрипторе безопасности для этого ObjectSecurity объекта.

(Унаследовано от ObjectSecurity)
GetSecurityDescriptorSddlForm(AccessControlSections)

Возвращает представление языка определения дескриптора безопасности (SDDL) указанных разделов дескриптора безопасности, связанного с этим ObjectSecurity объектом.

(Унаследовано от ObjectSecurity)
GetType()

Type Возвращает текущий экземпляр.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ModifyAccess(AccessControlModification, AccessRule, Boolean)

Применяет указанное изменение к списку управления доступом(DACL), связанному с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
ModifyAccessRule(AccessControlModification, AccessRule, Boolean)

Применяет указанное изменение к списку управления доступом(DACL), связанному с этим ObjectSecurity объектом.

(Унаследовано от ObjectSecurity)
ModifyAudit(AccessControlModification, AuditRule, Boolean)

Применяет указанное изменение к списку управления доступом системы (SACL), связанному с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
ModifyAuditRule(AccessControlModification, AuditRule, Boolean)

Применяет указанное изменение к списку управления доступом системы (SACL), связанному с этим ObjectSecurity объектом.

(Унаследовано от ObjectSecurity)
Persist(Boolean, String, AccessControlSections)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим ObjectSecurity объектом, в постоянное хранилище. Рекомендуется, чтобы значения параметров, includeSections переданных конструктору, и методы сохранялись идентичны.

(Унаследовано от ObjectSecurity)
Persist(SafeHandle, AccessControlSections, Object)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим NativeObjectSecurity объектом, в постоянное хранилище. Рекомендуется, чтобы значения параметров, includeSections переданных конструктору, и методы сохранялись идентичны.

(Унаследовано от NativeObjectSecurity)
Persist(SafeHandle, AccessControlSections)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим NativeObjectSecurity объектом, в постоянное хранилище. Рекомендуется.сохранить значения параметров, переданных includeSections конструктору, и методы сохранения идентичны.

(Унаследовано от NativeObjectSecurity)
Persist(String, AccessControlSections, Object)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим NativeObjectSecurity объектом, в постоянное хранилище. Рекомендуется, чтобы значения параметров, includeSections переданных конструктору, и методы сохранялись идентичны.

(Унаследовано от NativeObjectSecurity)
Persist(String, AccessControlSections)

Сохраняет указанные разделы дескриптора безопасности, связанного с этим NativeObjectSecurity объектом, в постоянное хранилище. Рекомендуется, чтобы значения параметров, includeSections переданных конструктору, и методы сохранялись идентичны.

(Унаследовано от NativeObjectSecurity)
PurgeAccessRules(IdentityReference)

Удаляет все правила доступа, связанные с указанным IdentityReference.

(Унаследовано от ObjectSecurity)
PurgeAuditRules(IdentityReference)

Удаляет все правила аудита, связанные с указанным IdentityReference.

(Унаследовано от ObjectSecurity)
ReadLock()

Блокирует этот ObjectSecurity объект для доступа на чтение.

(Унаследовано от ObjectSecurity)
ReadUnlock()

Разблокирует этот ObjectSecurity объект для доступа на чтение.

(Унаследовано от ObjectSecurity)
RemoveAccessRule(AccessRule)

Удаляет правила доступа, содержащие тот же идентификатор безопасности и маску доступа, что и указанное правило доступа из списка управления доступом (DACL), связанного с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
RemoveAccessRule(MutexAccessRule)

Ищет правило управления доступом с тем же пользователем и AccessControlType (разрешить или запретить), как указанное правило, и с совместимыми флагами наследования и распространения; если такое правило найдено, права, содержащиеся в указанном правиле доступа, удаляются из него.

RemoveAccessRuleAll(AccessRule)

Удаляет все правила доступа, имеющие тот же идентификатор безопасности, что и указанное правило доступа из списка управления доступом (DACL), связанного с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
RemoveAccessRuleAll(MutexAccessRule)

Выполняет поиск всех правил управления доступом с одинаковым пользователем и AccessControlType (разрешить или запретить) в качестве указанного правила, а при обнаружении удаляет их.

RemoveAccessRuleSpecific(AccessRule)

Удаляет все правила доступа, которые точно соответствуют указанному правилу доступа из списка управления доступом (DACL), связанного с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
RemoveAccessRuleSpecific(MutexAccessRule)

Выполняет поиск правила управления доступом, точно соответствующего указанному правилу, и при обнаружении удаляет его.

RemoveAuditRule(AuditRule)

Удаляет правила аудита, содержащие тот же идентификатор безопасности и маску доступа, что и указанное правило аудита из списка управления доступом системы (SACL), связанного с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
RemoveAuditRule(MutexAuditRule)

Ищет правило управления аудитом с тем же пользователем, что и указанное правило, и с совместимыми флагами наследования и распространения; При обнаружении совместимого правила права, содержащиеся в указанном правиле, удаляются из него.

RemoveAuditRuleAll(AuditRule)

Удаляет все правила аудита, имеющие тот же идентификатор безопасности, что и указанное правило аудита из списка управления доступом системы (SACL), связанного с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
RemoveAuditRuleAll(MutexAuditRule)

Выполняет поиск всех правил аудита с тем же пользователем, что и указанное правило, и при обнаружении удаляет их.

RemoveAuditRuleSpecific(AuditRule)

Удаляет все правила аудита, которые точно соответствуют указанному правилу аудита из списка управления доступом системы (SACL), связанного с этим CommonObjectSecurity объектом.

(Унаследовано от CommonObjectSecurity)
RemoveAuditRuleSpecific(MutexAuditRule)

Выполняет поиск правила аудита, точно соответствующего указанному правилу, и при обнаружении удаляет его.

ResetAccessRule(AccessRule)

Удаляет все правила доступа в списке управления доступом(DACL), связанном с этим CommonObjectSecurity объектом, а затем добавляет указанное правило доступа.

(Унаследовано от CommonObjectSecurity)
ResetAccessRule(MutexAccessRule)

Удаляет все правила управления доступом с тем же пользователем, что и указанное правило, независимо от AccessControlTypeэтого, а затем добавляет указанное правило.

SetAccessRule(AccessRule)

Удаляет все правила доступа, содержащие тот же идентификатор безопасности и квалификатор, что и указанное правило доступа в списке управления доступом (DACL), связанном с этим CommonObjectSecurity объектом, а затем добавляет указанное правило доступа.

(Унаследовано от CommonObjectSecurity)
SetAccessRule(MutexAccessRule)

Удаляет все правила управления доступом с тем же пользователем и AccessControlType (разрешить или запретить), что и указанное правило, а затем добавляет указанное правило.

SetAccessRuleProtection(Boolean, Boolean)

Задает или удаляет защиту правил доступа, связанных с этим ObjectSecurity объектом. Правила защищенного доступа нельзя изменить родительскими объектами с помощью наследования.

(Унаследовано от ObjectSecurity)
SetAuditRule(AuditRule)

Удаляет все правила аудита, содержащие тот же идентификатор безопасности и квалификатор, что и указанное правило аудита в списке управления доступом системы (SACL), связанном с этим CommonObjectSecurity объектом, а затем добавляет указанное правило аудита.

(Унаследовано от CommonObjectSecurity)
SetAuditRule(MutexAuditRule)

Удаляет все правила аудита с тем же пользователем, что и указанное правило, независимо от AuditFlags значения, а затем добавляет указанное правило.

SetAuditRuleProtection(Boolean, Boolean)

Задает или удаляет защиту правил аудита, связанных с этим ObjectSecurity объектом. Защищенные правила аудита нельзя изменить родительскими объектами с помощью наследования.

(Унаследовано от ObjectSecurity)
SetGroup(IdentityReference)

Задает основную группу для дескриптора безопасности, связанного с этим ObjectSecurity объектом.

(Унаследовано от ObjectSecurity)
SetOwner(IdentityReference)

Задает владельца дескриптора безопасности, связанного с этим ObjectSecurity объектом.

(Унаследовано от ObjectSecurity)
SetSecurityDescriptorBinaryForm(Byte[], AccessControlSections)

Задает указанные разделы дескриптора безопасности для этого ObjectSecurity объекта из указанного массива значений байтов.

(Унаследовано от ObjectSecurity)
SetSecurityDescriptorBinaryForm(Byte[])

Задает дескриптор безопасности для этого ObjectSecurity объекта из указанного массива байтовых значений.

(Унаследовано от ObjectSecurity)
SetSecurityDescriptorSddlForm(String, AccessControlSections)

Задает указанные разделы дескриптора безопасности для этого ObjectSecurity объекта из указанной строки языка определения дескриптора безопасности (SDDL).

(Унаследовано от ObjectSecurity)
SetSecurityDescriptorSddlForm(String)

Задает дескриптор безопасности для этого ObjectSecurity объекта из указанной строки языка определения дескриптора безопасности (SDDL).

(Унаследовано от ObjectSecurity)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
WriteLock()

Блокирует этот ObjectSecurity объект для доступа на запись.

(Унаследовано от ObjectSecurity)
WriteUnlock()

Разблокирует этот ObjectSecurity объект для доступа на запись.

(Унаследовано от ObjectSecurity)

Применяется к

См. также раздел