我正在尝试创建一个可以拦截文件打开过程的小程序。
目的是当用户双击给定文件夹中的文件时,窗口会通知软件,然后它处理该请求并返回窗口文件的数据。
也许会有另一种解决方案,例如监控打开消息并强制Windows在程序准备文件内容时等待。
这个概念的一个应用可能是以透明的方式管理文件的解密。 在这种情况下,加密文件将在磁盘上,当用户打开它时(双击它或某些应用程序,如记事本),后台进程将拦截该打开事件,解密文件并提供内容该文件到询问申请表。
这是一个有点奇怪的概念,它可能像“中间人”网络概念,但用文件而不是网络数据包。
感谢阅读。
答案 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(免费和开源),但我还没试过。
开发自定义解决方案听起来非常困难。