重读Windows核心编程--CreateProcess

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

先来看看CreateProcess的定义

BOOL CreateProcess (

PCTSTR pszApplicationName,

PTSTR pszCommandLine,

PSECURITY_ATTRIBUTES psaProcess,

PSECURITY_ATTRIBUTES psaThread,

BOOL bInheritHandles,

DWORD fdwCreate,

PVOID pvEnvironment,

PCTSTR pszCurDir,

PSTARTUPINFO psiStartInfo,

PROCESS_INFORMATION ppiProcInfo

)

第一个参数为程序名,不能省略.exe,如果为NULL的话,就默认第二个字符串的前面一段是程序名

第二个参数是PTSTR,因此不能传递一个常量字符串

第三个和第四个参数中有个hInheritHandles的成员,举个例子来说,A生成B,C,D......,B的这两个参数决定了其进程和线程的句柄是否能被C,D...所继承

但是第五个参数相当于一个总开关,不管前面怎么设置,但是一旦bInheritHandles为FALSE,则所有的句柄都不能被父进程A继承

第六个参数fdwCreate有多个flag,参见中文版p89.

DEBUG_PROCESS,DEBUG_ONLY_THIS_PROCESS 表示调试子进程,后面的那个参数表示A调试B,但是B生成C,A只会收到任何从B到达的事件

CREATE_SUSPENDED 创建时挂起进程

DETACHED_PROCESS 字面意思分离进程,假设一个CUI程序A生成了另一个CUI程序B,默认B会使用A的控制台,这个参数组织这类情况,并且指定一个额外的控制台让B输出

CREATE_NEW_CONSOLE 表示为新进程创建一个新的控制台,不能与上面的混用

CREATE_NO_WINDOW 指示不要为进程创建任何控制台窗口

CREATE_NEW_PROCESS_GROUP 父进程A生成了一组进程,如果某一个cui获得了ctrl-c ctrl+break 整组的进程都讲获得这个信息

CRREATE_DEFAULT_ERROR_MODE 进程不会继承父进程的error mode,而是默认的

CREATE_SEPARATE_WOW_VDM 只有当程序是16位才有用,表示为其创建一个新的DOS虚拟机

CREATE_SHARED_WOW_VDM 只有当程序是16位才有用,表示所有的16位程序都在一个DOS虚拟机中(同时这也是默认情况,可修改注册表改变这种情况)

CREATE_UNICODE_ENVIRONMENT 进程的环境块为unicode,默认和ansi

CREATGE_FORCEDOS 强制系统一个嵌入在16位OS/2应用程序中的MS-DOS程序

CREATE_BREAKWAY_FROM_JOB 

EXTENDED_STARTUPINFO_PRESENT 表示psiStartInof是个STARTINFOEX结构

同时还可以指定优先级

IDLE_PRIORITY_CLASS

BELOW_NORMAL_PRI...

NORMAL_PRI...

ABOVE_PRI...

HIGH_PRI...

REALTIME_PRI...

第六个参数当传入NULL,默认继承父进程的环境变量

第七个参数可以更改运行目录

第八个参数的定义如下

typedef struct _STARTUPINFO

{

cb,

lpReserved,

lpDesktop,

lpTitle,

dwX,

dwY,

dwXSize,

dwYSize,

dwXCountChars,

dwYCountChars,

dwFillAttribute,

dwFlags,

wShowWindow,

cbReserved2,

lpReserved,

hStdInput,

hStdOutput,

hStdError

}STARTUPINFO, *LPSTARTUPINFO

前面几个参数从字面意思就可以推导出来是做什么的,注意有些参数只有当子进程用了DEFAULT参数才会生效,最后的三个参数可以用来重定向

dwFlags决定哪些参数生效,例如STARTF_USESIZE,另外还有两个参数决定是否在生成子进程的过程中给个视觉反馈

STARTF_FORCEONFRRDBACK STARTF_FORCEOFFFEEDBACK

STARTUPINFOEX只比它多了一个参数lpAttributeList,它的设置可以设置子进程可以从父进程继承哪些句柄,并且可以更改父子进程的关系,详情参见p96-97

最后一个参数ppiProcInfo,有以下几个成员

hProcess,

hThread,

dwProcessId,

dwThreadId

Policy-based Design在嵌入式网络栈中的编译期行为装配 Policy-based Design是一种基于模板的编译期配置范式,其核心是将运行时多态替换为编译期特化,从而消除虚函数开销、避免动态内存分配,并保障强类型安全与确定性行为。相比Strategy模式依赖虚函数表和运行时决策,Policy通过正交策略组合(如ConnectionPolicy、RetryPolicy、TimeoutPolicy)实现硬件驱动、重试逻辑与超时控制的彻底解耦。该技术在资源受限的嵌入式系统(如Windows Mobile、FreeRTOS、Zephyr)中展现出显著优势:降低ROM/ 阅读详情

相关推荐

【并发编程二】c++创建子进程CreateProcess()

CreatProcess()需要若干参数来指定新进程的运行方式,但实际使用中多半参数都是用不到的,可以设置为NULL。int main(int argc, char*argv[])_argc 是整型变量,argv 是指向字符串的指针数组。进程相关的API

junxuezheng的博客 9380

CreateProcess时不显示或者不创建窗口 (或用虚拟桌面实现后台调用外部程序)

最近接触一个项目,vc中主窗口调用某个存在的EXE可执行文件在DOS(或者后台)执行,但是不想让用户看到这个执行文件,也就是不显示或者不创建窗口。从网上搜了很多总结了三种方法,希望对大家有用: 网上常见的两种方法(详细说明参考:http://blog.163.com/zhucongdzkd@126/blog/static/1399971932010780309154/): 方法一:将 Cr

rongwenbin的专栏 8687

CreateProcess时不显示或者不创建窗口 (或用虚拟桌面实现后台调用外部程序)...

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33728268的博客 1406

C++函数CreateProcess隐藏窗口

//************************************ // Method: CreateMyBatOrProcess // Access: public // Returns: void // CreateTime: 2018年07月18日 // Author: d // Describe: CreateProce...

就是那个党伟 2766

Window c++ 创建子进程

在window系统中,创建一个子进程可以使用CreateProcessA方法实现,其函数API如下: BOOL CreateProcessA( LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, ...

Keep Moving~ 9936

Mythos如何重构漏洞挖掘:从符号执行到AI原生安全工程

漏洞挖掘正经历从规则匹配、模糊测试到AI驱动的范式升级。其核心原理已转向符号执行与神经推理融合建模、跨层系统意图理解及强化学习引导的攻击图谱生成。这种技术路径显著提升了漏洞发现的确定性、可复现性与实战可用性,使传统依赖人工经验的渗透流程逐步被自动化、可集成、高精度的安全左移实践所替代。在DevSecOps、云原生审计与供应链安全等关键场景中,具备EXP自动生成与防御绕过验证能力的AI安全模型,正成为企业构建AI原生防御体系的核心基础设施。Mythos正是这一演进的关键代表。

weixin_33795093的博客 321

使用WIN32 API CreateProcess()以无窗口方式创建DOS程序

要达到DOS程序运行时不显示窗口的效果,有两种可能: 一是创建该DOS进程时,指定不创建窗口; 二是隐藏该DOS进程有窗口。 根据MSDN,CreateProcess() API的原型如下:     BOOL CreateProcess(       LPCTSTR lpApplicationName,       LPTSTR lpCommandLine,       LPSECURITY_ATTRIBUTES lpProcessAttributes,   

2688

Python selenium 去除driver控制台黑框的两种方法

多出现于用Pyinstaller打包时,希望隐藏driver控制台黑框的情况,解决方法如下: 修改源码,源码文件路径如下: Lib \ site-packages \ selenium \ webdriver \ common \ services.py 找到文件中start函数,具体代码如下: def start(self): """ Starts the Service. :Exceptions: - WebDriverException : Raised

weixin_39671140的博客 3623

C++创建子进程

C++创建子进程

qq_34552942的博客 2041

Python报错ImportError: cannot import name ‘CREATE_NO_WINDOW‘

模块中 Windows 平台的一个常量,用于创建一个新的进程时隐藏新窗口。通常情况下该常量应该是可用的,但是如果你的 Python 版本比较老(例如 Python2.x),则可能会出现。这个常量在较新的 Python 版本(如 Python 3.7 或更高版本)中才可用。然而我的python版本为3.6.1,在 Python 3.6 的。我换个高级的版本就ok了,切换后版本为。是 Python 中。,事实证明是能导入的了。

EC_Carrot的博客 839

进程创建过程详解 CreateProcess

转载请您注明出处:http://www.cnblogs.com/lsh123/p/7405796.html 0x01 CreateProcessW   CreateProcess的使用有ANSI版本的CreateProcessA和UNICODE版本的CreateProcessW:   不过查看源码就可以发现其实CreateProcessA内部调用的还是CreateProcessW:

long0801的博客 1万+

解决python+selenuim运行时隐藏ChromeDriver窗口

一、问题描述 当我们在用python3的selenium库做web自动化时,电脑会先弹出chormedriver.exe系统窗口(如下图),然后在弹出浏览器界面......。 我们出于各种原因想隐藏这个窗口,答案当然是可以的,亲测有效! 二、解决方案 **2.1:打开python目录 :D:python\Lib\site-packages\selenium\webdriver\common下的service.py文件。 2.2:导包:在改文件上面导入:from subprocess import C

ZDK_001的博客 1万+

Windows编程----CreateProcess函数

CreateProcess函数原型 CreateProcess 函数用于创建一个新进程(子进程)及其主线程,其函数原型如下: BOOL CreateProcess( LPCWSTR lpApplicationName,//指向可执行模块名称的指针 LPWSTR lpCommandLine,//指向命令行字符串的指针。 LPSE...

weixin_40480404的博客 303

进程的创建与使用(win32-API)

Windows环境下,C语言可以通过调用Win32 API来创建和管理进程。 `CreateProcess`函数是最常用的方法。这个函数允许启动一个新的进程,并且可以控制其继承属性、优先级、环境变量等参数。

738

Win32 API编程----CreateProcess 创建一个新的进程

环境 :win10 +vs 20131、新建控制台应用程序,修改名称CreateProcess2、选择空项目后点击完成。3、右击源文件—添加—新建项目—新建CreateProcess.cpp文件。4、CreateProcess 函数原型:BOOL CreateProcess(LPCTSTR lpApplicationName,LPTSTR lpCommandLine,LPSECURITY_ATTR...

lingshuangcanxue 4481

CreateProcess函数详解

CreateProcess说明:WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。 函数原型:BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpP...

weixin_30689307的博客 1511

Windows-CreateProcess-fdwCreate

DEBUG_PROCESS: DEBUG_ONLY_THIS_PROCESS: CREATE_SUSPENDED: DETACHED_PROCESS: CREATE_NEW_CONSOLE: CREATE_NO_WINDOW: CREATE_NEW_PROCESS_GROUP: CREATE_DEFAULT_ERROR_MODE: CREATE_SEPARATE_WOW_VDM: ...

weixin_33725515的博客 143

C++进程

如何创建一个进程 CreateProcess CreateProcessA( _In_opt_ LPCSTR lpApplicationName,// 该字符串可以指定要执行的模块的完整路径 和文件名,一般为NULL; _Inout_opt_ LPSTR lpCommandLine,//命令行 _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,//该 结构确定子进程是否可以继承返回到新进程对象的句柄。如果lpProcessAttributes为NU

qq_19300307的博客 647

C++ 进程与线程---CreateProcess()函数(1)

目录 1、CreateProcess()函数 1.1 lpApplicationName & lpCommandLine 1.2 lpProcessAttributes & lpThreadAttributes 1.3bInheritHandles 1.4 dwCreationFlags 1.5 lpEnvironment 1.6lpCurrentDirectory 1.7lpStartupInfo 1.8lpProcessInformation 1、Create...

weixin_41885845的博客 8808
上一篇: Linux重修第二课(初识SHELL)
下一篇: 信息安全试验课遇到的一个问题
dvstter
博客等级 码龄12年 1粉丝 13原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值