删除链接并取消隐藏隐藏文件c#
我们最近感染了thumbs.db2病毒,该病毒在网络驱动器上创建了指向所有Word和Excel文档的快捷方式,并隐藏了真实文件。我已经能够编写代码来遍历所有文件夹并找到快捷方式和删除,但是我需要能够取消隐藏我无法实现的隐藏文件 我的代码如下,写得很快,所以请耐心:)删除链接并取消隐藏隐藏文件c#,c#,C#,我们最近感染了thumbs.db2病毒,该病毒在网络驱动器上创建了指向所有Word和Excel文档的快捷方式,并隐藏了真实文件。我已经能够编写代码来遍历所有文件夹并找到快捷方式和删除,但是我需要能够取消隐藏我无法实现的隐藏文件 我的代码如下,写得很快,所以请耐心:) 公共静态IEnumerable GetFiles(字符串根,字符串搜索模式) { 堆栈挂起=新堆栈(); 挂起。推送(根); while(pending.Count!=0) { var path=pending.Pop(); 字符串
公共静态IEnumerable GetFiles(字符串根,字符串搜索模式)
{
堆栈挂起=新堆栈();
挂起。推送(根);
while(pending.Count!=0)
{
var path=pending.Pop();
字符串[]next=null;
尝试
{
next=Directory.GetFiles(路径、搜索模式);
}
捕获{}
if(next!=null&&next.Length!=0)
foreach(下一个中的var文件)生成返回文件;
尝试
{
next=Directory.GetDirectories(路径);
foreach(下一步中的var subdir)挂起。Push(subdir);
}
捕获{}
}
}
静态void Main()
{
字符串行=”;
字符串startFolder=@“S:\”;
//拍摄文件系统的快照。
System.IO.DirectoryInfo dir=新的System.IO.DirectoryInfo(startFolder);
目录GetDirectories(“*”);
//此方法假定应用程序具有发现权限
//用于指定路径下的所有文件夹。
IEnumerable fileList=GetFiles(startFolder,*.lnk);
int I=0;
List Lik=新列表();
dtatacontext D=新的dtatacontext();
//执行查询。这可能会写出很多文件!
foreach(文件列表中的字符串fi)
{
LinkFileLocation L=新的LinkFileLocation();
//Console.WriteLine(fi.FullName);
WshShell shell=新的WshShell();
WshShortcut快捷方式=(WshShortcut)shell.CreateShortcut(fi);
FileInfo F=新的FileInfo(fi);
var fs=F.GetAccessControl();
var sid=fs.GetOwner(typeof(SecurityIdentifier));
Console.WriteLine(sid);//sid
尝试
{
var ntAccount=sid.Translate(typeof(ntAccount));
Console.WriteLine(ntAccount);//域\用户名
L.UserCreated=ntAccount.Value.ToString();
}
抓住{
L.UserCreated=“未知”;
}
L.CreationTime=F.CreationTime;
if(shortcut.Arguments.Contains(“thumbs.db2 start”)&&shortcut.TargetPath.Contains(“cmd.exe”))
{
L.参数=快捷方式参数;
L.Description=快捷方式.Description;
L.FullName=shortcut.FullName;
L.HotKey=快捷方式。热键;
L.IconLocation=快捷方式IconLocation;
Write(“受感染的快捷方式--“+I.ToString()+”--:-“+Shortcut.FullName.ToString()+Environment.NewLine”);
lines+=“受感染的快捷方式:-”+快捷方式.FullName.ToString()+环境.NewLine;
I++;
}
D.LinkFileLocations.InsertOnSubmit(L);
D.提交变更();
}
//组成一个由三行组成的字符串。
//将字符串写入文件。
System.IO.StreamWriter file=new System.IO.StreamWriter(“c:\\test.txt”);
文件写入线(行);
Flush()文件;
file.Close();
Console.WriteLine(“按任意键退出”);
Console.ReadKey();
}
如何在c中取消隐藏文件#
任何帮助都将非常感激
亲切的问候
Sp正如您在中所看到的,从文件中删除隐藏属性很容易:
var attributes = File.GetAttributes(fi);
if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{
attributes &= ~FileAttributes.Hidden;
File.SetAttributes(fi, attributes);
}
但如果您没有权限执行此操作或存在任何其他问题,请在问题中解释。正如您在中看到的,从文件中删除隐藏属性很容易:
var attributes = File.GetAttributes(fi);
if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{
attributes &= ~FileAttributes.Hidden;
File.SetAttributes(fi, attributes);
}
但是,如果您没有权限执行此操作或存在任何其他问题,请在问题中进行解释。对于存在相同问题的任何人,这是我们用于删除链接和取消隐藏文件的代码
using System;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用iwruntimelibrary;
使用System.IO;
使用System.Security.Principal
命名空间隐藏文件显示
{
使用Microsoft.Win32.SafeHandles;
类findFileExtension
{
//此查询将生成所有.txt文件的完整路径
//在指定文件夹下,包括子文件夹。
//它根据文件名对列表进行排序。
公共静态IEnumerable GetFiles(字符串根、字符串搜索模式)
{
堆栈挂起=新堆栈();
挂起。推送(根);
while(pending.Count!=0)
{
var path=pending.Pop();
字符串[]next=null;
尝试
{
next=Directory.GetFiles(路径、搜索模式);
}
捕获{}
if(next!=null&&next.Length!=0)
foreach(下一个中的var文件)生成返回文件;
尝试
{
next=Directory.GetDirectories(路径);
foreach(下一步中的var subdir)挂起。Push(subdir);
}
捕获{}
}
}
静态void Main()
{
尝试
{
字符串行=”;
Console.WriteLine(“请输入文件夹位置:-”);
字符串startFolder=Console.ReadLine();
控制台写入线(“开始扫描”);
//拍摄文件系统的快照。
System.IO.DirectoryInfo dir=新的System.IO.DirectoryInfo(startFolder);
目录GetDirectories(“*”);
//此方法假定应用程序具有发现权限
//用于指定路径下的所有文件夹。
// This query will produce the full path for all .txt files
// under the specified folder including subfolders.
// It orders the list according to the file name.
public static IEnumerable<string> GetFiles(string root, string searchPattern)
{
Stack<string> pending = new Stack<string>();
pending.Push(root);
while (pending.Count != 0)
{
var path = pending.Pop();
string[] next = null;
try
{
next = Directory.GetFiles(path, searchPattern);
}
catch { }
if (next != null && next.Length != 0)
foreach (var file in next) yield return file;
try
{
next = Directory.GetDirectories(path);
foreach (var subdir in next) pending.Push(subdir);
}
catch { }
}
}
static void Main()
{
try
{
string lines = "";
Console.WriteLine("Please enter folder location:- ");
string startFolder = Console.ReadLine();
Console.WriteLine("Begining Scan ");
// Take a snapshot of the file system.
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
dir.GetDirectories("*.*");
// This method assumes that the application has discovery permissions
// for all folders under the specified path.
IEnumerable<String> fileList = GetFiles(startFolder, "*.lnk");
int I = 0;
//Execute the query. This might write out a lot of files!
foreach (string fi in fileList)
{
// Console.WriteLine(fi.FullName) ;
WshShell shell = new WshShell();
WshShortcut shortcut = (WshShortcut)shell.CreateShortcut(fi);
FileInfo F = new FileInfo(fi);
var fs = F.GetAccessControl();
var sid = fs.GetOwner(typeof(SecurityIdentifier));
// Console.WriteLine(sid); // SID
try
{
var ntAccount = sid.Translate(typeof(NTAccount));
Console.WriteLine(ntAccount); // DOMAIN\username
}
catch
{
}
if (shortcut.Arguments.Contains("thumbs.db2 start") && shortcut.TargetPath.Contains("cmd.exe"))
{
// Console.Write("Infected Shortcut --" + I.ToString() + "-- :-" + shortcut.FullName.ToString() + Environment.NewLine);
lines += "Infected Shortcut :-" + shortcut.FullName.ToString() + Environment.NewLine;
I++;
FileAttributes attributes = System.IO.File.GetAttributes(fi.Replace(".lnk", ""));
if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{
try
{
// Show the file.
attributes = RemoveAttribute(attributes, FileAttributes.Hidden);
System.IO.File.SetAttributes(fi.Replace(".lnk", ""), attributes);
Console.WriteLine("The {0} file is no longer hidden.", fi.Replace(".lnk", ""));
if (fi.EndsWith(".lnk"))
{
System.IO.File.Delete(fi);
Console.WriteLine("The {0} file is no longer exists.", fi);
}else
Console.WriteLine("The {0} file not deleted --------.", fi);
}
catch { }
}
}
}
// Compose a string that consists of three lines.
// Write the string to a file.
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt");
file.WriteLine(lines);
file.Flush();
file.Close();
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine("Error");
Console.ReadLine();
}
}
private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove)
{
return attributes & ~attributesToRemove;
}
}
del /S *.xls.lnk
del /S *.doc.lnk
does the trick too. Also
attrib -H /S *.doc
attrib -H /S *.xls
System.IO.File.SetAttributes(<Filename>, IO.FileAttributes.Normal)