OpenProcess vs CreateProcess
OpenProcess vs CreateProcess
有人能向我解释一下两者之间的区别吗OpenProcess和CreateProcess是?
(我正试图将DLL注入程序中,但我不知道该使用哪一个。)
- 向
OpenProcess
传递现有进程的进程ID,并返回该进程的进程句柄 CreateProcess
创建了一个全新的流程,为该新流程返回一个句柄(以及其他内容)
如果您想注入到已经在运行的进程中,那么您将需要OpenProcess
。
关于将.dll注入另一个进程,OpenProcess和CreateProcess之间有几个主要的好处和区别。
首先是时机。您可以在目标进程有机会执行其自己的任何代码之前注入dll,方法是在挂起状态下创建进程(设置了CREATE_SSUSPENDED(0x00000004)的dwCreationFlags)。一旦你准备好执行这个过程,不要忘记继续执行它。
第二是特权。CreateProcess返回的进程句柄自动具有process_ALL_ACCESS,而无需首先设置SeDebugPrivilege。OpenProcess确实要求您的程序在被允许使用PROCESS_ALL_ACCESS标志之前获得此权限。
其他一些需要记住的小事:不能对正在运行的进程调用CreateProcess,但如果出于任何原因需要,可以始终在CreateProcess之后调用OpenProcess。
CreateProcess要求您对process_INFORMATION中返回的进程和线程句柄都进行CloseHandle,其中OpenProcess只要求您对其返回值执行CloseHandle(没有打开线程句柄)。
如果出于任何原因(不太可能)需要更改环境,则必须使用CreateProcess。
进一步的阅读可以找到:CreateProcessOpenProcess进程安全和访问权限
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 调用CreateProcess()并获取字符串的返回值
- 完美前进使用 std::forward vs RefRefCast
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- consteval wrapper vs. source_location
- CreateProcess vs. CreateFile EXE
- OpenProcess vs CreateProcess