Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >修改CreateProcess后的STARTUPINFO

修改CreateProcess后的STARTUPINFO
EN

Stack Overflow用户
提问于 2015-09-02 01:50:43
回答 1查看 599关注 0票数 0

我希望能够在调用(暂停) STARTUPINFO CreateProcess之后更改值,即右CreateProcess

因此,新的远程/子进程可以在启动时立即获得自定义的GetStartupInfo值。

我怎样才能做到这一点?

更多信息:

我想将任意数据传递给子进程。关于本文:http://www.catch22.net/tuts/undocumented-createprocess,可以使用来自STARTUPINFO结构的reserved2成员来完成。此方法工作正常,但限制为65536字节。要传递超过65536字节的理论解决方案是:

  1. 创建进程(挂起)
  2. 子进程中带有VirtualAllocEx的分配空间
  3. WriteProcessMemory将数据> 65536字节写入子进程
  4. 使用步骤2中的地址更改reserved2成员
  5. 继续这个过程
  6. 子进程调用GetStartupInfo并获取数据
EN

回答 1

Stack Overflow用户

发布于 2015-09-02 03:14:30

我不知道你有什么值得支持的方式去做你要做的事。然而,我提出了一个解决根本问题的替代办法。

  1. 无论如何,您不应该使用lpReserved2,因为文档告诉您将它设置为NULL
  2. 让父进程创建一个命名内存映射文件。
  3. 将此文件映射的名称作为命令行参数传递到子进程。

实际上,这种方法有很多变体,但是命令行参数是将信息传递给新进程的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32349929

复制
相关文章
createprocess error=2_CreateProcess
代码示例,注意下面的代码可能运行失败,请按照如下设置VS 右键项目名(例如ConsoleApplication123)->属性->配置属性(注意左上角是活动Debug/Debug/Release/所有配置,比如选了Release则在Debug下无效)->链接器->清单文件->UAC执行级别->requireAdministrator 然后关闭visual studio,以管理员身份运行visual studio
全栈程序员站长
2022/10/01
5230
8.6 STARTUPINFO
STARTUPINFO 结构体,可以用来指定新进程的主窗口外观风格、背景颜色、标题等信息,也可以用来实现反调试技术。通常情况下,我们可以将STARTUPINFO结构体中的dwFlags成员设置为STARTF_DEBUGONLYTHISPROCESS,以防止调试器附加到当前进程。设置了STARTF_DEBUGONLYTHISPROCESS后,如果尝试通过调试器附加到该进程,则调试器将直接失败并退出。
微软技术分享
2023/09/27
1950
8.6 STARTUPINFO
8.6 STARTUPINFO
STARTUPINFO 结构体,可以用来指定新进程的主窗口外观风格、背景颜色、标题等信息,也可以用来实现反调试技术。通常情况下,我们可以将STARTUPINFO结构体中的dwFlags成员设置为STARTF_DEBUGONLYTHISPROCESS,以防止调试器附加到当前进程。设置了STARTF_DEBUGONLYTHISPROCESS后,如果尝试通过调试器附加到该进程,则调试器将直接失败并退出。
微软技术分享
2023/10/11
1740
CreateProcess 创建带命令行参数的进程时,报错或者提示内存位置无效的可能的一个原因
可能的一个原因:命令行参数使用了常量。 例如: CreateProcess(NULL, "notepad",NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si,&pi); 解释: pszApplicationName和pszCommandLine分别表示进程使用的可执行文件名和向其传递的命令行字符串,注意pszCommandLine是PTSTR,这意味着你必须为其传递指向非常量字符串的地址。CreateProcess内部会更改向其传递的命令行字符串,但在Creat
大菊观
2018/05/24
2.4K0
C/C 中一次性执行多个DOS命令的实现思路
最近给公司的一个系统写了个启动的脚本,但是领导说批处理这样的脚本太low了,要使用EXE来启动,未来还要使用加密工具对EXE进行加密。
用户3519280
2023/07/06
2430
CreatePipe、CreateProcess函数
管 道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另 一进程就可以从管道的另一端将其读取出来。匿名管道(Anonymous Pipes)是在父进程和子进程间单向传输数据的一种未命名的管道,只能在本地计算机中使用,而不可用于网络间的通信。
全栈程序员站长
2022/09/17
1.4K0
windows下C与C++执行cmd命令并实时获取输出
在windows下一般会使用系统的cmd命令或者其他现成的一些命令行可执行程序来完成一些操作,比如:调用ping命令来测试网络是否畅通、调用ffmpeg命令进行视频转码等等。为了能在软件界面上有更好的交互输出,都需要将命令执行的过程拿到,进行处理,然后在界面上进行显示,让用户知道程序正在正常运行,下面就介绍几种输出的获取方式。
DS小龙哥
2022/05/28
6.7K0
windows下C与C++执行cmd命令并实时获取输出
C语言编程: CreateProcess标准输出重定向到文件
说明: CreateProcess创建进程执行不支持简单的 > 符号重定向,system之类的函数执行外部进程可以使用 > 符号直接重定向到文件,但是system这类函数执行命令时,都会弹出控制台窗口,而CreateProcess创建执行进程可以设置属性隐藏这个控制台窗口,后台执行。
DS小龙哥
2022/01/07
1.4K0
C/C++ 打开外部程序
ShellExecute ShellExecute 在不使用管理员权限运行 VS2019 的情况下仍然可以正常打开任何程序,不报 740 错误。
微软技术分享
2022/12/28
6670
C/C++ 打开外部程序
VC++中如何启动外部进程和关闭某个进程
三个SDK函数: WinExec, ShellExecute,CreateProcess
ccf19881030
2020/05/27
2.9K0
6.3 应用动态内存补丁
动态内存补丁可以理解为在程序运行时动态地修改程序的内存,在某些时候某些应用程序会带壳运行,而此类程序的机器码只有在内存中被展开时才可以被修改,而想要修改此类应用程序动态补丁将是一个不错的选择,动态补丁的原理是通过CreateProcess函数传递CREATE_SUSPENDED将程序运行起来并暂停,此时程序会在内存中被解码,当程序被解码后我们则可以通过内存读写实现对特定区域的动态补丁。
微软技术分享
2023/10/11
1940
6.3 应用动态内存补丁
WinExec, ShellExecute, CreateProcess
在vc++ 程序中运行另一个程序的方法有三个: WinExec(),ShellExcute()和CreateProcess()
全栈程序员站长
2022/09/18
1.5K0
WindowsAPI 之 CreatePipe、CreateProcess[通俗易懂]
A pipe is a section of shared memory that processes use for communication. The process that creates a pipe is the pipe server. A process that connects to a pipe is a pipe client. One process writes information to the pipe, then the other process reads the information from the pipe. This overview describes how to create, manage, and use pipes.
全栈程序员站长
2022/09/06
4.2K0
WindowsAPI 之 CreatePipe、CreateProcess[通俗易懂]
C/C++ 强制让进程执行自己的 ShellCode
其中,当使用 CreateProcess 创建进程时,创建标志为 CREATE_SUSPENDED,则表示新进程的主线程被创建为挂起状态,直到使用 ResumeThread 函数恢复主线程,进程才会继续运行。
微软技术分享
2022/12/28
5400
WinExec、ShellExecute和CreateProcess
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。CreateProcess因为使用复杂,比较少用。
全栈程序员站长
2022/09/14
1.1K0
WinExec、ShellExecute和CreateProcess
10.0 探索API调试事件原理
本章笔者将通过Windows平台下自带的调试API接口实现对特定进程的动态转存功能,首先简单介绍一下关于调试事件的相关信息,调试事件的建立需要依赖于DEBUG_EVENT这个特有的数据结构,该结构用于向调试器报告调试事件。当一个程序发生异常事件或者被调试器附加时,就会产生对应的DEBUG_EVENT调试事件,通常DEBUG_EVENT包含了多种调试类型,包括异常事件、进程创建事件、线程创建事件、进程退出事件和线程退出事件等等,我们只需要动态捕捉这些调试事件并作相应的处理即可实现更多有用的功能。
微软技术分享
2023/10/03
1930
10.0 探索API调试事件原理
10.0 探索API调试事件原理
本章笔者将通过Windows平台下自带的调试API接口实现对特定进程的动态转存功能,首先简单介绍一下关于调试事件的相关信息,调试事件的建立需要依赖于DEBUG_EVENT这个特有的数据结构,该结构用于向调试器报告调试事件。当一个程序发生异常事件或者被调试器附加时,就会产生对应的DEBUG_EVENT调试事件,通常DEBUG_EVENT包含了多种调试类型,包括异常事件、进程创建事件、线程创建事件、进程退出事件和线程退出事件等等,我们只需要动态捕捉这些调试事件并作相应的处理即可实现更多有用的功能。
微软技术分享
2023/10/11
1750
10.0 探索API调试事件原理
17.1 隐藏执行CMD命令
本章内容涉及使用Socket API和CMD命令行工具实现本地CMD命令执行、无管道正向CMD和无管道反向CMD三种功能。执行本地CMD实现使用CreateProcess函数创建一个新的CMD进程,并将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。无管道正向CMD和无管道反向CMD使用WSASocket函数创建TCP套接字,并将CMD进程的标准输入、输出和错误输出重定向到套接字的句柄上,通过网络连接实现远程命令执行功能。
微软技术分享
2023/10/22
4450
17.1 隐藏执行CMD命令
创建线程的方式打开记事本
今天操作系统课老师讲到进程,提出了一个有趣的小实验:能否以系统调用的方式利用 Windows 创建进程的系统调用函数来打开一个软件。闲着蛋疼的我立马来了兴趣,姑且写一个玩玩(
浪漫主义狗
2023/09/20
2760
创建线程的方式打开记事本
6.3 应用动态内存补丁
动态内存补丁可以理解为在程序运行时动态地修改程序的内存,在某些时候某些应用程序会带壳运行,而此类程序的机器码只有在内存中被展开时才可以被修改,而想要修改此类应用程序动态补丁将是一个不错的选择,动态补丁的原理是通过CreateProcess函数传递CREATE_SUSPENDED将程序运行起来并暂停,此时程序会在内存中被解码,当程序被解码后我们则可以通过内存读写实现对特定区域的动态补丁。
微软技术分享
2023/09/21
2600
6.3 应用动态内存补丁

相似问题

无法使用CreateProcess,因为生成错误:'STARTUPINFO':未声明的标识符

12

子流程- startupinfo - FileNotFoundError

14

Windows API STARTUPINFO是否已销毁?

30

“模块”对象没有属性“STARTUPINFO”

14

执行前解析STARTUPINFO hStdInput

162
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文