Используйте рекурсию.
Правда быстрый код я писать не умею. Если у вас прав недостаточно, тогда ищите уязвимости windows.
Из кода ниже вам будет интересна переменная
List<string> filesanddirecoties;
List<string> filesanddirecoties;
DirectoryInfo[] files;
void WalkDirectoryTree(string RootDirectory)
{
richTextBox1.Clear();
DirectoryInfo root = new DirectoryInfo(RootDirectory);
if (root.Exists)
{
try
{
filesanddirecoties = new List<string>();
DirectoryInfo[] subDirs = root.GetDirectories();
AuthorizationRuleCollection ACLs = root.GetAccessControl().GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
string rules = "";
string[] Tree = root.FullName.Split('\\');
for (int i = 0; i < Tree.Length; i++)
{
filesanddirecoties.Add(Tree[i]);
string[] files = Directory.GetFiles(RootDirectory);
for (int j = 0; j < files.Length; j++)
{
if(files.Length!=0)
filesanddirecoties.Add(files[j]);
}
}
//получаем права на папку
/*foreach (FileSystemAccessRule ACL in ACLs)
{
if (!IsSystemRules(ACL.IdentityReference.ToString()))
{
for (int i = 0; i < Tree.Length - 2; i++)
rules += "\t";
rules += ACL.IdentityReference;
if (ACL.AccessControlType.ToString().Equals("Allow"))
{
rules += ", разрешено: " + ACL.FileSystemRights + Environment.NewLine;
}
else if (ACL.AccessControlType.ToString().Equals("Deny"))
{
rules += ", запрещено: " + ACL.FileSystemRights + Environment.NewLine;
}
}
}*/
for (int i = 0; i < Tree.Length - 2; i++)
richTextBox1.Text += "\t";
richTextBox1.Text += RootDirectory + Environment.NewLine + rules + Environment.NewLine;
if (Tree.Length < (Convert.ToInt32(textBox2.Text) + 1))
foreach (DirectoryInfo dirInfo in subDirs)
WalkDirectoryTree(dirInfo.FullName);
}
catch (UnauthorizedAccessException ee)
{
richTextBox1.Text += RootDirectory + Environment.NewLine;
}
}
else { richTextBox1.Text = "Папка не существует. Отмена операции."; }
}