示例#1
0
        public void Mutex_OpenExisting_PathNotFound()
        {
            string name = @"global\foo";

            Assert.Throws <DirectoryNotFoundException>(() =>
            {
                MutexAcl.OpenExisting(name, MutexRights.FullControl).Dispose();
            });

            Assert.False(MutexAcl.TryOpenExisting(name, MutexRights.FullControl, out _));
        }
示例#2
0
        public void Mutex_OpenExisting_NameInvalid()
        {
            string name = '\0'.ToString();

            Assert.Throws <WaitHandleCannotBeOpenedException>(() =>
            {
                MutexAcl.OpenExisting(name, MutexRights.FullControl).Dispose();
            });

            Assert.False(MutexAcl.TryOpenExisting(name, MutexRights.FullControl, out _));
        }
示例#3
0
        public void Mutex_OpenExisting_NameNotFound()
        {
            string name = "ThisShouldNotExist";

            Assert.Throws <WaitHandleCannotBeOpenedException>(() =>
            {
                MutexAcl.OpenExisting(name, MutexRights.FullControl).Dispose();
            });

            Assert.False(MutexAcl.TryOpenExisting(name, MutexRights.FullControl, out _));
        }
示例#4
0
        public void Mutex_OpenExisting_EmptyName()
        {
            Assert.Throws <ArgumentException>(() =>
            {
                MutexAcl.OpenExisting(string.Empty, MutexRights.FullControl).Dispose();
            });

            Assert.Throws <ArgumentException>(() =>
            {
                MutexAcl.TryOpenExisting(string.Empty, MutexRights.FullControl, out _);
            });
        }
示例#5
0
        public void Mutex_OpenExisting_NullName()
        {
            Assert.Throws <ArgumentNullException>(() =>
            {
                MutexAcl.OpenExisting(null, MutexRights.FullControl).Dispose();
            });

            Assert.Throws <ArgumentNullException>(() =>
            {
                MutexAcl.TryOpenExisting(null, MutexRights.FullControl, out _);
            });
        }
示例#6
0
        public void Mutex_OpenExisting_BadPathName()
        {
            string name = @"\\?\Path";

            Assert.Throws <System.IO.IOException>(() =>
            {
                MutexAcl.OpenExisting(name, MutexRights.FullControl).Dispose();
            });
            Assert.Throws <System.IO.IOException>(() =>
            {
                MutexAcl.TryOpenExisting(name, MutexRights.FullControl, out _);
            });
        }
示例#7
0
        public void Mutex_OpenExisting()
        {
            string        name             = GetRandomName();
            MutexSecurity expectedSecurity = GetMutexSecurity(WellKnownSidType.BuiltinUsersSid, MutexRights.FullControl, AccessControlType.Allow);

            using Mutex mutexNew = CreateAndVerifyMutex(initiallyOwned: true, name, expectedSecurity, expectedCreatedNew: true);

            using Mutex mutexExisting = MutexAcl.OpenExisting(name, MutexRights.FullControl);

            VerifyHandles(mutexNew, mutexExisting);
            MutexSecurity actualSecurity = mutexExisting.GetAccessControl();

            VerifyMutexSecurity(expectedSecurity, actualSecurity);
        }
示例#8
0
        private Mutex CreateAndVerifyMutex(bool initiallyOwned, string name, MutexSecurity expectedSecurity, bool expectedCreatedNew)
        {
            Mutex mutex = MutexAcl.Create(initiallyOwned, name, out bool createdNew, expectedSecurity);

            Assert.NotNull(mutex);
            Assert.Equal(createdNew, expectedCreatedNew);

            if (expectedSecurity != null)
            {
                MutexSecurity actualSecurity = mutex.GetAccessControl();
                VerifyMutexSecurity(expectedSecurity, actualSecurity);
            }

            return(mutex);
        }
        /// <summary>
        /// Initializes a new instance of the InterProcessWaitHandle class
        /// </summary>
        /// <param name="name">the name of the underlaying mutex</param>
        public InterProcessWaitHandle(string name)
        {
            var ctl = new MutexSecurity();
            var allowEveryoneRule = new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.FullControl, AccessControlType.Allow);

            ctl.AddAccessRule(allowEveryoneRule);
            innerMux = MutexAcl.Create(false, name, out bool isNew, ctl);
            if (!isNew)
            {
                LogEnvironment.LogDebugEvent("opened existing mutex...", LogSeverity.Report);
                //currentlyOwned.Value = false;
            }
            else
            {
                //currentlyOwned = false;
            }
        }