检查文件是由进程创建还是由用户使用 C++ 创建

Posted

技术标签:

【中文标题】检查文件是由进程创建还是由用户使用 C++ 创建【英文标题】:Check if the file is created by a process or by user using C++ 【发布时间】:2013-01-03 18:01:10 【问题描述】:

我正在查看我的系统根驱动器 (C:\) 中的所有文件和文件夹更改通知。我正在使用 ReadDirectoryChangesW() WIN API 使用 VC++ 来实现这一点,现在,我能够监控文件的所有类型的更改通知,即重命名、删除、创建...

但是,我的问题是我只想监视文件和文件夹的更改,这些更改是由用户手动完成的,而不是进程或程序。

因为,如果我使用 ReadDirectoryChangesW() WIN API 查看根文件夹,我会在短短几分钟内收到数千条更改通知,因为大多数临时文件和数据文件是由操作系统或第三方安装的应用程序创建的...

如何仅监控用户手动完成的文件更改(即仅由用户在鼠标或键盘的帮助下发起的更改)。

【问题讨论】:

为什么要监控根目录?它不能监视一些特定于应用程序的目录吗? 但用户必须使用程序来创建文件。这不像人们会用小磁铁往他们的磁盘上走…… 检查它是否已经以编程方式启动,检查进程树。可以通过CreateToolhelp32Snapshot查询。 User Friendly — 用磁铁手动编辑 inode! 别忘了butterflies。 【参考方案1】:

没有办法区分用户启动的活动和应用程序启动的活动。如果您考虑一下,用户启动的活动是通过程序完成的,无论是 Windows 资源管理器本身、DOS 提示符、记事本等等。从操作系统的角度来看,一切最终都通过同一个文件系统 API,也就是监控发生的地方。

【讨论】:

我认为用户发起的活动可以通过 Windows 资源管理器或 DOS 提示符来实现,因此在这种情况下,我们可以使用他们的 Process 过滤所有通知更改,它启动了该更改..这样我们可以过滤发出第三方软件更改通知,他们在自己的数据文件夹中执行该通知以供自己使用...如果我错了,请纠正我!谢谢 @WindowsProgrammer,但是其他创建文件的应用程序呢,例如从浏览器下载文件或使用电子表格应用程序保存文件?【参考方案2】:

线索最终在文件的位置。用户文档正确地属于我的文档;属于应用程序的文件属于 CommonAppData,单个用户的临时文件属于他的 AppData。

当然,如果用户“手动”使用记事本打开 AppData 中的日志文件,则无法发现这一点。

【讨论】:

以上是关于检查文件是由进程创建还是由用户使用 C++ 创建的主要内容,如果未能解决你的问题,请参考以下文章

进程间通信的问题(C++高手进)

在 .NET 进程中观看由本机进程创建的全局事件

如何在 Python 进程中访问由 C++ 进程创建的互斥锁?

C++学习(四二八)Zygote

main函数由哪个进程创建?

Unix 域套接字 (C++) - 客户端崩溃服务器守护进程