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

Комментарии

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

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

Примечание

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

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

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

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

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

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

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

  • Вставка бессмысленных ACL в списки ACL.

Единственными возможностями, не поддерживаемыми объектами безопасности .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)

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

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

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

AddAuditRule(AuditRule)

Добавляет указанное правило аудита в системный список управления доступом, связанный с данным объектом 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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

RemoveAccessRuleAll(AccessRule)

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

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

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

RemoveAccessRuleSpecific(AccessRule)

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

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

Осуществляет поиск правила управления доступом, в точности соответствующего указанному правилу, и удаляет найденное правило.

RemoveAuditRule(AuditRule)

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

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

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

RemoveAuditRuleAll(AuditRule)

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

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

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

RemoveAuditRuleSpecific(AuditRule)

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

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

Осуществляет поиск правила аудита, в точности соответствующего указанному правилу, и удаляет найденное правило.

ResetAccessRule(AccessRule)

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

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

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

SetAccessRule(AccessRule)

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

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

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

SetAccessRuleProtection(Boolean, Boolean)

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

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

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

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

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

SetAuditRuleProtection(Boolean, Boolean)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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