Windows 7驱动程序挂钩

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

我需要拦截系统调用驱动程序。 理论上在这种情况下,build议创build一个filter驱动程序,但在我的情况下,驱动程序不公开一个filter兼容的接口。 确切地说,这是一个Vista / 7显示微型端口驱动程序。

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

任何人都可以build议我任何有用的来源,我可以find有关如何实现这一目标的信

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

我想到了以下select:

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

提前致谢。

你不为此提供商业原因,所以我不愿意说一些苛刻的话。 但是如果涉及到挂断电话,你应该重新考虑你的技术方法。

我会采取的步骤可能包括:

  1. 谁出口DxgkInitialize ? 不要猜测win32k,查找它。 (我不会给你答案)。 也许你可以很容易地钩住被调用者而不是调用者。

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

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

根据你想得到的分辨率,你不需要一个驱动程序。 哎呀,你几乎不需要一个DLL。 查找窗口钩子部分解决方案和可访问性回调。