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 _)); }
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 _)); }
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 _)); }
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 _); }); }
public void Mutex_OpenExisting_NullName() { Assert.Throws <ArgumentNullException>(() => { MutexAcl.OpenExisting(null, MutexRights.FullControl).Dispose(); }); Assert.Throws <ArgumentNullException>(() => { MutexAcl.TryOpenExisting(null, MutexRights.FullControl, out _); }); }
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 _); }); }
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); }
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; } }