EventWaitHandleSecurity.RemoveAccessRule(EventWaitHandleAccessRule) 方法

定義

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

C#
public bool RemoveAccessRule(System.Security.AccessControl.EventWaitHandleAccessRule rule);

參數

rule
EventWaitHandleAccessRule

EventWaitHandleAccessRule,其會指定要搜尋的使用者和 AccessControlType,以及必須與相符的規則 (如果找到的話) 相容的繼承和傳用旗標集合。 如果找到的話,指定從相容的規則中移除此權限。

傳回

如果找到相容的規則,則為 true,否則為 false

例外狀況

rulenull

範例

下列程式代碼範例示範如何使用 RemoveAccessRule 方法,從 Allow 物件中的 EventWaitHandleSecurity 規則移除許可權。 它也會顯示 中 rule 其他許可權會被忽略。

此範例會 EventWaitHandleSecurity 建立 物件,並新增規則,以允許和拒絕目前使用者的各種許可權。 允許的權限包括 ModifyReadPermissionsSynchronize。 此範例接著會為目前使用者建立新的規則,包括 ReadPermissions 和許可權,並使用該規則搭配 RemoveAccessRule 方法從 Allow 物件中的EventWaitHandleSecurity規則中移除ReadPermissionsTakeOwnershipTakeOwnership中的rule右邊會被忽略。

備註

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

C#
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.
        EventWaitHandleSecurity mSec = new EventWaitHandleSecurity();

        // Add a rule that grants the current user the 
        // right to wait on or signal the event and read the
        // permissions on the event.
        EventWaitHandleAccessRule rule = new EventWaitHandleAccessRule(user, 
            EventWaitHandleRights.Synchronize | EventWaitHandleRights.Modify
                | EventWaitHandleRights.ReadPermissions, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

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

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

        // Create a rule that grants the current user 
        // the right to read permissions on the event, and
        // take ownership of the event. Use this rule to 
        // remove the right to read permissions from the 
        // Allow rule for the current user. The inclusion 
        // of the right to take ownership has no effect.
        rule = new EventWaitHandleAccessRule(user, 
            EventWaitHandleRights.TakeOwnership | 
                EventWaitHandleRights.ReadPermissions, 
            AccessControlType.Allow);
        mSec.RemoveAccessRule(rule);

        ShowSecurity(mSec);
    }

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

        foreach(EventWaitHandleAccessRule 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.EventWaitHandleRights);
            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, ReadPermissions, Synchronize


Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

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

備註

目前 EventWaitHandleSecurity 會搜尋具有相同使用者和相同 AccessControlTyperule的規則。 如果找不到這類規則,則不會採取任何動作,而且方法會傳 false回 。 如果找到相符的規則,則會檢查其繼承和相容性旗標是否與 中指定的 rule旗標相容。 如果找不到相容的規則,則不會採取任何動作,而且方法會傳 false回 。 如果找到具有相容旗標的規則,則會從相容的規則中移除中指定的 rule 許可權,而 方法會傳 true回 。 如果 rule 指定不相容規則中未包含的許可權,則不會針對這些許可權採取任何動作。 如果從相容規則中移除所有許可權,則會從目前的 EventWaitHandleSecurity 物件中移除整個規則。

重要

雖然您可以使用 方法來建立事件存取規則,以指定事件存取規則的 AccessRuleFactory 繼承和傳播旗標,但不建議這麼做。 繼承和傳播對具名事件沒有任何意義,而且它們會使存取規則的維護變得更複雜。

適用於

產品 版本
.NET Core 1.0, Core 1.1, 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10