CreateProcess
来源:互联网 发布:linux 中单引号的作用 编辑:程序博客网 时间:2024/06/06 04:21
CreateProcessBOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, // command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD BOOL bInheritHandles, // handle inheritance option DWORD dwCreationFlags, // creation flags LPVOID lpEnvironment, // new environment block LPCTSTR lpCurrentDirectory, // current directory name LPSTARTUPINFO lpStartupInfo, // startup information LPPROCESS_INFORMATION lpProcessInformation // process information);
当CreateProcess被一个线程调用时,系统会创建一个进程内核对象,进程内核对象并不代表进程本身,它是操作系统,用来管理这个进程的数据结构,该结构当中有一个使用计数,会在进程被创建是设置为1,然后系统为新进程创建一个虚拟地址空间,将所需的代码以及数据加载到进程的地址空间当中,之后,系统会为新进程的主线程创建一个线程内核对象,主线程最终会调用你的main函数
如果系统成功创建了新进程和主线程,函数会返回ture
pszApplicationName
制定新进程要使用的执行体文件的名称
当在pszApplicationName中传一个文件路径时,如果给的是一个相对路径,那么他只会在当前目录下进行查找,当这个值不为null时,pszCommandLine会被当为命令行参数传递
如果不加后缀名 默认是exe
执行体文件 是 exe文件
pszCommandLine
传递新进程的命令行字符串
如果pszApplicationName为NULL,我们可以在pszCommandLine中传一个文件的路径,如果我们传的是一个相对路径,他会按照一下顺序来搜索:
1 所在目录
2 当前目录
3 windows系统目录(system32mul)
4 windows目录
5 path环境变量中列出的目录
pszCommandLine参数还有一个需要注意的地方,CreateProcess内部会修改这个参数,所以我们不应该传递一个常量指针
psaProcess
设置进程内核对象的安全属性 null
psaThread
设置主线程内核对象的安全属性 null
blnheritHandles false
是否被继承
fdwCreate 标志位 用的最多的 是 下面的 这个标志位
进程创建方式标志
CREATE_NO_WINDOWS
标志指示系统不要为应用程序创建任何控制台窗口,可以用这个标志来执行没有用户界面的控制台程序
pvEnvironment
pvEnvironment参数指向一个内存块,其中包含了新进程要使用的环境字符串。大多数时候,为了这个参数传入的值都是null,这讲导致子进程继承其父进程使用的一组环境字符串。另外,还可以使用GetEnvironmentStrings函数
psiStartInfo
此结构体一点要清零,否则成员间包含主线程堆栈上的垃圾数据
typedef struct _STARTUPINFO { DWORD cb; //初始化为sizeof(STARTUPINFO) 版本控制 LPTSTR lpReserved; //保留 必须初始化为null LPTSTR lpDesktop; //启动应用程序的桌面名称 windows 有很多桌面切换 LPTSTR lpTitle; //控制台下可用,制定控制台的窗口标题 DWORD dwX; //屏幕的位置 DWORD dwY; //屏幕的位置 DWORD dwXSize; //屏幕的宽度 DWORD dwYSize; //屏幕的高度 DWORD dwXCountChars; //控制台下可用,控制台的宽度 DWORD dwYCountChars; //控制台下可用,控制台的高度 DWORD dwFillAttribute; //控制台下可用,控制台的文本和背景色 DWORD dwFlags; //组合值 WORD wShowWindow; //窗口可用,窗口如何显示 WORD cbReserved2; //保留 LPBYTE lpReserved2; //保留 HANDLE hStdInput; //设置标准输入 HANDLE hStdOutput; //设置标准输出 HANDLE hStdError; //设置标准错误输出} STARTUPINFO, *LPSTARTUPINFO;
dwFlags
STARTF_FORCEONFEEDBACK 不改变鼠标光标
STARTF_FORCEOFFFEEDBACK 改变鼠标为等待
STARTF_PREVENTPINNING 窗口无法被固定在任务栏上
STARTF_RUNFULLSCREEN 是x86计算机上运行的一个控制台应用程序已经全屏模式启动
STARTF_TITLEISAPPID 设置任务栏和开始菜单的状态
STARTF_TITLEISLINKNAME
STARTF_UNTRUSTEDSOURCE
STARTF_USECOUNTCHARS 使用dwXConstChars和...
STARTF_USEFILLATTRIBUTE 使用dwFillAttribute
STARTF_USEHOTKEY
STARTF_USEPOSITION 使用 dwX and dwY成员
STARTF_USESHOWWINDOW 使用wShowWindow成员
STARTF_USESIZE 使用dwXSize和dwYSize
STARTF_USESTDHANDLES 使用 hStdlnput ,hStdOutput 和hshdError
typedef struct _PROCESS_INFORMATION { HANDLE hProcess; //启动的进程句柄 HANDLE hThread; //启动的线程句柄 DWORD dwProcessId; //PID DWORD dwThreadId; //TID} PROCESS_INFORMATION;
阅读全文
0 0
- CreateProcess
- CreateProcess
- createprocess
- CreateProcess
- CreateProcess
- CreateProcess
- CreateProcess
- CreateProcess
- createprocess
- createprocess
- CreateProcess
- CreateProcess
- CreateProcess
- CreateProcess
- CreateProcess
- CreateProcess
- CreateProcess
- CreateProcess
- Spring 03
- Django 1.8.2 文档
- Spring 各个jar包的作用
- [CF600E]Lomsat gelral
- Ubuntu下用apt-get安装最新版本的Redis
- CreateProcess
- 通过MyEclipse 9.0对Liferay6.1.2进行编译与部署
- 安卓仿手机网易新闻app项目开发系列之(二)轮播图显示和RecyclerView适配器编写
- SQL简明实例教程
- Vlan使用--------2
- 学习笔记---高等数学前置知识---数列、排列组合、解不等式
- 接口interface
- Android本地数据安全问题,常用加密简单汇总,网上搜集的资料,方便查看
- Python递归函数