wasSharpNET

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 8  →  ?path2? @ 9
/Platform/Windows/Commands/NetSH/URLACL.cs
@@ -0,0 +1,90 @@
///////////////////////////////////////////////////////////////////////////
// Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 //
// Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
// rights of fair usage, the disclaimer and warranty conditions. //
///////////////////////////////////////////////////////////////////////////
 
using System.Diagnostics;
using System.Text;
using System.Text.RegularExpressions;
 
namespace wasSharpNET.Platform.Windows.Commands.NetSH
{
public class URLACL
{
public string domain;
public string URL;
 
private readonly Regex URLReservationRegex;
public string username;
 
public URLACL(string URL, string username, string domain)
{
this.URL = URL;
this.username = username;
this.domain = domain;
 
URLReservationRegex =
new Regex(
string.Format(@"{0}.*{1}", Regex.Escape(URL),
Regex.Escape(string.Format(@"{0}\{1}", domain, username))),
RegexOptions.Singleline | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase |
RegexOptions.Compiled);
}
 
public bool isReserved
{
get
{
var netSHOutput = new StringBuilder();
var checkProcess = new System.Diagnostics.Process();
checkProcess.StartInfo = new ProcessStartInfo("netsh", @"http show urlacl")
{
RedirectStandardOutput = true,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = false
};
 
checkProcess.OutputDataReceived += (sender, output) =>
{
if (output?.Data != null)
{
netSHOutput.Append(output.Data);
}
};
 
checkProcess.Start();
checkProcess.BeginOutputReadLine();
checkProcess.WaitForExit();
 
 
return URLReservationRegex.IsMatch(netSHOutput.ToString());
}
}
 
public void Reserve()
{
System.Diagnostics.Process.Start(new ProcessStartInfo("netsh",
string.Format(@"http add urlacl url={0} user={1}\{2}", URL, domain, username))
{
Verb = @"runas",
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = true
}).WaitForExit();
}
 
public void Release()
{
System.Diagnostics.Process.Start(new ProcessStartInfo("netsh",
string.Format(@"http del urlacl url={0}", URL))
{
Verb = @"runas",
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = true
}).WaitForExit();
}
}
}