首页 文章

从内核模式执行用户模式可执行文件

提问于
浏览
7

我'm building a HW-simulator for our driver team. Now, the simulator is devided in to 2 modules: First module runs inside the driver, in kernel mode and that' s驱动程序和HW-Simulator之间的主要接口 . 第二个模块是一个可执行的用户模式代码,它为模拟器生成数据并通过调用 DeviceIOControl (在Windows API下)将其传输到模拟器

我的需求是:我希望能够在内核模式下执行用户模式可执行文件 . 我需要能够以相对便携的方式做到这一点 . 目前我管道,为了重新配置它并最终关闭它 .

我发现了这个:Executing a user-space function from the kernel space

但它只与linux内核相关 . 有更便携的替代方案吗?或Windows替代?

我可以通过简单地使用ShellExecute / RunAs API函数在Windows中执行此操作吗?

注意:我们知道从内核空间调用用户模式代码所涉及的安全风险 . 但由于这只是用作测试环境而不会达到我们的发布代码,因此我们并不关心 .

2 回答

  • 0

    实际上,没有从用户模式触发流程创建就没有记录的方法 .

    但是,如果您不想创建用户模式应用程序,则有一种无证的方法:

    要创建有效的win32进程,驱动程序必须与CSRSS(未记录的内容)进行通信 .

    您可以将用户模式APC排入队列,在任何现有进程的上下文中为APC代码分配一些虚拟内存 . 这段代码应该简单地调用CreateProcess和你想要的任何其他东西 .

  • 5

    在Windows内核中没有一种干净的方法可以做到这一点 . 用于创建进程的用户模式API CreateProcess使用未记录的API(NtCreateProcess / NtCreateThread)来创建进程 .

    建议的做法是使用"partner service",这是一种用户模式服务,使用IOCTL与您的驱动程序通信 . 您可以使用inverted call model让您的驱动程序调用您的服务以使其创建进程 .

相关问题