很久以前看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) 图形线程的初始化相关推荐

  1. 【Android 异步操作】线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTask 使用线程池示例 )

    文章目录 一.线程池简介 二.线程池初始化方法简介 三.线程池使用示例 一.线程池简介 线程池一般是实现了 ExecutorService 接口的类 , 一般使用 ThreadPoolExecutor ...

  2. 【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )

    文章目录 I 线程创建方法 II 线程执行函数 III 线程标识符 IV 线程属性 V 线程属性 1 ( 分离线程 | 非分离线程 ) VI 线程属性 2 ( 线程调度策略 ) VII 线程属性 3 ...

  3. 实现线程栈初始化(RTT)

    节选自 RTT编程指南; 在动态创建线程和初始化线程的时候,会使用到内部的线程初始化函数 _rt_thread_init(), _rt_thread_init() 函数会调用栈初始化函数 rt_hw_ ...

  4. C++11中静态局部变量初始化的线程安全性

    标准关于局部静态变量初始化,有这么几点要求: 变量在代码第一次执行到变量声明的地方时初始化. 初始化过程中发生异常的话视为未完成初始化,未完成初始化的话,需要下次有代码执行到相同位置时再次初始化. 在 ...

  5. undertow初始化线程资源解析

    文章目录 1. 初始化 2. 线程创建逻辑 3. 调整线程数量 4. Worker线程和I/O线程 5. Accept线程 1. 初始化 首先我们先明确,当没有任何设置的情况下undertow默认会获 ...

  6. 探索未知种族之osg类生物---器官初始化四

    上一节我们对完成了对osg生物内部非常重要器官graphicsContext的初始化工作.这样就可保证我们场景中至少有一个graphicContext存在,不至于刚出生就面临夭折.我们根据上一节中os ...

  7. 类的初始化列表_探索未知种族之osg类生物---渲染遍历之draw函数二

    我们今天今天真是进入SceneView::draw()函数. 1.判断主相机是否为隐藏状态也就是(camera->getNodeMask()==0),隐藏状态就会退出这个draw函数. 2.开始 ...

  8. 【微软漏洞分析】MS15-023 Win32k 特权提升漏洞 - CVE-2015-0078 + 绕过(CVE-2015-2527 in MS15-097)

    目录 MS15-023 CVE-2015-0078 微软漏洞描述 漏洞作者分析 补丁分析 win32k.sys NtUserGetClipboardAccessToken 重点分析 PoC分析 MS1 ...

  9. WMI技术介绍和应用——查询正在运行的线程信息

    本文使用了<WMI技术介绍和应用--使用VC编写一个半同步查询WMI服务的类>中代码做为基础. 一般来说,如果试图枚举系统中的线程.需要先枚举系统中的进程,然后再枚举每个进程中的线程.而W ...

最新文章

  1. 合理规划您的硬盘分区
  2. Zookeeper集群搭建分布式
  3. 我如何看Spring5?
  4. leetcode 850. Rectangle Area II | 850. 矩形面积 II(递归分割未重叠矩形)
  5. golang orm对比
  6. 【CV】MobileNetV2:具有倒置残差和线性瓶颈的 CNN 骨干网络
  7. 回溯法之符号三角形问题
  8. Oracle的SQL注入
  9. 京东商品主图怎么保存?如何正确的保存到原图?
  10. js动态添加修改删除元素
  11. 小米MIUI手机adb连接教程
  12. svg中 path标签的d属性
  13. 设计模式、架构、框架
  14. PyTorch中的叶节点、中间节点、梯度计算等知识点总结
  15. Windows SubSystem for Linux(WSL)设置默认和设置默认登陆用户
  16. 最适合微商的直播平台——微信直播
  17. 【汇总】行为识别、时序行为检测、弱监督行为检测、时空行为定位论文代码(持续更新!!!)
  18. 梅科尔工作室-赵凌志-鸿蒙笔记4
  19. 惠普dv2000系列笔记本(v3000系列适用)图文拆机教程
  20. VMware 安装GHOST系统

热门文章

  1. 移动服务器光信号亮红灯,移动网光信号闪红灯是怎么回事
  2. Windows编程实现俄罗斯方块
  3. 美国公募基金业60年来的十大巨变,预示了中国基金业的未来
  4. G-SHOCK时间校准
  5. 4个经典案例:国外社交媒体是这样病毒性营销的
  6. ae渲染存在偏移_(图文+视频)C4D+AE野教程:一起来制作一个MG方块动画吧
  7. 2022年中式烹调师(初级)模拟试题及中式烹调师(初级)模拟考试
  8. 视频教程-Springboot+Vue前后的分离整合项目实战-Java
  9. 大豆技术面分析_大豆高产栽培关键技术分析,简单、明了轻松学会
  10. 8个灯以此点亮c语言程序,单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)...