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

Is it possible to call functions from a kernel mode driver in a user mode application on Windows?

我读到 here 反过来是可能的,但是如何实现这样的事情呢?我希望有一个简单的方法,类似于从加载的 DLL 调用,但我的 google 研究没有任何结果。我唯一的另一个想法是,可以通过 WriteFileDeviceIoControl 传递一些预定义的常量,驱动程序像 switch 语句一样解析这些常量以执行相关功能;有更直接的方法吗?

问题是你为什么要这样做?一般来说,如果你必须依赖这样的某种机制,你需要重新审视你正在编写的 application/driver 的设计。

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

如果出于某种原因,您需要直接调用内核,您将不得不求助于未记录的方法。有一些方法可以挂接到内核调度 table 并覆盖其中一个调度处理程序以将调用重定向到您的函数。但我希望你永远不要向你的客户运送这样的东西。这对于学习 dispatch table 的工作原理等很有帮助,但会带来一些安全问题。归根结底,您的软件不应该对某人的机器被黑负责。