windows API进程创建(4)
程序员文章站
2022-03-05 09:53:59
...
windows 创建进程时的相关基础API
进程句柄与进程ID的区别
- 句柄是每一个进程内核对象所存储的句柄表的索引值,为进程内核对象私有,同样的内核对象对于不同的进程内核对象句柄值不同。
- 进程ID(pid,本质上就是全局句柄表的索引值),全局句柄表包含了所有正在运行的进程和线程。
- 句柄只在某个进程内部有效,进程ID是全局的,对所有进程有效
- 对于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
上一篇: Waymo获准在加州用自动驾驶车辆载客:需配备安全员
下一篇: 网络爬虫