共用方式為


SemaphoreSecurity 類別

定義

表示具名號誌 (Semaphore) 的 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
繼承
屬性

範例

下列程式代碼範例示範規則和Deny規則之間的Allow分隔,並示範相容規則中的許可權組合。 此範例會 SemaphoreSecurity 建立 物件、新增允許和拒絕目前使用者各種許可權的規則,並顯示產生的規則組。 此範例接著會允許目前使用者的新許可權,並顯示結果,顯示新許可權會與現有 Allow 規則合併。

注意

這個範例不會將安全性物件附加至 Semaphore 物件。 您可以在和 Semaphore.SetAccessControl中找到Semaphore.GetAccessControl附加安全性物件的範例。

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

備註

SemaphoreSecurity物件會指定具名系統號誌的訪問許可權,並指定如何稽核存取嘗試。 號誌的訪問許可權會以規則表示,每個存取規則都由 SemaphoreAccessRule 物件表示。 每個稽核規則都是以 SemaphoreAuditRule 物件表示。

這會鏡像基礎 Windows 安全性系統,其中每個安全性實體物件最多都有一個選擇性訪問控制清單, (DACL) 控制安全物件的存取權,而且最多一個系統訪問控制清單 (SACL) ,以指定稽核哪些存取嘗試。 DACL 和 SACL 是 ACE) (存取控制專案的排序列表,可指定使用者和群組的存取和稽核。 SemaphoreAccessRuleSemaphoreAuditRule 物件可能代表多個 ACE。

注意

Semaphore物件可以代表本機號誌或具名系統號誌。 Windows 訪問控制安全性只對具名系統號誌有意義。

SemaphoreSecuritySemaphoreAccessRule和類別會隱藏 ACL 和 SemaphoreAuditRule ACE 的實作詳細數據。 它們可讓您忽略十七個不同的 ACE 類型,以及正確維護訪問許可權繼承和傳播的複雜度。 這些物件也設計為防止下列常見的訪問控制錯誤:

  • 使用 Null DACL 建立安全性描述項。 DACL 的 Null 參考可讓任何使用者將存取規則新增至物件,可能建立拒絕服務攻擊。 新的 SemaphoreSecurity 物件一律以空的 DACL 開頭,這會拒絕所有使用者的所有存取。

  • 違反 ACE 的正式順序。 如果 DACL 中的 ACE 清單未以標準順序保留,使用者可能會不小心獲得安全物件的存取權。 例如,拒絕的訪問許可權必須一律出現在允許的訪問許可權之前。 SemaphoreSecurity 物件會在內部維護正確的順序。

  • 操作安全性描述項旗標,這應該只在資源管理員控制之下。

  • 建立無效的 ACE 旗標組合。

  • 操作繼承的 ACE。 繼承和傳播是由資源管理員處理,以回應您對存取和稽核規則所做的變更。

  • 將無意義的 ACE 插入 ACL。

.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 類別用來表示存取權限的列舉型別 (Enumeration)。

AccessRulesModified

取得或設定布林值,指定是否已修改與這個 ObjectSecurity 物件關聯的存取規則。

(繼承來源 ObjectSecurity)
AccessRuleType

取得 SemaphoreSecurity 類別用來表示存取規則的型別。

AreAccessRulesCanonical

取得布林值,指定與這個 ObjectSecurity 物件相關聯的存取規則是否為標準順序。

(繼承來源 ObjectSecurity)
AreAccessRulesProtected

取得布林值,指定是否保護與這個 ObjectSecurity 物件相關聯的判別存取控制清單 (DACL)。

(繼承來源 ObjectSecurity)
AreAuditRulesCanonical

取得布林值,指定與 ObjectSecurity 物件相關聯的稽核規則是否為標準順序。

(繼承來源 ObjectSecurity)
AreAuditRulesProtected

取得布林值,指定是否保護與這個 ObjectSecurity 物件相關聯的系統存取控制清單 (SACL)。

(繼承來源 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)

將指定的存取規則加入與這個 CommonObjectSecurity 物件相關聯的 Discretionary 存取控制清單 (DACL)。

(繼承來源 CommonObjectSecurity)
AddAccessRule(SemaphoreAccessRule)

搜尋可合併新規則的相符規則。 如果找不到,就加入新規則。

AddAuditRule(AuditRule)

將指定的稽核規則加入與這個 CommonObjectSecurity 物件相關聯的系統存取控制清單 (SACL)。

(繼承來源 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)

傳回與這個 ObjectSecurity 物件相關聯的安全性描述元指定區段的安全性描述元定義語言 (SDDL) 表示法。

(繼承來源 ObjectSecurity)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
ModifyAccess(AccessControlModification, AccessRule, Boolean)

將指定的修改套用至與這個 CommonObjectSecurity 物件關聯的判別存取控制清單 (DACL)。

(繼承來源 CommonObjectSecurity)
ModifyAccessRule(AccessControlModification, AccessRule, Boolean)

將指定的修改套用至與這個 ObjectSecurity 物件關聯的判別存取控制清單 (DACL)。

(繼承來源 ObjectSecurity)
ModifyAudit(AccessControlModification, AuditRule, Boolean)

將指定的修改套用至與這個 CommonObjectSecurity 物件關聯的系統存取控制清單 (SACL)。

(繼承來源 CommonObjectSecurity)
ModifyAuditRule(AccessControlModification, AuditRule, Boolean)

將指定的修改套用至與這個 ObjectSecurity 物件關聯的系統存取控制清單 (SACL)。

(繼承來源 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 物件相關聯的 Discretionary 存取控制清單 (DACL),移除包含與指定存取規則相同安全識別項和存取遮罩的存取規則。

(繼承來源 CommonObjectSecurity)
RemoveAccessRule(SemaphoreAccessRule)

搜尋具有與指定之規則相同的使用者和 AccessControlType (允許或拒絕) 以及具有相容的繼承和傳用旗標的存取控制規則。如果找到這樣的規則,則會移除指定之存取規則中所包含的權限。

RemoveAccessRuleAll(AccessRule)

從與這個 CommonObjectSecurity 物件相關聯的 Discretionary 存取控制清單 (DACL),移除包含與指定存取規則相同安全識別項的所有存取規則。

(繼承來源 CommonObjectSecurity)
RemoveAccessRuleAll(SemaphoreAccessRule)

搜尋與指定規則具有相同使用者和 AccessControlType (允許或拒絕) 的所有存取控制規則,如果找到的話,便加以移除。

RemoveAccessRuleSpecific(AccessRule)

從與這個 CommonObjectSecurity 物件相關聯的 Discretionary 存取控制清單 (DACL),移除與指定存取規則完全相符的所有存取規則。

(繼承來源 CommonObjectSecurity)
RemoveAccessRuleSpecific(SemaphoreAccessRule)

搜尋與指定規則完全相符的存取控制規則,如果找到的話,便加以移除。

RemoveAuditRule(AuditRule)

從與這個 CommonObjectSecurity 物件相關聯的系統存取控制清單 (SACL),移除包含與指定稽核規則相同安全識別項和存取遮罩的稽核規則。

(繼承來源 CommonObjectSecurity)
RemoveAuditRule(SemaphoreAuditRule)

搜尋具有與指定之規則相同的使用者以及具有相容的繼承和傳用旗標的稽核控制規則。如果找到了相容的規則,則會移除指定之規則中所包含的權限。

RemoveAuditRuleAll(AuditRule)

從與這個 CommonObjectSecurity 物件相關聯的系統存取控制清單 (SACL),移除包含與指定稽核規則相同安全識別項的所有稽核規則。

(繼承來源 CommonObjectSecurity)
RemoveAuditRuleAll(SemaphoreAuditRule)

搜尋與所指定規則有相同使用者的所有稽核規則,找到以後將其移除。

RemoveAuditRuleSpecific(AuditRule)

從與這個 CommonObjectSecurity 物件相關聯的系統存取控制清單 (SACL),移除與指定稽核規則完全相符的所有稽核規則。

(繼承來源 CommonObjectSecurity)
RemoveAuditRuleSpecific(SemaphoreAuditRule)

搜尋與指定規則完全相符的稽核規則,如果找到的話,便加以移除。

ResetAccessRule(AccessRule)

移除與這個 CommonObjectSecurity 物件相關聯之 Discretionary 存取控制清單 (DACL) 中的所有存取規則,然後加入指定的存取規則。

(繼承來源 CommonObjectSecurity)
ResetAccessRule(SemaphoreAccessRule)

移除與指定規則具有相同使用者的所有存取控制規則 (不論 AccessControlType 為何),然後加入指定規則。

SetAccessRule(AccessRule)

從與這個 CommonObjectSecurity 物件相關聯之 Discretionary 存取控制清單 (DACL),移除包含與指定存取規則相同安全識別項和限定詞的所有存取規則,然後加入指定的存取規則。

(繼承來源 CommonObjectSecurity)
SetAccessRule(SemaphoreAccessRule)

移除與指定規則具有相同使用者和 AccessControlType (允許或拒絕) 的所有存取控制規則,然後加入指定規則。

SetAccessRuleProtection(Boolean, Boolean)

設定或移除與 ObjectSecurity 物件相關聯的存取規則保護。 受保護的存取規則無法透過繼承來由父物件所修改。

(繼承來源 ObjectSecurity)
SetAuditRule(AuditRule)

從與這個 CommonObjectSecurity 物件相關聯之系統存取控制清單 (SACL),移除包含與指定稽核規則相同安全識別項和限定詞的所有稽核規則,然後加入指定的稽核規則。

(繼承來源 CommonObjectSecurity)
SetAuditRule(SemaphoreAuditRule)

移除與指定規則具有相同使用者的所有稽核規則 (不論 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)

從指定的安全性描述元定義語言 (SDDL) 字串,設定這個 ObjectSecurity 物件的安全性描述元。

(繼承來源 ObjectSecurity)
SetSecurityDescriptorSddlForm(String, AccessControlSections)

從指定的安全性描述元定義語言 (SDDL) 字串,設定這個 ObjectSecurity 物件的安全性描述元之指定區段。

(繼承來源 ObjectSecurity)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)
WriteLock()

鎖定這個 ObjectSecurity 物件的寫入權限。

(繼承來源 ObjectSecurity)
WriteUnlock()

解除鎖定這個 ObjectSecurity 物件的寫入權限。

(繼承來源 ObjectSecurity)

適用於

另請參閱