Win32k(1) 图形线程的初始化
很久以前看ROS的笔记,跟windows不一样的地方不少,最近没时间看这块了= = 先贴上来备份
第一部分 图形线程的初始化
综述一下——
图形通信对象(user object)以线程为单位。这个线程是图形线程,调用表就是ssdt shadow,包含了图形系统调用,三环由user32提供,0环由win32k支持。
线程包含窗口,桌面,普通窗口,各种控件,都是窗口。窗口有一个wndproc,用来相应各种消息。
线程有若干个消息队列,分别负责接收和发送同步send消息,异步post消息,ROS中有七个。
线程内的窗口公用一组消息队列,消息本身知名发送到哪个窗口。
图形对象有这么几个元素,有所属关系?这点纯YY没细看:
windows工作站>桌面>一般窗口
窗口是窗口类的成员,窗口类是创建窗口的模板。之前说了窗口属于线程,而窗口类处于进程。
一.PsConvertToGuiThread
更换更大的内核栈
调用PspW32ProcessCallout,PspW32ThreadCallout创建ethread.W32PROCESS ethread.W32THREAD结构
调用表切换到shadow
二.Win32kProcessCallback 初始化
1.分配eprocess->Win32Process
这个结构是PROCESSINFO,ROS自己定义的
typedefstruct_PROCESSINFO
{
W32PROCESS;PCLS pclsPrivateList;PCLS pclsPublicList;
DWORDdwRegisteredClasses;
/* ReactOS */
LIST_ENTRYClassList;
LIST_ENTRYMenuListHead;FAST_MUTEX PrivateFontListLock;
LIST_ENTRYPrivateFontListHead;FAST_MUTEX DriverObjListLock;
LIST_ENTRYDriverObjListHead;
struct_KBL*KeyboardLayout; //THREADINFO only
W32HEAP_USER_MAPPINGHeapMappings;
}PROCESSINFO;
2、映射MmMapViewOfSection(GlobalUserHeapSection
全局的图形对象句柄表(跟一下GdiQueryTable可以知道这个表的位置),存储于Win32Process.HeapMappings
也存储于Process->Peb->GdiSharedHandleTable
PS:这个句柄表 WINDOWS下这个结构是
typedefstruct _GDITableCell
{void * pKernel;unsignedshort _nProcess; // NT/2000 switch orderfor _nProcess, _nCountunsignedshort _nCount;unsignedshort nUpper;unsignedshort nType;void * pUser;
} GDITableCell, *PGDITableCell;
除了gdi句柄表,还有一个全局句柄表是user句柄表,后面遍历全局钩子的时候会看到。
三.Win32kThreadCallback
分配Win32Thread
指定线程的桌面和工作站,消息队列struct_USER_MESSAGE_QUEUE* MessageQueue;
,键盘布局等
PS:
最后贴一下消息队列的结构
typedefstruct _tagTHREADINFO {
/*0x0BC*/ struct _tagQ* pq;// input queue
/*0x0E0*/ struct _tagSMS* psmsSent;// send queue(sent)
/*0x0E4*/ struct _tagSMS* psmsCurrent;// send queue(current
/*0x0E8*/ struct _tagSMS* psmsReceiveList;// sendqueue (received)
/*0x174*/ struct _tagMLISTmlPost;// post queue
} tagTHREADINFO, *PtagTHREADINFO;
Win32k(1) 图形线程的初始化相关推荐
- 【Android 异步操作】线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTask 使用线程池示例 )
文章目录 一.线程池简介 二.线程池初始化方法简介 三.线程池使用示例 一.线程池简介 线程池一般是实现了 ExecutorService 接口的类 , 一般使用 ThreadPoolExecutor ...
- 【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )
文章目录 I 线程创建方法 II 线程执行函数 III 线程标识符 IV 线程属性 V 线程属性 1 ( 分离线程 | 非分离线程 ) VI 线程属性 2 ( 线程调度策略 ) VII 线程属性 3 ...
- 实现线程栈初始化(RTT)
节选自 RTT编程指南; 在动态创建线程和初始化线程的时候,会使用到内部的线程初始化函数 _rt_thread_init(), _rt_thread_init() 函数会调用栈初始化函数 rt_hw_ ...
- C++11中静态局部变量初始化的线程安全性
标准关于局部静态变量初始化,有这么几点要求: 变量在代码第一次执行到变量声明的地方时初始化. 初始化过程中发生异常的话视为未完成初始化,未完成初始化的话,需要下次有代码执行到相同位置时再次初始化. 在 ...
- undertow初始化线程资源解析
文章目录 1. 初始化 2. 线程创建逻辑 3. 调整线程数量 4. Worker线程和I/O线程 5. Accept线程 1. 初始化 首先我们先明确,当没有任何设置的情况下undertow默认会获 ...
- 探索未知种族之osg类生物---器官初始化四
上一节我们对完成了对osg生物内部非常重要器官graphicsContext的初始化工作.这样就可保证我们场景中至少有一个graphicContext存在,不至于刚出生就面临夭折.我们根据上一节中os ...
- 类的初始化列表_探索未知种族之osg类生物---渲染遍历之draw函数二
我们今天今天真是进入SceneView::draw()函数. 1.判断主相机是否为隐藏状态也就是(camera->getNodeMask()==0),隐藏状态就会退出这个draw函数. 2.开始 ...
- 【微软漏洞分析】MS15-023 Win32k 特权提升漏洞 - CVE-2015-0078 + 绕过(CVE-2015-2527 in MS15-097)
目录 MS15-023 CVE-2015-0078 微软漏洞描述 漏洞作者分析 补丁分析 win32k.sys NtUserGetClipboardAccessToken 重点分析 PoC分析 MS1 ...
- WMI技术介绍和应用——查询正在运行的线程信息
本文使用了<WMI技术介绍和应用--使用VC编写一个半同步查询WMI服务的类>中代码做为基础. 一般来说,如果试图枚举系统中的线程.需要先枚举系统中的进程,然后再枚举每个进程中的线程.而W ...
最新文章
- 合理规划您的硬盘分区
- Zookeeper集群搭建分布式
- 我如何看Spring5?
- leetcode 850. Rectangle Area II | 850. 矩形面积 II(递归分割未重叠矩形)
- golang orm对比
- 【CV】MobileNetV2:具有倒置残差和线性瓶颈的 CNN 骨干网络
- 回溯法之符号三角形问题
- Oracle的SQL注入
- 京东商品主图怎么保存?如何正确的保存到原图?
- js动态添加修改删除元素
- 小米MIUI手机adb连接教程
- svg中 path标签的d属性
- 设计模式、架构、框架
- PyTorch中的叶节点、中间节点、梯度计算等知识点总结
- Windows SubSystem for Linux(WSL)设置默认和设置默认登陆用户
- 最适合微商的直播平台——微信直播
- 【汇总】行为识别、时序行为检测、弱监督行为检测、时空行为定位论文代码(持续更新!!!)
- 梅科尔工作室-赵凌志-鸿蒙笔记4
- 惠普dv2000系列笔记本(v3000系列适用)图文拆机教程
- VMware 安装GHOST系统
热门文章
- 移动服务器光信号亮红灯,移动网光信号闪红灯是怎么回事
- Windows编程实现俄罗斯方块
- 美国公募基金业60年来的十大巨变,预示了中国基金业的未来
- G-SHOCK时间校准
- 4个经典案例:国外社交媒体是这样病毒性营销的
- ae渲染存在偏移_(图文+视频)C4D+AE野教程:一起来制作一个MG方块动画吧
- 2022年中式烹调师(初级)模拟试题及中式烹调师(初级)模拟考试
- 视频教程-Springboot+Vue前后的分离整合项目实战-Java
- 大豆技术面分析_大豆高产栽培关键技术分析,简单、明了轻松学会
- 8个灯以此点亮c语言程序,单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)...