7

当用户尝试在 c++ 中访问 win XP 和 win 7 中的文件或文件夹时(对于 32 位和 64 位),我需要编写一个程序来显示密码窗口。但困难的部分是我不能使用 IAT \ EAT 或内联钩子来完成这个任务,因为它需要使用微软支持的方法来完成这个项目。

在谷歌搜索时,在许多论坛中也提到这可以使用文件系统过滤器驱动程序来完成,但我想知道如何从迷你驱动程序显示密码对话框。

我认为 shell 扩展可以完成这项工作,但 msdn 文档显示 shell 扩展不能用于拦截 I/O 调用。

请指教,先谢谢了。

4

1 回答 1

4

您确实需要内核驱动程序来实现这一点。只有当通过 shell 访问文件时(例如在 Windows 资源管理器中单击),shell 挂钩和扩展才会被激活,如果文件被其他程序直接访问,则不会触发。

在开发按访问的防病毒软件时,我遇到了类似的挑战。

但就像@selbie 所说,驱动程序代码本身无法处理任何交互式提示 - 它必须与用户模式代码通信才能实现这一点。这可以是独立的应用程序,也可以是您的 DLL 自动加载到每个进程中。就我而言,如果需要用户响应,我们让驱动程序和用户模式应用程序通过管道进行通信——驱动程序将消息通过管道传输到用户模式应用程序(如果它处于活动状态),然后等待响应。该应用程序向驾驶员发出了提示和管道响应。

文件 I/O 挂钩的主题也在前面的线程中讨论过。

于 2013-01-15T19:19:34.517 回答