Windows 7驱动程序挂钩

时间:2011-04-11 16:01:22

标签: windows windows-7 kernel driver

我的问题是关于Windows 7的驱动程序开发。

我需要拦截对驱动程序的系统调用。从理论上讲,在这种情况下,建议创建一个过滤器驱动程序,但在我的情况下,驱动程序不会公开过滤器兼容的接口。毫无疑问,它是Vista / 7显示微型端口驱动程序。

显示驱动程序作为标准WDM驱动程序加载。在它的DriverEntry中,它应该调用一个DxgkInitialize系统例程(我想通过win32k.sys导出)。我的目标是拦截这个电话。

任何人都可以建议我任何有用的资料我可以找到有关如何实现这一目标的信息吗?

胜利的关键可能是用我的函数地址替换驱动程序可执行文件导入部分中的DxgkInitialize。问题是这应该在 加载可执行文件后完成(必要时映射+重新定位+准备好所有导入表条目),但之前驱动程序的入口点是调用

我想到了以下几个选项:

  • 将可执行文件映射到系统内存中并手动“准备”(即执行加载程序的工作)。然后修补所需的功能并运行入口点。
  • 通过一些努力ZwSetSystemInformation可以用于模块加载(?)
  • 也许修补导出DxgkInitialize的模块的导出部分。这样加载器就会自动将每个加载的模块重定向到我的手中。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你没有提供商业理由,所以我会毫不犹豫地说些苛刻的话。但如果涉及挂钩电话,你应该重新考虑你的技术方法。

我采取的步骤可能包括:

  1. 谁导出DxgkInitialize?不要猜win32k,查一查。 (我不会给你答案)。也许你可以轻松地勾住被叫者而不是来电者。

  2. 我是否有任何关于何时加载驱动程序模块但在它被引入之前的回调?查找PsSetLoadImageNotifyRoutine。也许它会为你提供适当的时间段来修补驱动程序IAT(如果你不知道导入地址表是什么,重新考虑挂钩)。

  3. 我从评论中看到你主要对“监视展示活动”感兴趣。我不确定在您无法完全控制的计算机上是否允许这样做。但我们假设这个问题是合法的。

    根据您想要的分辨率,您不需要驱动程序。哎呀,你几乎不需要DLL。查找Window hooks以获取部分解决方案和辅助功能回调。