微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Windows中检测文件“COPY”操作

假设我希望在我的系统上启动文件副本时获得通知,并获取文件名,复制或移动的目的地以及复制时间。

这可能吗? 你将如何去呢? 你应该钩copyFile API函数

有没有什么软件已经完成了这个?

需要UAC保护资源的整个列表以标准用户身份运行我的应用程序(unlevated)

如何测量C#中的系统空闲时间,不包括看电影等?

创buildWindows用户编程,不用硬编码密码

什么是Windows平台的GPS中间驱动程序的等效物?

在进程被杀死后DLL仍然被locking

单声道WCF InstanceContextMode不工作

如何创build一个大的图标托盘?

Windows – 以编程方式检查托pipe的wlannetworking是否可能在系统的硬件上

正则expression式的困扰C#

在C#中更改语言

Windows具有I / O过滤器的概念,允许您截取所有I / O操作,并选择执行其他操作。 它们主要用于A / V类型的场景,但可以编程为各种任务。 SysInternals进程监视器例如使用I / O筛选器来查看文件级别访问。

您可以使用MS Filter Manager(来自命令提示符的fltmc.exe)查看当前的筛选器,

一个工具包可以帮助你编写过滤器,你可以得到驱动程序并开发你自己的。

http://www.microsoft.com/whdc/driver/filterdrv/default.mspx是深入了解信息的起点

由于在这个问题上有一个.NET标记,我只需要使用.NET Framework中的System.IO.FileSystemWatcher 。 我猜这是用安德鲁在他的回答中提到的I / O过滤器来实现的 ,但我真的不知道(也不在乎)。 这是否符合您的需求?

正如安德鲁所说过滤器驱动程序是要走的路。

没有万无一失的检测文件副本的方法,因为不同的程序以不同的方式复制文件(有些可能使用copyFile API,有些可能只是读取一个文件并将其内容写入另一个文件)。 您可以尝试计算任何打开的文件的筛选器驱动程序中的哈希值,然后在程序完成写入文件后执行相同操作。 如果哈希匹配,你知道你有一个文件副本。 但是这种技术可能会很慢。 如果你只是钩了copyFile API,你将会错过没有这个API的文件副本。 Java程序(仅举一例)不能访问copyFile API。

这可能是不可能的,因为没有保证执行复制/移动的中央方法。 你可以挂钩到一个核心的API(如copyFile),当然这意味着你仍然会错过任何应用程序的复制/移动,而不使用这个API。

也许你可以用IO过滤器来查看整个文件系统的打开文件,然后只要同时打开两个同名文件相同的文件就可以得出结论。 但是,也没有100%的解决方案。

如前所述,文件复制操作可以以各种方式实现,并且可能涉及多个磁盘和存储器传输,因此当这种操作发生时不可能简单地得到系统通知。 即使是用户,也有多种方式来复制内容和整个文件。 复制命令,“另存为”,“发送到”,移动,使用各种工具。 在引擎盖下,复制操作是连续的读/写,由某些参数关联。 这是保证成功审计的唯一途径。 挂钩copyFile不会给你Total Commander的复制操作,例如。 也不会给你“另存为”操作,实际上是文件创建 – >文件内容移动 – >关闭原始文件 – >打开新文件。 然后,在处理网络复制时,情况就不同了,在文件处理安全上下文不同于进程安全上下文的模拟复制操作中,等等。 我不认为有一个简单的方法来实现上述所有。

但是,有一个软件可以通知您大多数常见的复制操作(即通过Windows资源管理器,总指挥官,命令提示符和其他应用程序执行时)。 它也给你源和目标文件名,时间戳和其他相关的细节。 它可以在这里找到: http : //temasoft.com/products/filemonitor 。

注意:我为开发这个产品的公司工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐