是否可以在 Windows 上的用户模式应用程序中从内核模式驱动程序调用函数?

问题描述

我读到 here 说逆是可能的,但是如何实现这样的事情呢?我希望有一种简单的方法,类似于从加载的 DLL 调用,但我的谷歌研究一无所获。我唯一的另一个想法是,可以通过 WriteFileDeviceIoControl 传递一些预定义的常量,驱动程序将其解析为 switch 语句以执行相关函数;有更直接的方法吗?

解决方法

问题是你为什么要这样做?通常,如果您必须依赖这样的某种机制,则需要重新审视您正在编写的应用程序/驱动程序的设计。

在用户模式应用程序的上下文中执行某些操作的正确方法正是您所描述的。您可以对驱动程序进行 DeviceIoControl 调用,驱动程序会验证您传递的所有参数,然后代表用户模式调用执行操作。

如果由于某种原因,你需要直接调用内核,你将不得不求助于未记录的方法。有多种方法可以挂钩内核调度表并覆盖调度处理程序之一以将调用重定向到您的函数。但我希望你永远不要向你的客户运送这样的东西。这对于了解调度表的工作方式等很有用,但会引入一些安全噩梦。最终,您的软件不应为某人的机器被黑客入侵负责。