拦截windows打开文件

时间:2009-07-10 13:36:53

标签: c++ windows winapi events file-io

我正在尝试创建一个可以拦截文件打开过程的小程序。

目的是当用户双击给定文件夹中的文件时,窗口会通知软件,然后它处理该请求并返回窗口文件的数据。

也许会有另一种解决方案,例如监控打开消息并强制Windows在程序准备文件内容时等待。

这个概念的一个应用可能是以透明的方式管理文件的解密。 在这种情况下,加密文件将在磁盘上,当用户打开它时(双击它或某些应用程序,如记事本),后台进程将拦截该打开事件,解密文件并提供内容该文件到询问申请表。

这是一个有点奇怪的概念,它可能像“中间人”网络概念,但用文件而不是网络数据包。

感谢阅读。

4 个答案:

答案 0 :(得分:12)

您可以使用Process Explorer使用的技巧将自己替换为任务管理器。基本上创建一个这样的键:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe

'taskmgr.exe'替换为要拦截的进程名称。然后添加一个名为'Debugger'的字符串值,该值包含可执行文件的路径。 E.g:

Debugger -> "C:\windows\system32\notepad.exe"

运行的每个进程都与映像名称匹配,您的进程实际上将被调用为该进程的调试器,并将实际进程的路径作为参数。

答案 1 :(得分:11)

最好的方法是通过file system filter driver覆盖任何计划的所有开放案例。这可能过于复杂,无法满足您的需求。

答案 2 :(得分:6)

您可以使用代码注入和API重定向。您将启动目标进程,然后注入一个DLL,它挂钩您要拦截的Windows API函数。然后在目标进程认为它正在调用OpenFile()或其他任何东西时调用,然后在将调用传递给真实API之前就可以执行您喜欢的操作。

谷歌“IAT挂钩”。

答案 3 :(得分:0)

Windows可以选择加密磁盘上的文件(file-> properties-> advanced-> encrypt),此选项对应用程序完全透明。

也许加密磁盘的解密文件部分你应该考虑像criptainer这样的软件?

还有这个软件http://www.truecrypt.org/downloads(免费和开源),但我还没试过。

开发自定义解决方案听起来非常困难。