소스 검색

Removing code that uses WinForms for compatibility with PowerShell Core

tags/4.2.6
Raimund Andée [MSFT] 5 년 전
부모
커밋
d3063de68b
10개의 변경된 파일6개의 추가작업 그리고 1463개의 파일을 삭제
  1. +3
    -1
      NTFSSecurity/NTFSSecurity-Help.xml
  2. +0
    -18
      NTFSSecurity/NTFSSecurity.csproj
  3. +2
    -1
      NTFSSecurity/NTFSSecurity.format.ps1xml
  4. +0
    -309
      NTFSSecurity/ShowSimpleAccess.Designer.cs
  5. +0
    -271
      NTFSSecurity/ShowSimpleAccess.cs
  6. +0
    -168
      NTFSSecurity/ShowSimpleAccess.resx
  7. +0
    -234
      NTFSSecurity/ShowSimpleEffectiveAccess.Designer.cs
  8. +0
    -222
      NTFSSecurity/ShowSimpleEffectiveAccess.cs
  9. +0
    -165
      NTFSSecurity/ShowSimpleEffectiveAccess.resx
  10. +1
    -74
      NTFSSecurity/SimpleAccessCmdlets/SimpleAccessCmdlets.cs

+ 3
- 1
NTFSSecurity/NTFSSecurity-Help.xml 파일 보기

@@ -25,7 +25,9 @@
- Account (SamAccountName or SID)
- AccessRights (Read, Change, FullControl, etc., ...)
- AccessType (Allow or Deny)
- ApplyTo (This folder only, Only files, etc.)
-
(This folder only, Only files, etc.)
All the options are explained in the parameter section.


+ 0
- 18
NTFSSecurity/NTFSSecurity.csproj 파일 보기

@@ -95,12 +95,6 @@
<Compile Include="PathCmdlets\TestPath2.cs" />
<Compile Include="SecurityDescriptorCmdlets\GetSecurityDescriptor.cs" />
<Compile Include="SecurityDescriptorCmdlets\SetSecurityDescriptor.cs" />
<Compile Include="ShowSimpleEffectiveAccess.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ShowSimpleEffectiveAccess.Designer.cs">
<DependentUpon>ShowSimpleEffectiveAccess.cs</DependentUpon>
</Compile>
<Compile Include="Extensions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
@@ -108,12 +102,6 @@
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="ShowSimpleAccess.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ShowSimpleAccess.Designer.cs">
<DependentUpon>ShowSimpleAccess.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PrivilegeControl\PrivilegeControl.csproj">
@@ -150,16 +138,10 @@
<Compile Include="SimpleAccessCmdlets\SimpleAccessCmdlets.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="ShowSimpleEffectiveAccess.resx">
<DependentUpon>ShowSimpleEffectiveAccess.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="ShowSimpleAccess.resx">
<DependentUpon>ShowSimpleAccess.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Content Include="NTFSSecurity-Help.xml">


+ 2
- 1
NTFSSecurity/NTFSSecurity.format.ps1xml 파일 보기

@@ -146,7 +146,8 @@
</TableColumnItem>
<TableColumnItem>
<ScriptBlock>
[Security2.FileSystemSecurity2]::ConvertToApplyTo($_.InheritanceFlags, $_.PropagationFlags)
[Security2.FileSystemSecurity2]::ConvertTo
($_.InheritanceFlags, $_.PropagationFlags)
</ScriptBlock>
</TableColumnItem>
<TableColumnItem>


+ 0
- 309
NTFSSecurity/ShowSimpleAccess.Designer.cs 파일 보기

@@ -1,309 +0,0 @@
namespace NTFSSecurity
{
partial class ShowSimpleAccessForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShowSimpleAccessForm));
this.trvDirectories = new System.Windows.Forms.TreeView();
this.imlIcons = new System.Windows.Forms.ImageList(this.components);
this.lstPermissions = new System.Windows.Forms.ListView();
this.chdIdentity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chdRights = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chdAccessControlType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chkRemoveFoldersWithoutAccess = new System.Windows.Forms.CheckBox();
this.grpFilter = new System.Windows.Forms.GroupBox();
this.grpSearchForIdentity = new System.Windows.Forms.GroupBox();
this.btnSearchForIdentityNext = new System.Windows.Forms.Button();
this.btnSearchForIdentityPrev = new System.Windows.Forms.Button();
this.txtSearchForIdentity = new System.Windows.Forms.TextBox();
this.btnSearchForIdentity = new System.Windows.Forms.Button();
this.grpSearchForFolder = new System.Windows.Forms.GroupBox();
this.btnSearchForFolderPrev = new System.Windows.Forms.Button();
this.btnSearchForFolderNext = new System.Windows.Forms.Button();
this.btnSearchForFolder = new System.Windows.Forms.Button();
this.txtSearchForFolder = new System.Windows.Forms.TextBox();
this.labDirectoryTreeView = new System.Windows.Forms.Label();
this.labAccessView = new System.Windows.Forms.Label();
this.ttSearchForFolder = new System.Windows.Forms.ToolTip(this.components);
this.grpFilter.SuspendLayout();
this.grpSearchForIdentity.SuspendLayout();
this.grpSearchForFolder.SuspendLayout();
this.SuspendLayout();
//
// trvDirectories
//
this.trvDirectories.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.trvDirectories.ImageIndex = 0;
this.trvDirectories.ImageList = this.imlIcons;
this.trvDirectories.Location = new System.Drawing.Point(12, 29);
this.trvDirectories.Name = "trvDirectories";
this.trvDirectories.SelectedImageIndex = 0;
this.trvDirectories.Size = new System.Drawing.Size(320, 574);
this.trvDirectories.TabIndex = 0;
this.trvDirectories.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.trvDirectories_AfterSelect);
//
// imlIcons
//
this.imlIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imlIcons.ImageStream")));
this.imlIcons.TransparentColor = System.Drawing.Color.Transparent;
this.imlIcons.Images.SetKeyName(0, "container.jpg");
//
// lstPermissions
//
this.lstPermissions.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lstPermissions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chdIdentity,
this.chdRights,
this.chdAccessControlType});
this.lstPermissions.Location = new System.Drawing.Point(338, 29);
this.lstPermissions.Name = "lstPermissions";
this.lstPermissions.Size = new System.Drawing.Size(480, 342);
this.lstPermissions.SmallImageList = this.imlIcons;
this.lstPermissions.TabIndex = 1;
this.lstPermissions.UseCompatibleStateImageBehavior = false;
this.lstPermissions.View = System.Windows.Forms.View.Details;
//
// chdIdentity
//
this.chdIdentity.Text = "Identity";
//
// chdRights
//
this.chdRights.Text = "Rights";
//
// chdAccessControlType
//
this.chdAccessControlType.Text = "AccessControlType";
//
// chkRemoveFoldersWithoutAccess
//
this.chkRemoveFoldersWithoutAccess.AutoSize = true;
this.chkRemoveFoldersWithoutAccess.Location = new System.Drawing.Point(6, 19);
this.chkRemoveFoldersWithoutAccess.Name = "chkRemoveFoldersWithoutAccess";
this.chkRemoveFoldersWithoutAccess.Size = new System.Drawing.Size(347, 17);
this.chkRemoveFoldersWithoutAccess.TabIndex = 2;
this.chkRemoveFoldersWithoutAccess.Text = "Remove Folders that do not have different access than their parents";
this.chkRemoveFoldersWithoutAccess.UseVisualStyleBackColor = true;
this.chkRemoveFoldersWithoutAccess.CheckedChanged += new System.EventHandler(this.chkRemoveFoldersWithoutAccess_CheckedChanged);
//
// grpFilter
//
this.grpFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.grpFilter.Controls.Add(this.grpSearchForIdentity);
this.grpFilter.Controls.Add(this.grpSearchForFolder);
this.grpFilter.Controls.Add(this.chkRemoveFoldersWithoutAccess);
this.grpFilter.Location = new System.Drawing.Point(338, 377);
this.grpFilter.Name = "grpFilter";
this.grpFilter.Size = new System.Drawing.Size(480, 226);
this.grpFilter.TabIndex = 3;
this.grpFilter.TabStop = false;
this.grpFilter.Text = "Filter";
//
// grpSearchForIdentity
//
this.grpSearchForIdentity.Controls.Add(this.btnSearchForIdentityNext);
this.grpSearchForIdentity.Controls.Add(this.btnSearchForIdentityPrev);
this.grpSearchForIdentity.Controls.Add(this.txtSearchForIdentity);
this.grpSearchForIdentity.Controls.Add(this.btnSearchForIdentity);
this.grpSearchForIdentity.Location = new System.Drawing.Point(9, 125);
this.grpSearchForIdentity.Name = "grpSearchForIdentity";
this.grpSearchForIdentity.Size = new System.Drawing.Size(384, 95);
this.grpSearchForIdentity.TabIndex = 4;
this.grpSearchForIdentity.TabStop = false;
this.grpSearchForIdentity.Text = "Search for Identity";
//
// btnSearchForIdentityNext
//
this.btnSearchForIdentityNext.Enabled = false;
this.btnSearchForIdentityNext.Location = new System.Drawing.Point(222, 45);
this.btnSearchForIdentityNext.Name = "btnSearchForIdentityNext";
this.btnSearchForIdentityNext.Size = new System.Drawing.Size(75, 23);
this.btnSearchForIdentityNext.TabIndex = 7;
this.btnSearchForIdentityNext.Text = "Prev";
this.btnSearchForIdentityNext.UseVisualStyleBackColor = true;
this.btnSearchForIdentityNext.Click += new System.EventHandler(this.btnSearchForIdentityNext_Click);
//
// btnSearchForIdentityPrev
//
this.btnSearchForIdentityPrev.Enabled = false;
this.btnSearchForIdentityPrev.Location = new System.Drawing.Point(303, 45);
this.btnSearchForIdentityPrev.Name = "btnSearchForIdentityPrev";
this.btnSearchForIdentityPrev.Size = new System.Drawing.Size(75, 23);
this.btnSearchForIdentityPrev.TabIndex = 6;
this.btnSearchForIdentityPrev.Text = "Next";
this.btnSearchForIdentityPrev.UseVisualStyleBackColor = true;
this.btnSearchForIdentityPrev.Click += new System.EventHandler(this.btnSearchForIdentityPrev_Click);
//
// txtSearchForIdentity
//
this.txtSearchForIdentity.Location = new System.Drawing.Point(3, 19);
this.txtSearchForIdentity.Name = "txtSearchForIdentity";
this.txtSearchForIdentity.Size = new System.Drawing.Size(341, 20);
this.txtSearchForIdentity.TabIndex = 4;
//
// btnSearchForIdentity
//
this.btnSearchForIdentity.Location = new System.Drawing.Point(350, 17);
this.btnSearchForIdentity.Name = "btnSearchForIdentity";
this.btnSearchForIdentity.Size = new System.Drawing.Size(28, 23);
this.btnSearchForIdentity.TabIndex = 5;
this.btnSearchForIdentity.Text = "Go";
this.btnSearchForIdentity.UseVisualStyleBackColor = true;
this.btnSearchForIdentity.Click += new System.EventHandler(this.btnSearchForIdentity_Click);
//
// grpSearchForFolder
//
this.grpSearchForFolder.Controls.Add(this.btnSearchForFolderPrev);
this.grpSearchForFolder.Controls.Add(this.btnSearchForFolderNext);
this.grpSearchForFolder.Controls.Add(this.btnSearchForFolder);
this.grpSearchForFolder.Controls.Add(this.txtSearchForFolder);
this.grpSearchForFolder.Location = new System.Drawing.Point(6, 42);
this.grpSearchForFolder.Name = "grpSearchForFolder";
this.grpSearchForFolder.Size = new System.Drawing.Size(387, 77);
this.grpSearchForFolder.TabIndex = 3;
this.grpSearchForFolder.TabStop = false;
this.grpSearchForFolder.Text = "Search for Folder";
this.ttSearchForFolder.SetToolTip(this.grpSearchForFolder, "\"Search for folder\" lets you search in the tree view for the");
//
// btnSearchForFolderPrev
//
this.btnSearchForFolderPrev.Enabled = false;
this.btnSearchForFolderPrev.Location = new System.Drawing.Point(225, 45);
this.btnSearchForFolderPrev.Name = "btnSearchForFolderPrev";
this.btnSearchForFolderPrev.Size = new System.Drawing.Size(75, 23);
this.btnSearchForFolderPrev.TabIndex = 3;
this.btnSearchForFolderPrev.Text = "Prev";
this.btnSearchForFolderPrev.UseVisualStyleBackColor = true;
this.btnSearchForFolderPrev.Click += new System.EventHandler(this.btnSearchForFolderPrev_Click);
//
// btnSearchForFolderNext
//
this.btnSearchForFolderNext.Enabled = false;
this.btnSearchForFolderNext.Location = new System.Drawing.Point(306, 45);
this.btnSearchForFolderNext.Name = "btnSearchForFolderNext";
this.btnSearchForFolderNext.Size = new System.Drawing.Size(75, 23);
this.btnSearchForFolderNext.TabIndex = 2;
this.btnSearchForFolderNext.Text = "Next";
this.btnSearchForFolderNext.UseVisualStyleBackColor = true;
this.btnSearchForFolderNext.Click += new System.EventHandler(this.btnSearchForFolderNext_Click);
//
// btnSearchForFolder
//
this.btnSearchForFolder.Location = new System.Drawing.Point(353, 17);
this.btnSearchForFolder.Name = "btnSearchForFolder";
this.btnSearchForFolder.Size = new System.Drawing.Size(28, 23);
this.btnSearchForFolder.TabIndex = 1;
this.btnSearchForFolder.Text = "Go";
this.btnSearchForFolder.UseVisualStyleBackColor = true;
this.btnSearchForFolder.Click += new System.EventHandler(this.btnSearchForFolder_Click);
//
// txtSearchForFolder
//
this.txtSearchForFolder.Location = new System.Drawing.Point(6, 19);
this.txtSearchForFolder.Name = "txtSearchForFolder";
this.txtSearchForFolder.Size = new System.Drawing.Size(341, 20);
this.txtSearchForFolder.TabIndex = 0;
this.ttSearchForFolder.SetToolTip(this.txtSearchForFolder, "\"Search for folder\" lets you search in the tree view for the");
//
// labDirectoryTreeView
//
this.labDirectoryTreeView.AutoSize = true;
this.labDirectoryTreeView.Location = new System.Drawing.Point(13, 13);
this.labDirectoryTreeView.Name = "labDirectoryTreeView";
this.labDirectoryTreeView.Size = new System.Drawing.Size(57, 13);
this.labDirectoryTreeView.TabIndex = 4;
this.labDirectoryTreeView.Text = "Directories";
//
// labAccessView
//
this.labAccessView.AutoSize = true;
this.labAccessView.Location = new System.Drawing.Point(344, 12);
this.labAccessView.Name = "labAccessView";
this.labAccessView.Size = new System.Drawing.Size(202, 13);
this.labAccessView.TabIndex = 5;
this.labAccessView.Text = "Permissions given on the seletcted object";
//
// ttSearchForFolder
//
this.ttSearchForFolder.IsBalloon = true;
this.ttSearchForFolder.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
//
// ShowSimpleAccessForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(830, 615);
this.Controls.Add(this.labAccessView);
this.Controls.Add(this.labDirectoryTreeView);
this.Controls.Add(this.grpFilter);
this.Controls.Add(this.lstPermissions);
this.Controls.Add(this.trvDirectories);
this.Name = "ShowSimpleAccessForm";
this.Text = "ShowAccess";
this.grpFilter.ResumeLayout(false);
this.grpFilter.PerformLayout();
this.grpSearchForIdentity.ResumeLayout(false);
this.grpSearchForIdentity.PerformLayout();
this.grpSearchForFolder.ResumeLayout(false);
this.grpSearchForFolder.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();

}

#endregion

private System.Windows.Forms.TreeView trvDirectories;
private System.Windows.Forms.ListView lstPermissions;
private System.Windows.Forms.ColumnHeader chdIdentity;
private System.Windows.Forms.ColumnHeader chdRights;
private System.Windows.Forms.ColumnHeader chdAccessControlType;
private System.Windows.Forms.ImageList imlIcons;
private System.Windows.Forms.CheckBox chkRemoveFoldersWithoutAccess;
private System.Windows.Forms.GroupBox grpFilter;
private System.Windows.Forms.Label labDirectoryTreeView;
private System.Windows.Forms.Label labAccessView;
private System.Windows.Forms.GroupBox grpSearchForFolder;
private System.Windows.Forms.Button btnSearchForFolder;
private System.Windows.Forms.TextBox txtSearchForFolder;
private System.Windows.Forms.Button btnSearchForFolderNext;
private System.Windows.Forms.Button btnSearchForFolderPrev;
private System.Windows.Forms.GroupBox grpSearchForIdentity;
private System.Windows.Forms.Button btnSearchForIdentityNext;
private System.Windows.Forms.Button btnSearchForIdentityPrev;
private System.Windows.Forms.TextBox txtSearchForIdentity;
private System.Windows.Forms.Button btnSearchForIdentity;
private System.Windows.Forms.ToolTip ttSearchForFolder;

}
}

+ 0
- 271
NTFSSecurity/ShowSimpleAccess.cs 파일 보기

@@ -1,271 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Alphaleonis.Win32.Filesystem;
using Security2;

namespace NTFSSecurity
{
public partial class ShowSimpleAccessForm : Form
{
private IEnumerable<DirectoryInfo> directoryList;
private IQueryable<SimpleFileSystemAccessRule> aceList;
private IEnumerable<DirectoryTreeNode> searchResultByFolder;
private int searchResultByFolderIndex;

public IEnumerable<DirectoryInfo> DirectoryList
{
get { return directoryList; }
}

public IEnumerable<SimpleFileSystemAccessRule> AceList
{
get { return aceList; }
}

public ShowSimpleAccessForm()
{
InitializeComponent();
}

public void BuildDirectoryTreeNodes()
{
string previousPath = string.Empty;
DirectoryTreeNode previousNode;
DirectoryTreeNode rootNode;

var rootDirectory = directoryList.First();

rootNode = new DirectoryTreeNode(rootDirectory.FullName, rootDirectory.Name, aceList.Where(ace => ace.FullName == rootDirectory.Name));
previousNode = rootNode;
trvDirectories.Nodes.Add(rootNode);

foreach (var directory in directoryList.Skip(1))
{
if (previousNode.Name == directory.GetParent().FullName)
{
var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName));
previousNode.Nodes.Add(node);
}
else
{
previousNode = (DirectoryTreeNode)trvDirectories.Nodes.Find(directory.GetParent().FullName, true).FirstOrDefault();
if (previousNode != null)
{
var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName));
previousNode.Nodes.Add(node);
}
else
{
var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName));
previousNode.Nodes.Add(node);
}
}
}
}

public void BuildDirectoryTreeNodes(IEnumerable<DirectoryInfo> directoryList, IQueryable<SimpleFileSystemAccessRule> aceList)
{
this.directoryList = directoryList;
this.aceList = aceList;

this.BuildDirectoryTreeNodes();
}

private void trvDirectories_AfterSelect(object sender, TreeViewEventArgs e)
{
lstPermissions.Items.Clear();

foreach (var ace in aceList.Where(ace => ace.FullName == e.Node.Name))
{
ListViewItem listItem = new ListViewItem();
listItem.Name = e.Node.Name;
listItem.Text = ace.Identity.AccountName;
listItem.SubItems.AddRange(new string[] { ace.AccessRights.ToString(), ace.AccessControlType.ToString(), e.Node.FullPath });
listItem.ImageIndex = 1;

lstPermissions.Items.Add(listItem);
}

if (lstPermissions.Items.Count > 0)
{
foreach (ColumnHeader column in lstPermissions.Columns)
{
column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
}
}
}

private void chkRemoveFoldersWithoutAccess_CheckedChanged(object sender, EventArgs e)
{
if (chkRemoveFoldersWithoutAccess.Checked)
{
RemoveFoldersWithoutAccess((DirectoryTreeNode)trvDirectories.Nodes[0]);
}
else
{
trvDirectories.Nodes.Clear();
BuildDirectoryTreeNodes();
}
}

public void RemoveFoldersWithoutAccess(DirectoryTreeNode node)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
if (node.Nodes[i].GetNodeCount(false) > 0)
RemoveFoldersWithoutAccess((DirectoryTreeNode)node.Nodes[i]);

if (node.Nodes[i].Nodes.Count == 0 & ((DirectoryTreeNode)node.Nodes[i]).Acl.Count() == 0)
{
node.Nodes.Remove(node.Nodes[i]);
i--;
}
}
}

private void btnSearchForFolder_Click(object sender, EventArgs e)
{
searchResultByFolder = null;
searchResultByFolderIndex = 0;
trvDirectories.HideSelection = false;

searchResultByFolder = FindNodeByFolder((DirectoryTreeNode)trvDirectories.Nodes[0], txtSearchForFolder.Text);
if (searchResultByFolder.Count() > 0)
{
btnSearchForFolderNext.Enabled = true;
btnSearchForFolderPrev.Enabled = true;

trvDirectories.SelectedNode = searchResultByFolder.First();
searchResultByFolderIndex = 0;
}
else
{
btnSearchForFolderNext.Enabled = false;
btnSearchForFolderPrev.Enabled = false;
}
}

private IEnumerable<DirectoryTreeNode> FindNodeByFolder(DirectoryTreeNode node, string search)
{
if (node.Text.ToLower().Contains(search.ToLower()))
{
yield return node;
}

foreach (DirectoryTreeNode childNode in node.Nodes)
{
foreach (DirectoryTreeNode match in this.FindNodeByFolder(childNode, search))
{
yield return match;
}
}
}

private IEnumerable<DirectoryTreeNode> FindNodeByIdentity(DirectoryTreeNode node, string search)
{
if (node.Acl.Where(ace => ace.Identity.AccountName.ToLower().Contains(search.ToLower())).Count() > 0)
{
yield return node;
}

foreach (DirectoryTreeNode childNode in node.Nodes)
{
foreach (DirectoryTreeNode match in this.FindNodeByIdentity(childNode, search))
{
yield return match;
}
}
}

private void btnSearchForFolderNext_Click(object sender, EventArgs e)
{
if (searchResultByFolder.Count() > searchResultByFolderIndex + 1)
{
searchResultByFolderIndex++;
trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex);
}
}

private void btnSearchForFolderPrev_Click(object sender, EventArgs e)
{
if (searchResultByFolderIndex - 1 > -1)
{
searchResultByFolderIndex--;
trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex);
}
}

private void btnSearchForIdentity_Click(object sender, EventArgs e)
{
trvDirectories.HideSelection = false;
searchResultByFolder = null;
searchResultByFolderIndex = 0;

searchResultByFolder = FindNodeByIdentity((DirectoryTreeNode)trvDirectories.Nodes[0], txtSearchForIdentity.Text);
if (searchResultByFolder.Count() > 0)
{
btnSearchForIdentityNext.Enabled = true;
btnSearchForIdentityPrev.Enabled = true;

trvDirectories.SelectedNode = searchResultByFolder.First();
searchResultByFolderIndex = 0;
}
else
{
btnSearchForIdentityNext.Enabled = false;
btnSearchForIdentityPrev.Enabled = false;
}
}

private void btnSearchForIdentityPrev_Click(object sender, EventArgs e)
{
if (searchResultByFolder.Count() > searchResultByFolderIndex + 1)
{
searchResultByFolderIndex++;
trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex);
}
}

private void btnSearchForIdentityNext_Click(object sender, EventArgs e)
{
if (searchResultByFolderIndex - 1 > -1)
{
searchResultByFolderIndex--;
trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex);
}
}
}

public class DirectoryTreeNode : TreeNode
{
private IList<SimpleFileSystemAccessRule> acl;

public IList<SimpleFileSystemAccessRule> Acl
{
get { return acl; }
}

public DirectoryTreeNode(string key, string text)
: base(text)
{
this.Name = key;
}

public DirectoryTreeNode(string key, string text, IQueryable<SimpleFileSystemAccessRule> acl)
: this(key, text)
{
this.acl = acl.ToList();

if (acl.Count() == 0)
{
this.ForeColor = Color.Gray;
}
}
}
}

+ 0
- 168
NTFSSecurity/ShowSimpleAccess.resx 파일 보기

@@ -1,168 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.

mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imlIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="imlIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAs
CAAAAk1TRnQBSQFMAwEBAAGIAQABiAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8BABD/MAAQ/zAAAf8B9AGS
BPcDkgL3AZIB9wHyAf8wAAH/Ae8LFAEPAQcB/zAAAf8B7AGZAnkBHAF5ARwBWAEcAXkBHAFzAUMBBwH/
MAAB/wHtAfQEeQFeAZkBXgJ5ARwBQwEHAf8wAAH/Ae0BwwN5AV4BmQFeAZkBXgF5AVgBQwEHAf8wAAH/
Ae0B9AJ5AV0BmQFeAbwBXgGZAV4B9wFDAQcB/zAAAf8B7QHDAXoCeQFeAZkBXgGZAV4BeQFYAUMBBwH/
MAAB/wHtAfQEeQFeAZkBXgJ5ARwBQwEHAf8wAAH/Ae0BwwOgAeUBGgHlARoB5QEaAXkBQwEHAf8wAAH/
Ae0BGwGgAcMBGgGgARsEBwH3AewB8QH/MAAB/wG8ARwEeQH3AvABvALwAfMC/zAAAv8BvAHtAnMB7QHw
CP8wAAP/BPQJ/zAAEP8wAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/gQAL
</value>
</data>
<metadata name="ttSearchForFolder.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>114, 17</value>
</metadata>
</root>

+ 0
- 234
NTFSSecurity/ShowSimpleEffectiveAccess.Designer.cs 파일 보기

@@ -1,234 +0,0 @@
namespace NTFSSecurity
{
partial class ShowSimpleEffectiveAccessForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShowSimpleEffectiveAccessForm));
this.trvDirectories = new System.Windows.Forms.TreeView();
this.imlIcons = new System.Windows.Forms.ImageList(this.components);
this.lstPermissions = new System.Windows.Forms.ListView();
this.chdIdentity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chdRights = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chdAccessControlType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chkRemoveFoldersWithoutAccess = new System.Windows.Forms.CheckBox();
this.grpFilter = new System.Windows.Forms.GroupBox();
this.grpSearchForFolder = new System.Windows.Forms.GroupBox();
this.btnSearchForFolderPrev = new System.Windows.Forms.Button();
this.btnSearchForFolderNext = new System.Windows.Forms.Button();
this.btnSearchForFolder = new System.Windows.Forms.Button();
this.txtSearchForFolder = new System.Windows.Forms.TextBox();
this.labDirectoryTreeView = new System.Windows.Forms.Label();
this.labAccessView = new System.Windows.Forms.Label();
this.grpFilter.SuspendLayout();
this.grpSearchForFolder.SuspendLayout();
this.SuspendLayout();
//
// trvDirectories
//
this.trvDirectories.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.trvDirectories.ImageIndex = 0;
this.trvDirectories.ImageList = this.imlIcons;
this.trvDirectories.Location = new System.Drawing.Point(12, 29);
this.trvDirectories.Name = "trvDirectories";
this.trvDirectories.SelectedImageIndex = 0;
this.trvDirectories.Size = new System.Drawing.Size(320, 353);
this.trvDirectories.TabIndex = 0;
this.trvDirectories.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.trvDirectories_AfterSelect);
//
// imlIcons
//
this.imlIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imlIcons.ImageStream")));
this.imlIcons.TransparentColor = System.Drawing.Color.Transparent;
this.imlIcons.Images.SetKeyName(0, "container.jpg");
//
// lstPermissions
//
this.lstPermissions.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lstPermissions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chdIdentity,
this.chdRights,
this.chdAccessControlType});
this.lstPermissions.Location = new System.Drawing.Point(338, 29);
this.lstPermissions.Name = "lstPermissions";
this.lstPermissions.Size = new System.Drawing.Size(480, 226);
this.lstPermissions.SmallImageList = this.imlIcons;
this.lstPermissions.TabIndex = 1;
this.lstPermissions.UseCompatibleStateImageBehavior = false;
this.lstPermissions.View = System.Windows.Forms.View.Details;
//
// chdIdentity
//
this.chdIdentity.Text = "Identity";
//
// chdRights
//
this.chdRights.Text = "Rights";
//
// chdAccessControlType
//
this.chdAccessControlType.Text = "AccessControlType";
//
// chkRemoveFoldersWithoutAccess
//
this.chkRemoveFoldersWithoutAccess.AutoSize = true;
this.chkRemoveFoldersWithoutAccess.Location = new System.Drawing.Point(6, 19);
this.chkRemoveFoldersWithoutAccess.Name = "chkRemoveFoldersWithoutAccess";
this.chkRemoveFoldersWithoutAccess.Size = new System.Drawing.Size(347, 17);
this.chkRemoveFoldersWithoutAccess.TabIndex = 2;
this.chkRemoveFoldersWithoutAccess.Text = "Remove Folders that do not have different access than their parents";
this.chkRemoveFoldersWithoutAccess.UseVisualStyleBackColor = true;
this.chkRemoveFoldersWithoutAccess.CheckedChanged += new System.EventHandler(this.chkRemoveFoldersWithoutAccess_CheckedChanged);
//
// grpFilter
//
this.grpFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.grpFilter.Controls.Add(this.grpSearchForFolder);
this.grpFilter.Controls.Add(this.chkRemoveFoldersWithoutAccess);
this.grpFilter.Location = new System.Drawing.Point(338, 258);
this.grpFilter.Name = "grpFilter";
this.grpFilter.Size = new System.Drawing.Size(480, 124);
this.grpFilter.TabIndex = 3;
this.grpFilter.TabStop = false;
this.grpFilter.Text = "Filter";
//
// grpSearchForFolder
//
this.grpSearchForFolder.Controls.Add(this.btnSearchForFolderPrev);
this.grpSearchForFolder.Controls.Add(this.btnSearchForFolderNext);
this.grpSearchForFolder.Controls.Add(this.btnSearchForFolder);
this.grpSearchForFolder.Controls.Add(this.txtSearchForFolder);
this.grpSearchForFolder.Location = new System.Drawing.Point(6, 42);
this.grpSearchForFolder.Name = "grpSearchForFolder";
this.grpSearchForFolder.Size = new System.Drawing.Size(421, 77);
this.grpSearchForFolder.TabIndex = 3;
this.grpSearchForFolder.TabStop = false;
this.grpSearchForFolder.Text = "Search for Folder";
//
// btnSearchForFolderPrev
//
this.btnSearchForFolderPrev.Enabled = false;
this.btnSearchForFolderPrev.Location = new System.Drawing.Point(240, 45);
this.btnSearchForFolderPrev.Name = "btnSearchForFolderPrev";
this.btnSearchForFolderPrev.Size = new System.Drawing.Size(75, 23);
this.btnSearchForFolderPrev.TabIndex = 3;
this.btnSearchForFolderPrev.Text = "Prev";
this.btnSearchForFolderPrev.UseVisualStyleBackColor = true;
this.btnSearchForFolderPrev.Click += new System.EventHandler(this.btnSearchForFolderPrev_Click);
//
// btnSearchForFolderNext
//
this.btnSearchForFolderNext.Enabled = false;
this.btnSearchForFolderNext.Location = new System.Drawing.Point(321, 45);
this.btnSearchForFolderNext.Name = "btnSearchForFolderNext";
this.btnSearchForFolderNext.Size = new System.Drawing.Size(75, 23);
this.btnSearchForFolderNext.TabIndex = 2;
this.btnSearchForFolderNext.Text = "Next";
this.btnSearchForFolderNext.UseVisualStyleBackColor = true;
this.btnSearchForFolderNext.Click += new System.EventHandler(this.btnSearchForFolderNext_Click);
//
// btnSearchForFolder
//
this.btnSearchForFolder.Location = new System.Drawing.Point(353, 17);
this.btnSearchForFolder.Name = "btnSearchForFolder";
this.btnSearchForFolder.Size = new System.Drawing.Size(43, 23);
this.btnSearchForFolder.TabIndex = 1;
this.btnSearchForFolder.Text = "Go";
this.btnSearchForFolder.UseVisualStyleBackColor = true;
this.btnSearchForFolder.Click += new System.EventHandler(this.btnSearchForFolder_Click);
//
// txtSearchForFolder
//
this.txtSearchForFolder.Location = new System.Drawing.Point(6, 19);
this.txtSearchForFolder.Name = "txtSearchForFolder";
this.txtSearchForFolder.Size = new System.Drawing.Size(341, 20);
this.txtSearchForFolder.TabIndex = 0;
//
// labDirectoryTreeView
//
this.labDirectoryTreeView.AutoSize = true;
this.labDirectoryTreeView.Location = new System.Drawing.Point(13, 13);
this.labDirectoryTreeView.Name = "labDirectoryTreeView";
this.labDirectoryTreeView.Size = new System.Drawing.Size(57, 13);
this.labDirectoryTreeView.TabIndex = 4;
this.labDirectoryTreeView.Text = "Directories";
//
// labAccessView
//
this.labAccessView.AutoSize = true;
this.labAccessView.Location = new System.Drawing.Point(344, 12);
this.labAccessView.Name = "labAccessView";
this.labAccessView.Size = new System.Drawing.Size(202, 13);
this.labAccessView.TabIndex = 5;
this.labAccessView.Text = "Permissions given on the seletcted object";
//
// ShowSimpleEffectiveAccessForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(830, 389);
this.Controls.Add(this.labAccessView);
this.Controls.Add(this.labDirectoryTreeView);
this.Controls.Add(this.grpFilter);
this.Controls.Add(this.lstPermissions);
this.Controls.Add(this.trvDirectories);
this.Name = "ShowSimpleEffectiveAccessForm";
this.Text = "ShowAccess";
this.grpFilter.ResumeLayout(false);
this.grpFilter.PerformLayout();
this.grpSearchForFolder.ResumeLayout(false);
this.grpSearchForFolder.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();

}

#endregion

private System.Windows.Forms.TreeView trvDirectories;
private System.Windows.Forms.ListView lstPermissions;
private System.Windows.Forms.ColumnHeader chdIdentity;
private System.Windows.Forms.ColumnHeader chdRights;
private System.Windows.Forms.ColumnHeader chdAccessControlType;
private System.Windows.Forms.ImageList imlIcons;
private System.Windows.Forms.CheckBox chkRemoveFoldersWithoutAccess;
private System.Windows.Forms.GroupBox grpFilter;
private System.Windows.Forms.Label labDirectoryTreeView;
private System.Windows.Forms.Label labAccessView;
private System.Windows.Forms.GroupBox grpSearchForFolder;
private System.Windows.Forms.Button btnSearchForFolder;
private System.Windows.Forms.TextBox txtSearchForFolder;
private System.Windows.Forms.Button btnSearchForFolderNext;
private System.Windows.Forms.Button btnSearchForFolderPrev;

}
}

+ 0
- 222
NTFSSecurity/ShowSimpleEffectiveAccess.cs 파일 보기

@@ -1,222 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Security2;

namespace NTFSSecurity
{
public partial class ShowSimpleEffectiveAccessForm : Form
{
private IEnumerable<DirectoryInfo> directoryList;
private IQueryable<SimpleFileSystemAccessRule> aceList;
private IEnumerable<DirectoryTreeNode> searchResultByFolder;
private int searchResultByFolderIndex;

public IEnumerable<DirectoryInfo> DirectoryList
{
get { return directoryList; }
}

public IEnumerable<SimpleFileSystemAccessRule> AceList
{
get { return aceList; }
}

public ShowSimpleEffectiveAccessForm()
{
InitializeComponent();
}

public void BuildDirectoryTreeNodes()
{
string previousPath = string.Empty;
DirectoryTreeNode previousNode;
DirectoryTreeNode rootNode;

var rootDirectory = directoryList.First();

rootNode = new DirectoryTreeNode(rootDirectory.FullName, rootDirectory.Name, aceList.Where(ace => ace.FullName == rootDirectory.Name));
previousNode = rootNode;
trvDirectories.Nodes.Add(rootNode);

foreach (var directory in directoryList.Skip(1))
{
if (previousNode.Name == directory.GetParent().FullName)
{
var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName));
previousNode.Nodes.Add(node);
}
else
{
previousNode = (DirectoryTreeNode)trvDirectories.Nodes.Find(directory.GetParent().FullName, true).FirstOrDefault();
if (previousNode != null)
{
var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName));
previousNode.Nodes.Add(node);
}
else
{
var node = new DirectoryTreeNode(directory.FullName, directory.Name, aceList.Where(ace => ace.FullName == directory.FullName));
previousNode.Nodes.Add(node);
}
}
}
}

public void BuildDirectoryTreeNodes(IEnumerable<DirectoryInfo> directoryList, IQueryable<SimpleFileSystemAccessRule> aceList)
{
this.directoryList = directoryList;
this.aceList = aceList;

this.BuildDirectoryTreeNodes();
}

private void trvDirectories_AfterSelect(object sender, TreeViewEventArgs e)
{
lstPermissions.Items.Clear();

foreach (var ace in aceList.Where(ace => ace.FullName == e.Node.Name))
{
ListViewItem listItem = new ListViewItem();
listItem.Name = e.Node.Name;
listItem.Text = ace.Identity.AccountName;
listItem.SubItems.AddRange(new string[] { ace.AccessRights.ToString(), ace.AccessControlType.ToString(), e.Node.FullPath });
listItem.ImageIndex = 1;

lstPermissions.Items.Add(listItem);
}

if (lstPermissions.Items.Count > 0)
{
foreach (ColumnHeader column in lstPermissions.Columns)
{
column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
}
}
}

private void chkRemoveFoldersWithoutAccess_CheckedChanged(object sender, EventArgs e)
{
if (chkRemoveFoldersWithoutAccess.Checked)
{
RemoveFoldersWithoutAccess((DirectoryTreeNode)trvDirectories.Nodes[0]);
}
else
{
trvDirectories.Nodes.Clear();
BuildDirectoryTreeNodes();
}
}

public void RemoveFoldersWithoutAccess(DirectoryTreeNode node)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
if (node.Nodes[i].GetNodeCount(false) > 0)
RemoveFoldersWithoutAccess((DirectoryTreeNode)node.Nodes[i]);

if (node.Nodes[i].Nodes.Count == 0 & ((DirectoryTreeNode)node.Nodes[i]).Acl.Count() == 0)
{
node.Nodes.Remove(node.Nodes[i]);
i--;
}
}
}

private void btnSearchForFolder_Click(object sender, EventArgs e)
{
searchResultByFolder = null;
searchResultByFolderIndex = 0;
trvDirectories.HideSelection = false;

searchResultByFolder = FindNodeByFolder((DirectoryTreeNode)trvDirectories.Nodes[0], txtSearchForFolder.Text);
if (searchResultByFolder.Count() > 0)
{
btnSearchForFolderNext.Enabled = true;
btnSearchForFolderPrev.Enabled = true;

trvDirectories.SelectedNode = searchResultByFolder.First();
searchResultByFolderIndex = 0;
}
else
{
btnSearchForFolderNext.Enabled = false;
btnSearchForFolderPrev.Enabled = false;
}
}

private IEnumerable<DirectoryTreeNode> FindNodeByFolder(DirectoryTreeNode node, string search)
{
if (node.Text.ToLower().Contains(search.ToLower()))
{
yield return node;
}

foreach (DirectoryTreeNode childNode in node.Nodes)
{
foreach (DirectoryTreeNode match in this.FindNodeByFolder(childNode, search))
{
yield return match;
}
}
}

private IEnumerable<DirectoryTreeNode> FindNodeByIdentity(DirectoryTreeNode node, string search)
{
if (node.Acl.Where(ace => ace.Identity.AccountName.ToLower().Contains(search.ToLower())).Count() > 0)
{
yield return node;
}

foreach (DirectoryTreeNode childNode in node.Nodes)
{
foreach (DirectoryTreeNode match in this.FindNodeByIdentity(childNode, search))
{
yield return match;
}
}
}

private void btnSearchForFolderNext_Click(object sender, EventArgs e)
{
if (searchResultByFolder.Count() > searchResultByFolderIndex + 1)
{
searchResultByFolderIndex++;
trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex);
}
}

private void btnSearchForFolderPrev_Click(object sender, EventArgs e)
{
if (searchResultByFolderIndex - 1 > -1)
{
searchResultByFolderIndex--;
trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex);
}
}

private void btnSearchForIdentityPrev_Click(object sender, EventArgs e)
{
if (searchResultByFolder.Count() > searchResultByFolderIndex + 1)
{
searchResultByFolderIndex++;
trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex);
}
}

private void btnSearchForIdentityNext_Click(object sender, EventArgs e)
{
if (searchResultByFolderIndex - 1 > -1)
{
searchResultByFolderIndex--;
trvDirectories.SelectedNode = searchResultByFolder.ElementAt(searchResultByFolderIndex);
}
}
}
}

+ 0
- 165
NTFSSecurity/ShowSimpleEffectiveAccess.resx 파일 보기

@@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.

mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imlIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="imlIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAs
CAAAAk1TRnQBSQFMAwEBAAGQAQABkAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8BABD/MAAQ/zAAAf8B9AGS
BPcDkgL3AZIB9wHyAf8wAAH/Ae8LFAEPAQcB/zAAAf8B7AGZAnkBHAF5ARwBWAEcAXkBHAFzAUMBBwH/
MAAB/wHtAfQEeQFeAZkBXgJ5ARwBQwEHAf8wAAH/Ae0BwwN5AV4BmQFeAZkBXgF5AVgBQwEHAf8wAAH/
Ae0B9AJ5AV0BmQFeAbwBXgGZAV4B9wFDAQcB/zAAAf8B7QHDAXoCeQFeAZkBXgGZAV4BeQFYAUMBBwH/
MAAB/wHtAfQEeQFeAZkBXgJ5ARwBQwEHAf8wAAH/Ae0BwwOgAeUBGgHlARoB5QEaAXkBQwEHAf8wAAH/
Ae0BGwGgAcMBGgGgARsEBwH3AewB8QH/MAAB/wG8ARwEeQH3AvABvALwAfMC/zAAAv8BvAHtAnMB7QHw
CP8wAAP/BPQJ/zAAEP8wAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/gQAL
</value>
</data>
</root>

+ 1
- 74
NTFSSecurity/SimpleAccessCmdlets/SimpleAccessCmdlets.cs 파일 보기

@@ -221,78 +221,5 @@ namespace NTFSSecurity
//}
//#endregion

#region Show-SimpleAccess
[Cmdlet(VerbsCommon.Show, "SimpleAccess")]
public class ShowSimpleAccess : GetSimpleAccess
{
Stopwatch stopwatch;

protected override void BeginProcessing()
{
stopwatch = new Stopwatch();
stopwatch.Start();

WriteDebug("Running Get-SimpleAccess");
}

protected override void ProcessRecord()
{
base.ProcessRecord();
}

protected override void EndProcessing()
{
stopwatch.Stop();
WriteDebug(string.Format("Runtime of Get-SimpleAccess: {0}.", stopwatch.Elapsed.ToString()));

stopwatch.Reset(); stopwatch.Start();
WriteDebug("Creating TreeView");

ShowSimpleAccessForm form = new ShowSimpleAccessForm();
form.BuildDirectoryTreeNodes(directoryList, aceList.AsQueryable());
stopwatch.Stop();

WriteDebug(string.Format("Creating the Treeview took: {0}.", stopwatch.Elapsed.ToString()));

form.ShowDialog();
}
}
#endregion

//#region Show-SimpleEffectiveAccess
//[Cmdlet(VerbsCommon.Show, "SimpleEffectiveAccess")]
//public class ShowSimpleEffectiveAccess : GetSimpleEffectiveAccess
//{
// Stopwatch stopwatch;

// protected override void BeginProcessing()
// {
// stopwatch = new Stopwatch();
// stopwatch.Start();

// this.WriteDebug("Running Get-SimpleAccess");
// }
// protected override void ProcessRecord()
// {
// base.ProcessRecord();
// }

// protected override void EndProcessing()
// {
// stopwatch.Stop();
// this.WriteDebug(string.Format("Runtime of Get-SimpleAccess: {0}.", stopwatch.Elapsed.ToString()));

// stopwatch.Reset(); stopwatch.Start();
// this.WriteDebug("Creating TreeView");

// ShowSimpleEffectiveAccessForm form = new ShowSimpleEffectiveAccessForm();
// form.BuildDirectoryTreeNodes(directoryList, aceList.AsQueryable());
// stopwatch.Stop();

// this.WriteDebug(string.Format("Creating the Treeview took: {0}.", stopwatch.Elapsed.ToString()));

// form.ShowDialog();
// }
//}
//#endregion
}

불러오는 중...
취소
저장