Not attach the security object to a Mutex object. : Mutex « Thread « VB.Net Tutorial






Imports System
Imports System.Threading
Imports System.Security.AccessControl
Imports System.Security.Principal

Public Class Example

    Public Shared Sub Main()
        Dim user As String = Environment.UserDomainName & "\" & Environment.UserName
        Dim mSec As New MutexSecurity()
        Dim ruleA As New MutexAccessRule(user,MutexRights.Synchronize Or MutexRights.Modify,AccessControlType.Allow)
        mSec.AddAccessRule(ruleA)

        Dim rule As New MutexAccessRule(user,MutexRights.ChangePermissions,AccessControlType.Deny)
        mSec.AddAccessRule(rule)

        ShowSecurity(mSec)

        rule = New MutexAccessRule(user, MutexRights.ReadPermissions, AccessControlType.Allow)
        mSec.AddAccessRule(rule)

        ShowSecurity(mSec)

        Console.WriteLine("Use RemoveAccessRuleSpecific on the original rule.")
        mSec.RemoveAccessRuleSpecific(ruleA)

        ShowSecurity(mSec)

        Console.WriteLine("Use RemoveAccessRuleSpecific with the correct rights.")
        rule = New MutexAccessRule(user,MutexRights.Synchronize Or MutexRights.Modify Or MutexRights.ReadPermissions, AccessControlType.Allow)
        mSec.RemoveAccessRuleSpecific(rule)

        ShowSecurity(mSec)
    End Sub 

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

        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)
        Next

    End Sub
End Class








23.7.Mutex
23.7.1.Global Mutex
23.7.2.Mutex synchronizes access to a protected resource
23.7.3.Not attach the security object to a Mutex object.