WIN32之消息队列
2024-09-02 14:54:29
0x01. 什么是消息?
当我们点击鼠标的时候,或者当我们按下键盘的时候,操作系统都要把这些动作记录下来,存储到结构体中,这个结构体就是 消息
比如我们点击运行程序,是通过消息队列获取,通过explorer.exe创建进程,运行程序,然后进程中至少有一个线程。这就是一个
程序执行运行的流程,我们电脑都是由方块组成的,所以它这边会获取坐标,我们想移动到哪,都会有一个坐标,这个看分辨率
0x02. 消息队列:每个线程只有一个消息队列
因为我们没进0环去看,所以我们就看这张图,在之前就讲了进程和线程,所以了解起来比较简单
进程、线程都会在内核中有个结构体,然后这张图左边是用户层,右边内核层
假设进程A有两线程,然后我们点击的消息,都是存储在线程的,所以消息队列是和线程相关,消息队列和线程是 1 对 1的关系,2个线程
就两个消息队列
比如我们点击个程序,我们要退出,首先是操作系统捕获,然后把捕捉的动作发送到线程里面的消息队列里,然后执行
0x03. 窗口与线程
比如我们在这点击这个 X,为什么会退出呢?而不是别的程序做出反应呢?
我们先点击了这个 X,操作系统捕获到了你这个动作,然后会把这个动作封装到结构体里面,操作系统在底层会遍历
所有窗口列表,看要给谁。最后找到了这个对应的窗口对象了,知道要给这个 shellcode.exe。我们就要找到这个窗口对象
对应的线程里,然后存储到消息队列中
windows遍历窗口对象,通过窗口对象里面的成员找到线程对象,找到线程对象后因为到线程里面也有一个消息队列
这就是一个消息的流程,一个线程可以有很多窗口,但是还是会存储到消息队列里面的
最新文章
- CSS3魔法堂:背景渐变(Gradient)
- 51nod 1297 管理二叉树
- C++实现日期类(Date类)
- 通过注册表查找oracle_home的位置
- 【noip模拟】考试总结
- C#关于编码、解码相关问题
- 使用APPLICATION制作缓存,转存一下,有一段写的还可以。
- Flex 事件机制
- 小谷的战斗Jquery(三)--水平和垂直菜单
- Windows下C语言的Socket编程例子(TCP和UDP)
- java 集合中将元素倒序排列
- htmlunit 导致高cup占用的坑
- 3.复杂的viewpager
- 给Ubuntu18.04安装mac os主题<;转载>;
- Java 获取并计算程序执行时间
- java框架---->;Xstream的使用(一)
- List的定制排序 包括使用lambda表达式来实现的方法
- C# 时间戳与当前时间互相转换
- cobbler上部署centos系统修改网卡地址成eth0
- FactoryBean