windows API进程创建(4)

windows 创建进程时的相关基础API

进程句柄与进程ID的区别
  1. 句柄是每一个进程内核对象所存储的句柄表的索引值,为进程内核对象私有,同样的内核对象对于不同的进程内核对象句柄值不同。
  2. 进程ID(pid,本质上就是全局句柄表的索引值),全局句柄表包含了所有正在运行的进程和线程。
  3. 句柄只在某个进程内部有效,进程ID是全局的,对所有进程有效
  4. 对于PROCESS_INFORMATION结构体
typedef struct _PROCESS_INFORMATION {
    HANDLE hProcess;
    HANDLE hThread;
    DWORD dwProcessId;
    DWORD dwThreadId;
} PROCESS_INFORMATION,
 *PPROCESS_INFORMATION,
  *LPPROCESS_INFORMATION;

hProcess表示新创建进程对于父进程的句柄,
dwProcessID表示新创建的进程对于全局句柄表的句柄(也就是PID)
线程同理

举例:要想用终止一个进程,比如一个notepad程序,只需打开任务管理器或用spy查找到它的PID,然后执行下面简单的代码即可。

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,要终止的进程的PID);
TerminateProcess(hProcess,1);`

对代码的分析:
要终止一个进程,就要调用TerminateProcess函数,
BOOL WINAPI TerminateProcess
(
In HANDLE hProcess,
In UINT uExitCode,
);
但是TerminateProcess函数只能以句柄为参数以关闭进程,而句柄又是每个进程独立拥有的,所以只能通过OpenProcess()函数来通过PID使想要终止的进程与该进程建立联系,使该进程获得想要终止的进程的句柄.
HANDLE WINAPI OpenProcess
(
In DWORD dwDesiredAccess,
In BOOL bInheritHandle,
In DWORD dwProcessId,
);
第一个参数表示想对打开的进程拥有的权力(PROCESS_ALL_ACCESS表示拥有全部权力)
第二个参数表示openProcess是否要继承父进程的句柄表
第三个参数表示想打开的进程的PID

发布了7 篇原创文章 · 获赞 0 · 访问量 613

猜你喜欢

转载自blog.csdn.net/qq_42055033/article/details/103850161