首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在c ++中调用:: CreateProcess来启动Windows可执行文件?

在C++中,调用::CreateProcess来启动Windows可执行文件需要以下步骤:

  1. 包含必要的头文件:#include<windows.h> #include <tchar.h> #include<iostream>
  2. 定义主函数并初始化参数:int main() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi));
  3. 设置要启动的可执行文件的路径和命令行参数: TCHAR szCmdline[] = _T("C:\\path\\to\\executable.exe arg1 arg2");
  4. 设置进程的安全属性: si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW;
  5. 调用::CreateProcess函数来启动进程: if (!::CreateProcess(NULL, szCmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { std::cout << "CreateProcess failed (" << ::GetLastError() << ")."<< std::endl; return 0; }
  6. 等待进程完成并关闭句柄: ::WaitForSingleObject(pi.hProcess, INFINITE); DWORD dwExitCode = 0; ::GetExitCodeProcess(pi.hProcess, &dwExitCode); ::CloseHandle(pi.hProcess); ::CloseHandle(pi.hThread); std::cout << "Process exited with code " << dwExitCode << "."<< std::endl; return 0; }

这样,你就可以在C++中使用::CreateProcess函数来启动Windows可执行文件了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

7.2 通过API创建新进程

CreateProcess()该函数提供了比较灵活的进程控制,相比于其他API函数,例如WinExec()和ShellExecute() ,它可以更详细地控制进程的执行,进程窗口的大小和位置,输出、输入和错误信息的控制等...同时CreateProcess()也具有更高的系统安全性。因此,在实际开发,开发人员往往使用 CreateProcess()函数进行进程控制、管理和处理。...其函数原型如下:BOOL CreateProcess( LPCSTR lpApplicationName, // 可执行文件名或命令行调用 LPSTR...LPPROCESS_INFORMATION lpProcessInformation // 指向 ProcessInformation 结构的指针);参数说明:lpApplicationName:需要执行的可执行文件名或命令行调用...如果为NULL,则将使用lpCommandLine参数的文件名lpCommandLine:命令行参数,可以传递参数给可执行文件lpProcessAttributes:进程的安全属性。

20640

7.2 通过API创建新进程

进程窗口的大小和位置,输出、输入和错误信息的控制等,并且能够获取到新进程的标识符以及进程句柄。...同时CreateProcess()也具有更高的系统安全性。因此,在实际开发,开发人员往往使用 CreateProcess()函数进行进程控制、管理和处理。...其函数原型如下: BOOL CreateProcess( LPCSTR lpApplicationName, // 可执行文件名或命令行调用 LPSTR...LPPROCESS_INFORMATION lpProcessInformation // 指向 ProcessInformation 结构的指针 ); 参数说明: lpApplicationName:需要执行的可执行文件名或命令行调用...如果为NULL,则将使用lpCommandLine参数的文件名 lpCommandLine:命令行参数,可以传递参数给可执行文件 lpProcessAttributes:进程的安全属性。

17220
  • ShellExecute, WinExec, CreateProcess区别

    若用户机器安装了多个浏览器,则该函数将根据Windows 9x/NT注册表http协议处理程序(Protocols Handler)的设置确定启动哪个浏览器。   ...若用户机器安装了多个邮件客户程序,则该函数将根据Windows 9x/NT注册表mailto协议处理程序的设置确定启动哪个邮件客户程序。   ...如果文件名以一个点(.)结尾且没有扩展名,或文件名包含路径,.exe将不会被加到后面。如果文件名不包含路径,Windows将按照如下顺序寻找这个可执行文件:   1.当前应用程序的目录。   ...ExitProcess, ExitThread, CreateThread, CreateRemoteThread,当一个进程启动时(调用CreateProcess的结果)是在进程序列化进行的。...假设当前在C盘上的目录是\MSVC\MFC且有一个环境变量叫做C:,它的值是C:\MSVC\MFC,就像前面lpEnvironment中提到过的那样,这样的系统驱动器上的目录信息在CreateProcess

    94020

    从创建进程到进入main函数,发生了什么?

    这里的fork、exec系列函数,是操作系统提供给应用程序的API函数,在其内部最终都会通过系统调用,进入操作系统内核,通过内核的进程管理机制,完成一个进程的创建。...而要想子进程执行新的程序,在子进程还需要用到exec系列函数来实现对进程可执行程序的替换。 exec系列函数同样是系统调用的封装,通过调用它们,将进入内核sys_execve执行真正的工作。...另外需要提一下的是,在Linux上,除了ELF文件,还支持一些其他格式的可执行文件MS-DOS、COFF 除了二进制的可执行文件,还支持shell脚本,这个情况下将会将脚本解释器程序作为入口启动...首先是创建进程的环节,Windows系统将fork+exec两步合并了一步,通过CreateProcess系列函数一步到位,在其参数中指定子进程的可执行文件路径。...所以在Windows上,进程相关的工作准备就绪后,还需要单独创建一个参与内核调度的执行单元,也就是进程的第一个线程:主线程。当然,这个工作也封装在了CreateProcess系列函数中了。

    1.4K30

    CreateProcess 创建带命令行参数的进程时,报错或者提示内存位置无效的可能的一个原因

    微软在其C++编译器选项中提供了/GF开关,/GF打开时,程序中所有用到的常量字符串将只维护单一副本,且位于只读存储部分。在调用 CreateProcess时,开发人员应该打开/GF开关并使用缓冲区。...我们希望微软在未来版本的Windows中会改进CreateProcess,使其接受常量字符串作为命令行参数,并在其内部分配/释放临时缓冲区而不是让API调用做。...UNIDOE编码后调用其 Unicode版本,CreateProcess会把ANSI字符串转换为Unicode编码后放在临时缓冲区,并调用Unicode版的 CreateProcess,因此不会触发Access...(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); 额外说一点,我在做上述测试时发现,调用CreateProcess调用cmd.exe,我的程序没报错...将这些垃圾数据传递给CreateProcess可能导致无法预料的结果,为了让CreateProcess正常工作,你必须将STARTUPINFO(EX)没有用到的域清0。

    2.3K50

    WinExec、ShellExecute和CreateProcess

    有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcessCreateProcess因为使用复杂,比较少用。...当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。...若用户机器安装了多个浏览器,则该函数将根据Windows 9x/NT注册表http协议处理程序(Protocols Handler)的设置确定启动哪个浏览器。   ...若用户机器安装了多个邮件客户程序,则该函数将根据Windows 9x/NT注册表mailto协议处理程序的设置确定启动哪个邮件客户程序。   ...可以将ID发送到 其它进程,或使用句柄控制新进程。   ShellExecute和WinExec命令用于简单的作业。如果要完全控制一个新进程,就必须调用CreateProcess

    99620

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

    ,X他XX的,该死的硬件厂商竟然不提供接口函数,只提供一个EXE可执行文件-_-!...这样就需要我在程序里调用他的这个EXE可执行文件。...调用EXE文件,可以用WINEXEC()、SHELLEXECUTE()和CreateProcess()等函数来实现,我这里就用CreateProcess()调用。...实在没办法,我想在打开的时候不让用户看到这个执行文件:首先调用FINDWINDOW查找窗口的句柄,之后再用SendMessage()隐藏窗口,但是还是会有一瞬主窗口被显示出来的,或许你会说我BT吧,...上启动,而如果对其赋了一个Desktop的名称后,Process将在指定的Desktop上启动,恩,看来不错,就从它入手了; 首先,建立一个虚拟的Desktop。

    3.9K30

    Windows黑客编程技术详解 --第四章 木马启动技术(内含赠书福利)

    如果在lpCmdLine参数可执行文件的名称不包含目录路径,则系统将按以下顺序搜索可执行文件: 应用程序的目录、当前目录、Windows系统目录、Windows目录以及PATH环境变量列出的目录。...bInheritHandles [in] 如果此参数为TRUE,则调用进程的每个可继承句柄都将由新进程继承。如果该参数为FALSE,则不会继承句柄。...ShellExcute可通过Windows外壳打开任意文件,非可执行文件自动通过关联程序打开对应的可执行文件,区别不大,不过ShellExcute可以指定运行时的工作路径。...在Windows XP、Windows Server 2003,以及更老版本的Windows操作系统,服务和应用程序使用相同的会话(SESSION)运行,而这个会话是由第一个登录到控制台的用户启动的...PE结构使用导入表记录PE程序中所有引用的函数及其函数地址。在DLL映射到内存之后,需要根据导入表的导入模块和函数名称获取调用函数的地址。

    3.8K50

    windows提权系列上篇

    可信任服务路径 “Trusted Service Paths”漏洞是由系统的“CreateProcess”函数引起的,利用了windows文件路径解析的特性,并涉及了服务路径的文件/文件夹权限,存在缺陷的服务程序利用了属于可执行文件的文件...如果权限合适,我们可以上传恶意可执行文件。简单讲就是查找系统服务文件存在非引用路径。如果一个服务调用可执行文件,没有正确处理引用的全路径名,就可以利用这个漏洞。...系统服务的错误权限配置漏洞 Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。...所以如果一个低权限的用户对于此类系统服务调用可执行文件具有可写的权限,那么就可以将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。...这一点我们之前已经讨论过了,在Windows系统,当一个服务在Windows系统启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。

    91700

    创建线程的方式打开记事本

    今天操作系统课老师讲到进程,提出了一个有趣的小实验:能否以系统调用的方式利用 Windows 创建进程的系统调用函数来打开一个软件。...闲着蛋疼的我立马来了兴趣,姑且写一个玩玩( 头文件 :包含了 Windows API 的核心功能。...:包含了 C 标准输入输出函数的声明。 CreateThread CreateThread 是 Windows API 的一个函数,用于创建一个新的线程。...CreateProcess( NULL, // 指向可执行文件名的指针 (LPTSTR)appName, // 命令行参数...接下来调用 CreateProcess 函数用于创建一个新的进程,返回进程的句柄和线程的句柄。它的参数包括可执行文件名、命令行参数、进程句柄和线程句柄是否可继承等信息。

    26130

    14种DLL注入技术

    还有需要注意的是因为RtlCreateUserThread没有经过系统封装所以线程体必须自己调用ExitThread结束线程。...而由于这个Ime文件本质上只是个存放在C:\WINDOWS\system32目录下的特殊的DLL文件,因此我们可以利用这个特性,在Ime文件中使用LoadLibrary()函数待注入的DLL文件。...第七种 全局钩子注入 利用windows的消息机制,可以在事件发送到os之间设置一条钩链,钩取不同的消息,如以下代码,利用SetwindowsHookEx可以钩取一个键盘消息。.../article/details/103815868 注入实现见文末链接 第九种 注册表注入 REG注入原理是利用在Windows 系统,当REG以下键值存在有DLL文件路径时,会跟随EXE文件的启动加载这个...恶意软件调用SetThreadContext将entrypoint指向已编写的新代码段。最后,恶意软件通过调用ResumeThread恢复挂起的线程。

    4.1K41

    操作系统课设详细解答

    三、总体设计 1.背景知识 Windows 所创建的每个进程都从调用 CreateProcess() API 函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。...步骤 4:将清单 1-1 所示的程序清单复制到新创建的 C/C++源程序。编译成可执行文件。...图1-1 一个简单的 Windows 控制台应用程序输出结果 (2)创建进程 本实验显示了创建子进程的基本框架。该程序只是再一次地启动自身,显示它的系统进程 ID和它在进程列表的位置。...步骤 2:在“命令提示符”窗口运行步骤 1 中生成的可执行文件,列出运行结果。按下ctrl+alt+del,调用 windows 的任务管理器,记录进程相关的行为属性。...六、小结与心得体会 通过这个实验加深了我对操作系统的进程概念的了解,理解 Windows 进程的“一生”所有进程都是以调用CreateProcess()API函数开始的ExitProcess函数结束的。

    1K20

    6.3 应用动态内存补丁

    如果lpApplicationName为NULL,那么应该将可执行文件的名称包含在lpCommandLine所指向的字符串。...CreateProcess 函数返回一个布尔值,表示函数的调用是否成功。如果成功,则返回值为非零,否则返回值为零,并通过调用GetLastError函数获取错误代码。...为了使得新进程与父进程独立运行,一般需要用到独立的进程空间和线程,这通常需要在创建新进程之前调用一些Windows系统API函数,VirtualAlloc、CreateThread等。...CheckMemory函数用于验证此片内存区域是否时我们需要修改的,如果验证一致则通过调用WriteMemory函数向该内存写出替换一段0x90, 0x90, 0x90, 0x90, 0x90的指令,...读者可自行跳转到0x0402507处的内存区域,观察替换效果,当替换成功后,其内存输出效果如下图所示; 本文作者: 王瑞 本文链接: https://www.lyshark.com/post/fe53d98c.html

    18720

    Win32 使用 CreateProcess 方法让任务管理器里的命令行不显示应用文件路径

    应用在任务管理器的命令行里面显示的参数居然是 C:\Windows\notepad.exe 而不是具体的 SvcawgewawkuHenaynairbelhurno 应用 C:\lindexi\Code...这是使用了 CreateProcess 方法的一个过时用法,那就是在此方法的 lpApplicationName 参数里面传入将要启动的进程路径,在第二个参数 lpCommandLine 里面传入的是...C:\Windows\notepad.exe 命令行参数 以下是 CreateProcess 方法签名 BOOL CreateProcessW ( [in, optional] LPCWSTR...先新建一个 dotnet 6 控制台程序,为了方便 PInvoke 调用 Win32 的 CreateProcess 函数,根据 dotnet 使用 CsWin32 库简化 Win32 函数调用逻辑...; 接下来创建一个有趣的命令行参数,例如就是记事本的路径 var arguments = "\"C:\\windows\\notepad.exe\""; 接着调用 CreateProcess 函数,如以下代码

    86520

    6.3 应用动态内存补丁

    如果lpApplicationName为NULL,那么应该将可执行文件的名称包含在lpCommandLine所指向的字符串。...CreateProcess 函数返回一个布尔值,表示函数的调用是否成功。如果成功,则返回值为非零,否则返回值为零,并通过调用GetLastError函数获取错误代码。...为了使得新进程与父进程独立运行,一般需要用到独立的进程空间和线程,这通常需要在创建新进程之前调用一些Windows系统API函数,VirtualAlloc、CreateThread等。...CheckMemory函数用于验证此片内存区域是否时我们需要修改的,如果验证一致则通过调用WriteMemory函数向该内存写出替换一段0x90, 0x90, 0x90, 0x90, 0x90的指令,...读者可自行跳转到0x0402507处的内存区域,观察替换效果,当替换成功后,其内存输出效果如下图所示;图片本文作者: 王瑞本文链接: https://www.lyshark.com/post/fe53d98c.html

    22430
    领券