SemaphoreSecurity Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет безопасность управления доступом Windows для именованного семафора. Этот класс не может быть унаследован.
public ref class SemaphoreSecurity sealed : System::Security::AccessControl::NativeObjectSecurity
public sealed class SemaphoreSecurity : System.Security.AccessControl.NativeObjectSecurity
[System.Security.SecurityCritical]
public sealed class SemaphoreSecurity : System.Security.AccessControl.NativeObjectSecurity
[System.Runtime.InteropServices.ComVisible(false)]
public sealed class SemaphoreSecurity : System.Security.AccessControl.NativeObjectSecurity
type SemaphoreSecurity = class
inherit NativeObjectSecurity
[<System.Security.SecurityCritical>]
type SemaphoreSecurity = class
inherit NativeObjectSecurity
[<System.Runtime.InteropServices.ComVisible(false)>]
type SemaphoreSecurity = class
inherit NativeObjectSecurity
Public NotInheritable Class SemaphoreSecurity
Inherits NativeObjectSecurity
- Наследование
- Атрибуты
Примеры
В следующем примере кода показано разделение Allow правил и Deny правил и отображение сочетания прав в совместимых правилах. В примере создается SemaphoreSecurity объект, добавляются правила, которые разрешают и запрещают различные права для текущего пользователя, и отображаются результирующая пара правил. Затем в примере разрешены новые права для текущего пользователя и отображается результат, показывающий, что новые права объединяются с существующим Allow правилом.
Замечание
Этот пример не присоединяет объект безопасности к объекту Semaphore . Примеры подключения объектов безопасности можно найти в Semaphore.GetAccessControl и Semaphore.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.
SemaphoreSecurity mSec = new SemaphoreSecurity();
// Add a rule that grants the current user the
// right to enter or release the semaphore.
SemaphoreAccessRule rule = new SemaphoreAccessRule(user,
SemaphoreRights.Synchronize | SemaphoreRights.Modify,
AccessControlType.Allow);
mSec.AddAccessRule(rule);
// Add a rule that denies the current user the
// right to change permissions on the semaphore.
rule = new SemaphoreAccessRule(user,
SemaphoreRights.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 semaphore. This rule
// is merged with the existing Allow rule.
rule = new SemaphoreAccessRule(user,
SemaphoreRights.ReadPermissions,
AccessControlType.Allow);
mSec.AddAccessRule(rule);
ShowSecurity(mSec);
}
private static void ShowSecurity(SemaphoreSecurity security)
{
Console.WriteLine("\r\nCurrent access rules:\r\n");
foreach(SemaphoreAccessRule 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.SemaphoreRights);
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 SemaphoreSecurity()
' Add a rule that grants the current user the
' right to enter or release the semaphore.
Dim rule As New SemaphoreAccessRule(user, _
SemaphoreRights.Synchronize _
Or SemaphoreRights.Modify, _
AccessControlType.Allow)
mSec.AddAccessRule(rule)
' Add a rule that denies the current user the
' right to change permissions on the semaphore.
rule = New SemaphoreAccessRule(user, _
SemaphoreRights.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 semaphore. This
' rule is merged with the existing Allow rule.
rule = New SemaphoreAccessRule(user, _
SemaphoreRights.ReadPermissions, _
AccessControlType.Allow)
mSec.AddAccessRule(rule)
ShowSecurity(mSec)
End Sub
Private Shared Sub ShowSecurity(ByVal security As SemaphoreSecurity)
Console.WriteLine(vbCrLf & "Current access rules:" & vbCrLf)
For Each ar As SemaphoreAccessRule In _
security.GetAccessRules(True, True, GetType(NTAccount))
Console.WriteLine(" User: {0}", ar.IdentityReference)
Console.WriteLine(" Type: {0}", ar.AccessControlType)
Console.WriteLine(" Rights: {0}", ar.SemaphoreRights)
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.
Объект SemaphoreSecurity задает права доступа для именованного системного семафора, а также указывает способ аудита попыток доступа. Права доступа к семафору выражаются как правила, с каждым правилом доступа, представленным SemaphoreAccessRule объектом. Каждое правило аудита представлено SemaphoreAuditRule объектом.
Это отражает базовую систему безопасности Windows, в которой каждый защищаемый объект имеет по крайней мере один список управления доступом (DACL), который управляет доступом к защищенному объекту и по крайней мере один список системного контроля доступа (SACL), указывающий, какие попытки доступа проверяются. DaCL и SACL — это упорядоченные списки записей управления доступом (ACE), которые указывают доступ и аудит для пользователей и групп. Объект или SemaphoreAuditRule объект SemaphoreAccessRule может представлять несколько ACE.
Замечание
Объект Semaphore может представлять локальный семафор или именованный системный семафор. Безопасность управления доступом Windows имеет смысл только для именованных системных семафоров.
SemaphoreAccessRuleКлассы SemaphoreSecurityи SemaphoreAuditRule классы скрывают сведения о реализации списков управления доступом и службами управления доступом. Они позволяют игнорировать семнадцать различных типов ACE и сложность правильного поддержания наследования и распространения прав доступа. Эти объекты также предназначены для предотвращения следующих распространенных ошибок управления доступом:
Создание дескриптора безопасности с помощью null DACL. Пустая ссылка на DACL позволяет любому пользователю добавлять правила доступа к объекту, потенциально создавая атаку типа "отказ в обслуживании". Новый SemaphoreSecurity объект всегда начинается с пустого DACL, который запрещает всем пользователям доступ.
Нарушение канонического порядка acEs. Если список ACE в DACL не хранится в каноническом порядке, пользователи могут непреднамеренно получить доступ к защищенному объекту. Например, права на доступ отказано всегда должны отображаться до разрешенных прав доступа. SemaphoreSecurity объекты поддерживают правильный порядок внутри системы.
Управление флагами дескриптора безопасности, которые должны находиться только под контролем resource manager.
Создание недопустимых сочетаний флагов ACE.
Управление наследуемыми acEs. Наследование и распространение обрабатываются диспетчером ресурсов в ответ на изменения, внесенные в правила доступа и аудита.
Вставка бессмысленных acEs в списки управления доступом.
Единственными возможностями, не поддерживаемыми объектами безопасности .NET, являются опасные действия, которые следует избежать большинством разработчиков приложений, таких как:
Низкоуровневые задачи, которые обычно выполняются диспетчером ресурсов.
Добавление или удаление записей управления доступом таким образом, чтобы не поддерживать каноническое упорядочение.
Чтобы изменить безопасность управления доступом Windows для именованного семафора, используйте Semaphore.GetAccessControl метод для получения SemaphoreSecurity объекта. Измените объект безопасности, добавив и удалив правила, а затем используйте метод для повторного Semaphore.SetAccessControl его кэширования.
Это важно
Изменения, внесенные в SemaphoreSecurity объект, не влияют на уровни доступа именованного семафора, пока не вызовете Semaphore.SetAccessControl метод, чтобы назначить измененный объект безопасности именованным семафору.
Чтобы скопировать безопасность управления доступом из одного семафора в другой, используйте Semaphore.GetAccessControl метод для получения SemaphoreSecurity объекта, представляющего правила доступа и аудита для первого семафора, а затем используйте Semaphore.SetAccessControl метод или конструктор, принимаюющий SemaphoreSecurity объект, чтобы назначить эти правила второму семафору.
Пользователи с инвестициями в язык определения дескриптора безопасности (SDDL) могут использовать SetSecurityDescriptorSddlForm метод для задания правил доступа для именованного семафора и GetSecurityDescriptorSddlForm метода для получения строки, представляющей правила доступа в формате SDDL. Это не рекомендуется для новой разработки.
Конструкторы
| Имя | Описание |
|---|---|
| SemaphoreSecurity() |
Инициализирует новый экземпляр SemaphoreSecurity класса со значениями по умолчанию. |
| SemaphoreSecurity(String, AccessControlSections) |
Инициализирует новый экземпляр SemaphoreSecurity класса с указанными разделами правил безопасности управления доступом из системного семафора с указанным именем. |
Свойства
| Имя | Описание |
|---|---|
| AccessRightType |
Возвращает перечисление, которое SemaphoreSecurity класс использует для представления прав доступа. |
| AccessRulesModified |
Возвращает или задает логическое значение, указывающее, были ли изменены правила доступа, связанные с этим ObjectSecurity объектом. (Унаследовано от ObjectSecurity) |
| AccessRuleType |
Возвращает тип, который SemaphoreSecurity класс использует для представления правил доступа. |
| AreAccessRulesCanonical |
Возвращает логическое значение, указывающее, находятся ли правила доступа, связанные с этим ObjectSecurity объектом, в каноническом порядке. (Унаследовано от ObjectSecurity) |
| AreAccessRulesProtected |
Возвращает логическое значение, указывающее, защищен ли список управления доступом (DACL), связанный с этим ObjectSecurity объектом. (Унаследовано от ObjectSecurity) |
| AreAuditRulesCanonical |
Возвращает логическое значение, указывающее, находятся ли правила аудита, связанные с этим ObjectSecurity объектом, в каноническом порядке. (Унаследовано от ObjectSecurity) |
| AreAuditRulesProtected |
Возвращает логическое значение, указывающее, защищен ли список управления доступом системы (SACL), связанный с этим ObjectSecurity объектом. (Унаследовано от ObjectSecurity) |
| AuditRulesModified |
Возвращает или задает логическое значение, указывающее, были ли изменены правила аудита, связанные с этим ObjectSecurity объектом. (Унаследовано от ObjectSecurity) |
| AuditRuleType |
Возвращает тип, который SemaphoreSecurity класс использует для представления правил аудита. |
| 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(SemaphoreAccessRule) |
Ищет соответствующее правило, с которым можно объединить новое правило. Если нет, добавляет новое правило. |
| AddAuditRule(AuditRule) |
Добавляет указанное правило аудита в список управления доступом системы (SACL), связанный с этим CommonObjectSecurity объектом. (Унаследовано от CommonObjectSecurity) |
| AddAuditRule(SemaphoreAuditRule) |
Ищет правило аудита, с которым можно объединить новое правило. Если нет, добавляет новое правило. |
| 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 объектом, в постоянное хранилище. Рекомендуется, чтобы значения параметров, |
| Persist(SafeHandle, AccessControlSections, Object) |
Сохраняет указанные разделы дескриптора безопасности, связанного с этим NativeObjectSecurity объектом, в постоянное хранилище. Рекомендуется, чтобы значения параметров, |
| Persist(SafeHandle, AccessControlSections) |
Сохраняет указанные разделы дескриптора безопасности, связанного с этим NativeObjectSecurity объектом, в постоянное хранилище. Рекомендуется.сохранить значения параметров, переданных |
| Persist(String, AccessControlSections, Object) |
Сохраняет указанные разделы дескриптора безопасности, связанного с этим NativeObjectSecurity объектом, в постоянное хранилище. Рекомендуется, чтобы значения параметров, |
| Persist(String, AccessControlSections) |
Сохраняет указанные разделы дескриптора безопасности, связанного с этим NativeObjectSecurity объектом, в постоянное хранилище. Рекомендуется, чтобы значения параметров, |
| PurgeAccessRules(IdentityReference) |
Удаляет все правила доступа, связанные с указанным IdentityReference. (Унаследовано от ObjectSecurity) |
| PurgeAuditRules(IdentityReference) |
Удаляет все правила аудита, связанные с указанным IdentityReference. (Унаследовано от ObjectSecurity) |
| ReadLock() |
Блокирует этот ObjectSecurity объект для доступа на чтение. (Унаследовано от ObjectSecurity) |
| ReadUnlock() |
Разблокирует этот ObjectSecurity объект для доступа на чтение. (Унаследовано от ObjectSecurity) |
| RemoveAccessRule(AccessRule) |
Удаляет правила доступа, содержащие тот же идентификатор безопасности и маску доступа, что и указанное правило доступа из списка управления доступом (DACL), связанного с этим CommonObjectSecurity объектом. (Унаследовано от CommonObjectSecurity) |
| RemoveAccessRule(SemaphoreAccessRule) |
Ищет правило управления доступом с тем же пользователем и AccessControlType (разрешить или запретить), как указанное правило, и с совместимыми флагами наследования и распространения; если такое правило найдено, права, содержащиеся в указанном правиле доступа, удаляются из него. |
| RemoveAccessRuleAll(AccessRule) |
Удаляет все правила доступа, имеющие тот же идентификатор безопасности, что и указанное правило доступа из списка управления доступом (DACL), связанного с этим CommonObjectSecurity объектом. (Унаследовано от CommonObjectSecurity) |
| RemoveAccessRuleAll(SemaphoreAccessRule) |
Выполняет поиск всех правил управления доступом с одинаковым пользователем и AccessControlType (разрешить или запретить) в качестве указанного правила, а при обнаружении удаляет их. |
| RemoveAccessRuleSpecific(AccessRule) |
Удаляет все правила доступа, которые точно соответствуют указанному правилу доступа из списка управления доступом (DACL), связанного с этим CommonObjectSecurity объектом. (Унаследовано от CommonObjectSecurity) |
| RemoveAccessRuleSpecific(SemaphoreAccessRule) |
Выполняет поиск правила управления доступом, точно соответствующего указанному правилу, и при обнаружении удаляет его. |
| RemoveAuditRule(AuditRule) |
Удаляет правила аудита, содержащие тот же идентификатор безопасности и маску доступа, что и указанное правило аудита из списка управления доступом системы (SACL), связанного с этим CommonObjectSecurity объектом. (Унаследовано от CommonObjectSecurity) |
| RemoveAuditRule(SemaphoreAuditRule) |
Ищет правило управления аудитом с тем же пользователем, что и указанное правило, и с совместимыми флагами наследования и распространения; При обнаружении совместимого правила права, содержащиеся в указанном правиле, удаляются из него. |
| RemoveAuditRuleAll(AuditRule) |
Удаляет все правила аудита, имеющие тот же идентификатор безопасности, что и указанное правило аудита из списка управления доступом системы (SACL), связанного с этим CommonObjectSecurity объектом. (Унаследовано от CommonObjectSecurity) |
| RemoveAuditRuleAll(SemaphoreAuditRule) |
Выполняет поиск всех правил аудита с тем же пользователем, что и указанное правило, и при обнаружении удаляет их. |
| RemoveAuditRuleSpecific(AuditRule) |
Удаляет все правила аудита, которые точно соответствуют указанному правилу аудита из списка управления доступом системы (SACL), связанного с этим CommonObjectSecurity объектом. (Унаследовано от CommonObjectSecurity) |
| RemoveAuditRuleSpecific(SemaphoreAuditRule) |
Выполняет поиск правила аудита, точно соответствующего указанному правилу, и при обнаружении удаляет его. |
| ResetAccessRule(AccessRule) |
Удаляет все правила доступа в списке управления доступом(DACL), связанном с этим CommonObjectSecurity объектом, а затем добавляет указанное правило доступа. (Унаследовано от CommonObjectSecurity) |
| ResetAccessRule(SemaphoreAccessRule) |
Удаляет все правила управления доступом с тем же пользователем, что и указанное правило, независимо от AccessControlTypeэтого, а затем добавляет указанное правило. |
| SetAccessRule(AccessRule) |
Удаляет все правила доступа, содержащие тот же идентификатор безопасности и квалификатор, что и указанное правило доступа в списке управления доступом (DACL), связанном с этим CommonObjectSecurity объектом, а затем добавляет указанное правило доступа. (Унаследовано от CommonObjectSecurity) |
| SetAccessRule(SemaphoreAccessRule) |
Удаляет все правила управления доступом с тем же пользователем и AccessControlType (разрешить или запретить), что и указанное правило, а затем добавляет указанное правило. |
| SetAccessRuleProtection(Boolean, Boolean) |
Задает или удаляет защиту правил доступа, связанных с этим ObjectSecurity объектом. Правила защищенного доступа нельзя изменить родительскими объектами с помощью наследования. (Унаследовано от ObjectSecurity) |
| SetAuditRule(AuditRule) |
Удаляет все правила аудита, содержащие тот же идентификатор безопасности и квалификатор, что и указанное правило аудита в списке управления доступом системы (SACL), связанном с этим CommonObjectSecurity объектом, а затем добавляет указанное правило аудита. (Унаследовано от CommonObjectSecurity) |
| SetAuditRule(SemaphoreAuditRule) |
Удаляет все правила аудита с тем же пользователем, что и указанное правило, независимо от 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) |