线程,进程,模块

本文介绍了操作系统中的线程和进程概念,线程是操作系统中的内核对象,而进程是对一组线程及相关资源的封装。模块是运行中的程序,模块句柄是其在内存空间的基址。内容涵盖进程创建、终结,遍历进程和模块,线程的创建与调度,以及句柄的使用,包括真句柄和伪句柄的区别。
摘要由CSDN通过智能技术生成

1.什么是线程?
答:一个线程就是操作系统的一个内核对象,在Windows操作系统内核中没有进程的概念,只有线程的概念,进程只不过是在逻辑上对一组线程及相关的资源进行的一种封装。
2.什么是进程?
答:进程是一个正在运行的程序,有一个虚拟的地址空间(4gb),地址空间有加载的exe,同时也有程序运行时所必须的dll,进程内核对象,至少一个运行的线程。
3.什么是模块,模块句柄的本质是什么?
答:模块是在内核控件运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是其代码可以在运行是链接到系统中作为内核的一部分运行或从内核中取下,可以动态扩展内核的功能,模块句柄的本质是模块加载进内存空间的基址。


对于内核对象句柄来说,进程中有一个句柄,不同进程中的句柄表存储的相同的句柄值代表的不是一个内核对象,句柄内核对象在进程句柄表中的索引,不同进程的相同句柄指向的不一定是同一个对象。

在不同进程中访问同一个内核对象:
1.由父进程继承给子进程。注意:即便继承了句柄,子进程却不知道自己继承了谁,句柄是什么,这只能由父进程通过进程间的通讯的方式告诉它。
2.在进程A中创建内核对象的时候,给内核对象命名,在进程B中,通过名字打开内核对象,假如此内核对象不能命名或者没有一个标识,那么就无法使用这种方式
3.使用DUplicateHandle()函数,将一个句柄从一个进程传递给另一个进程。

创建进程:

#include <windows.h>
int main()
{
    STARTUPINFO st = {};
    PROCESS_INFORMATION pi = {};
    CreateProcess(
        L"D:\\Program Files\\Tencent\\QQ\\Bin\\QQScLauncher.exe",//路径
        NULL,                             //命令
        NULL,                             //进程的安全属性
        NULL,                             //线程的安全属性
        FALSE,                            //句柄是否继承
        NULL,                             //子进程创建方式
        NULL,                             //环境
        NULL,                             //程序的运行目录
        &st,                              //启动信息
        &pi                               //进程信息
    );
    return 0;
}

结束进程

void KillProcess()
{
    //1 打开进程
    HANDLE hProcess = OpenProcess(
        PROCESS_
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值