OpenProcess与CreateProcess

时间:2015-06-26 12:06:49

标签: c++ winapi

有人可以向我解释一下有什么不同之处:
OpenProcess和CreatProcess。

(我正在尝试将DLL注入程序,我不知道使用哪一个。)

2 个答案:

答案 0 :(得分:4)

  • OpenProcess传递现有流程的流程ID,并返回该流程的流程句柄。
  • CreateProcess创建了一个全新的流程,返回了新流程的句柄(以及其他内容)。

如果您要注入已经投放的流程,则需要OpenProcess

答案 1 :(得分:0)

相对于将.dll注入另一个进程,OpenProcess和CreateProcess之间有两个主要优点和不同之处。

首先是时间安排。通过在挂起状态(设置了CREATE_SUSPENDED(0x00000004)的dwCreationFlags)中创建进程,您可以在目标进程有机会执行其自己的任何代码之前注入dll。准备执行该过程后,不要忘记恢复该过程。

第二个是特权。 CreateProcess返回的进程句柄自动具有PROCESS_ALL_ACCESS,而无需先设置SeDebugPrivilege。 OpenProcess确实要求您的程序先获得此特权,然后才能使用PROCESS_ALL_ACCESS标志。

其他一些小事情要记住: 无法在正在运行的进程上调用CreateProcess,但是如果出于某种原因需要,您始终可以在CreateProcess之后调用OpenProcess。

CreateProcess要求您同时关闭在PROCESS_INFORMATION中返回的进程和线程句柄,而OpenProcess仅要求您对其返回值(没有打开线程句柄)使用CloseHandle。

如果出于某种原因(不太可能)需要更改环境,则必须使用CreateProcess。

进一步的阅读可以发现: CreateProcess OpenProcess process-security-and-access-rights