OpenProcess vs CreateProcess

OpenProcess vs CreateProcess

本文关键字:CreateProcess vs OpenProcess      更新时间:2023-10-16

有人能向我解释一下两者之间的区别吗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进程安全和访问权限