我的问题涉及Windows 7驱动程序开发。
我需要拦截对驱动程序的系统调用。理论上,在这种情况下,建议创建一个过滤器驱动程序,但在我的情况下,驱动程序没有公开过滤兼容接口。具体来说,它是一个Vista / 7显示迷你端口驱动程序。
显示驱动程序作为标准WDM驱动程序加载。在其
有人能向我建议任何有用的信息源吗?如何实现这一点?
胜利的关键可能是将可执行文件导入节中的
我考虑了以下选项:
我需要拦截对驱动程序的系统调用。理论上,在这种情况下,建议创建一个过滤器驱动程序,但在我的情况下,驱动程序没有公开过滤兼容接口。具体来说,它是一个Vista / 7显示迷你端口驱动程序。
显示驱动程序作为标准WDM驱动程序加载。在其
DriverEntry
中,预计调用一个DxgkInitialize
系统例程(我想是由win32k.sys导出)。我的目标是拦截这个调用。有人能向我建议任何有用的信息源吗?如何实现这一点?
胜利的关键可能是将可执行文件导入节中的
DxgkInitialize
替换为我的函数地址。问题是,这应该在加载可执行文件之后(映射+重定位,必要时+准备所有导入表条目),但在驱动程序的入口点调用之前。我考虑了以下选项:
- 将可执行文件映射到系统内存中,并手动“准备”它(即执行加载程序的工作)。然后修补所需的功能并运行入口点。
- 可以使用一些努力进行模块加载
ZwSetSystemInformation
(?) - 可能会修补导出
DxgkInitialize
的模块的导出部分。这样,加载程序将自动将每个加载的模块重定向到我的手中。
dwm.exe
,因为所有WDDM绘图都会通过它进行,而且使用用户模式钩取的话,系统不太可能变得不稳定。 - Ben Voigt