【发布时间】:2015-09-02 09:50:43
【问题描述】:
我希望能够更改 STARTUPINFO 的值,就在 CreateProcess 被调用(暂停)之后。
因此,新的远程/子进程一启动就可以获取自定义的GetStartupInfo 值。
我怎样才能做到这一点?
更多信息:
我想将任意数据传递给子进程。
关于这篇文章:http://www.catch22.net/tuts/undocumented-createprocess 可以使用来自STARTUPINFO 结构的reserved2 成员来做到这一点。此方法有效,但限制为 65536 字节。为了传递超过 65536 个字节,理论上的解决方案是:
- 创建进程(暂停)
- 在子进程中使用
VirtualAllocEx分配空间 - 用
WriteProcessMemory向子进程写入数据> 65536字节 - 使用步骤 2 中的地址更改
reserved2成员 - 恢复进程
- 子进程调用
GetStartupInfo获取数据
【问题讨论】:
-
显而易见的事情是在调用
CreateProcess之前更改值。大概这不是一个选择,因为你没有打电话给CreateProcess。这让我觉得有一些外部过程,注入,挂钩诡计正在发生。如果我们知道那是什么会有帮助吗? -
@DavidHeffernan 你是对的。我想扩展/打破
lpReserved265536 字节的限制。如果我能够用之前的VirtualAllocEx调用的结果填充这个值,理论上我可以存储 RAM 所提供的尽可能多的字节。 -
我不太明白那个评论。尽管如此,我认为您应该编辑问题以添加更多详细信息。也许有人会有不同的方法来解决你的根本问题。
-
为什么不使用标准的IPC让其他进程知道在哪里可以找到这段内存?
-
您不需要窗口句柄。内存映射文件将是完美的。
lpReserved2上的文档很清楚。不要使用它。将文件映射的名称作为命令行参数传递,一切都很好。