Created
June 2, 2010 01:44
-
-
Save jkingry/421802 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace JoeKingry | |
{ | |
using System; | |
using System.Collections.Generic; | |
using System.Diagnostics; | |
using System.IO; | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
Console.Write(PasswordComplexityPolicy()); | |
} | |
static bool PasswordComplexityPolicy() | |
{ | |
var tempFile = Path.GetTempFileName(); | |
Process p = new Process(); | |
p.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\secedit.exe"); | |
p.StartInfo.Arguments = String.Format(@"/export /cfg ""{0}"" /quiet", tempFile); | |
p.StartInfo.CreateNoWindow = true; | |
p.StartInfo.UseShellExecute = false; | |
p.Start(); | |
p.WaitForExit(); | |
var file = IniFile.Load(tempFile); | |
IniSection systemAccess = null; | |
var passwordComplexityString = ""; | |
var passwordComplexity = 0; | |
return file.Sections.TryGetValue("System Access", out systemAccess) | |
&& systemAccess.TryGetValue("PasswordComplexity", out passwordComplexityString) | |
&& Int32.TryParse(passwordComplexityString, out passwordComplexity) | |
&& passwordComplexity == 1; | |
} | |
class IniFile | |
{ | |
public static IniFile Load(string filename) | |
{ | |
var result = new IniFile(); | |
result.Sections = new Dictionary<string, IniSection>(); | |
var section = new IniSection(String.Empty); | |
result.Sections.Add(section.Name, section); | |
foreach (var line in File.ReadAllLines(filename)) | |
{ | |
var trimedLine = line.Trim(); | |
switch (line[0]) | |
{ | |
case ';': | |
continue; | |
case '[': | |
section = new IniSection(trimedLine.Substring(1, trimedLine.Length - 2)); | |
result.Sections.Add(section.Name, section); | |
break; | |
default: | |
var parts = trimedLine.Split('='); | |
if(parts.Length > 1) | |
{ | |
section.Add(parts[0].Trim(), parts[1].Trim()); | |
} | |
break; | |
} | |
} | |
return result; | |
} | |
public IDictionary<string, IniSection> Sections { get; private set; } | |
} | |
class IniSection : Dictionary<string, string> | |
{ | |
public IniSection(string name) : base(StringComparer.OrdinalIgnoreCase) | |
{ | |
this.Name = name; | |
} | |
public string Name { get; private set; } | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment