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

标签 c++ windows kernel kernel-mode usermode

我正在为我们的司机团队构建硬件模拟器。现在,模拟器分为 2 个模块: 第一个模块在驱动程序内部以内核模式运行,这是驱动程序和 HW-Simulator 之间的主要接口(interface)。 第二个模块是可执行的用户模式代码,它为模拟器生成数据并通过调用 DeviceIOControl(在 windows API 下)将其传输到模拟器

我的需求是:我希望能够从内核模式中执行用户模式可执行文件。我需要能够以一种相对便携的方式来做到这一点。目前我只在 Windows 上运行,但很快就会改变。 此外,我需要能够通过它的 stdin 管道与用户模式代码通信,以便重新配置它并最终关闭它。

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

但它只与 linux 内核有关。有没有更便携的选择?还是 Windows 替代品?

我能否在 Windows 中通过简单地使用 ShellExecute/RunAs API 函数来执行此操作?

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

最佳答案

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

推荐的做法是拥有“合作伙伴服务”,这是一种使用 IOCTL 与您的驱动程序通信的用户模式服务。您可以使用 inverted call model让您的驱动程序调用您的服务以创建一个流程。

关于c++ - 从内核模式执行用户模式可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6127115/

相关文章:

c++ - 是否有存储 std::locale 源文件?

c++ - 一种特定的字符串格式,由数字和字符共同表示某个项目

c++ - CreateCompatibleDC 的奇怪错误

sockets - 两个内核模块,每个模块都使用 netlink 套接字。如何同时使用它们?

c++ - CMenu::ModifyMenu 的问题

c++ - 函数指针作为模板类函数的输入参数

python - 我有几个 Linux 命令,我想在 Windows 机器上运行。如何在 Windows 上从 Python 运行 Linux 命令

python - subprocess.call 在 Windows 上使用 cygwin 而不是 cmd

c - ELF 二进制文件中默认信号处理程序的代码在哪里?

memory-management - 从用户进程的mm_struct或vm_area_struct中读取数据