欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

windows API进程创建(4)

程序员文章站 2022-03-05 09:53:59
...

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

相关标签: windows API