コード例 #1
0
        private void InitMutex()
        {
            Assembly newAss = Assembly.GetExecutingAssembly();

            string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), false).GetValue(0)).Value.ToString();
            string mutexId = $"Global\\{{{appGuid}}}";

            _mutex = new Mutex(false, mutexId);

            MutexAccessRule allowEveryoneRule = new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.FullControl, AccessControlType.Allow);
            MutexSecurity   securitySettings  = new MutexSecurity();

            securitySettings.AddAccessRule(allowEveryoneRule);
            // get user rights
            if (_mutex.WaitOne(TimeSpan.Zero, true))
            {
                GerLog.PrintInfo("Current access rules:");
                foreach (MutexAccessRule accessRule in securitySettings.GetAccessRules(true, true, typeof(NTAccount)))
                {
                    GerLog.PrintInfo($"User: {accessRule.IdentityReference}");
                    GerLog.PrintInfo($"Type: {accessRule.AccessControlType}");
                    GerLog.PrintInfo($"Rights: {accessRule.MutexRights}");
                }
            }

            _mutex.SetAccessControl(securitySettings);
        }
コード例 #2
0
ファイル: source.cs プロジェクト: zhimaqiao51/docs
    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();
        }
    }
コード例 #3
0
        public void CanSetAndGetMutexSecurity()
        {
            if (PlatformID.Win32NT != Environment.OSVersion.Platform)
            {
                Assert.Ignore(); return;
            }

            MutexAccessRule             rule; SecurityIdentifier sid;
            AuthorizationRuleCollection rulesA, rulesB, rulesC;
            bool   createdNew; MutexSecurity security;
            string name = @"Local\MonoTestMutex";

            using (Mutex mutex = new Mutex(false, name, out createdNew)) {
                Assert.IsTrue(createdNew);

                security = mutex.GetAccessControl();
                rulesA   = security.GetAccessRules(true, false, typeof(SecurityIdentifier));
                Assert.AreNotEqual(0, rulesA.Count);

                // Contrary to what you'd expect, these classes only try to persist sections that
                // that were *changed*. Awful, eh? To be fair, if you retrieve and modify it's fine.
                security = new MutexSecurity();
                mutex.SetAccessControl(security);

                security = mutex.GetAccessControl();
                rulesB   = security.GetAccessRules(true, false, typeof(SecurityIdentifier));
                Assert.AreEqual(rulesA.Count, rulesB.Count);

                // And here's our dummy change. Observe...
                sid  = new SecurityIdentifier("S-1-5-12-3456-7890");
                rule = new MutexAccessRule(sid, MutexRights.Synchronize, AccessControlType.Allow);

                security = new MutexSecurity();
                security.RemoveAccessRuleSpecific(rule);
                mutex.SetAccessControl(security);

                security = mutex.GetAccessControl();
                rulesC   = security.GetAccessRules(true, false, typeof(SecurityIdentifier));
                Assert.AreEqual(0, rulesC.Count);
            }
        }
コード例 #4
0
        private void VerifyMutexSecurity(MutexSecurity expectedSecurity, MutexSecurity actualSecurity)
        {
            Assert.Equal(typeof(MutexRights), expectedSecurity.AccessRightType);
            Assert.Equal(typeof(MutexRights), actualSecurity.AccessRightType);

            List <MutexAccessRule> expectedAccessRules = expectedSecurity.GetAccessRules(includeExplicit: true, includeInherited: false, typeof(SecurityIdentifier))
                                                         .Cast <MutexAccessRule>().ToList();

            List <MutexAccessRule> actualAccessRules = actualSecurity.GetAccessRules(includeExplicit: true, includeInherited: false, typeof(SecurityIdentifier))
                                                       .Cast <MutexAccessRule>().ToList();

            Assert.Equal(expectedAccessRules.Count, actualAccessRules.Count);
            if (expectedAccessRules.Count > 0)
            {
                Assert.All(expectedAccessRules, actualAccessRule =>
                {
                    int count = expectedAccessRules.Count(expectedAccessRule => AreAccessRulesEqual(expectedAccessRule, actualAccessRule));
                    Assert.True(count > 0);
                });
            }
        }