我需要编写一个程序来显示密码窗口,当用户尝试访问c ++中的文件或文件夹以获取win XP&赢7(32位和64位)。 但困难的部分是我不能使用IAT \ EAT或内联挂钩来执行此任务,因为需要为此项目使用一些Microsoft支持的方法。
在谷歌搜索时,许多论坛也提到这可以使用文件系统过滤器驱动程序完成,但我想知道如何从迷你驱动程序显示密码对话框。
我认为shell扩展可以完成这项工作,但msdn文档显示shell扩展不能用于拦截I / O调用。
请提前建议,谢谢。
答案 0 :(得分:4)
你需要内核驱动程序来实现这一点。 Shell钩子和扩展仅在通过shell访问文件时激活(例如,在Windows资源管理器中单击),如果文件被其他程序直接访问,则不会触发。
在处理访问中的反病毒时,我遇到了类似的挑战。
但是像@selbie说的那样,驱动程序代码本身无法处理任何交互式提示 - 它必须与用户模式代码进行通信才能实现。这可以是独立的应用程序,或者您的DLL自动加载到每个进程中。在我的情况下,如果需要用户响应,我们让驱动程序和用户模式应用程序通过管道进行通信 - 驱动程序会将消息传递给用户模式应用程序(如果它处于活动状态),然后等待响应。该应用程序向驱动程序发出了提示和管道响应。
还讨论了文件I / O挂钩的主题in earlier thread here。