很久以前看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. cubemx pwm dma_红米K30S至尊纪念版翻车?被曝虽是LDC屏,却是PWM调光
  2. 求助马斯克实现载人飞行,NASA省了近300亿美元
  3. 程序人生 Hello‘s P2P
  4. 前端之登录注册页面案例
  5. 【Linux】一步一步学Linux——objdump命令(254)
  6. Android开发(五)——计时器
  7. vue实现可编辑的文字_苹果还自带文字转语音,只要一键按下便可实现,今天分享给大家...
  8. 《Python Cookbook 3rd》笔记(5.14):忽略文件名编码
  9. linux编程排序,Linux下简单的c编程——选择法排序
  10. 华为一季度每天入账20亿,首次披露云业务用户超100万
  11. 人性歪曲的心理调适 一【浮躁心理、偏激心理、自卑心理、自杀心理、愤怒心理】...
  12. uva 12086 树状数组
  13. grid 安装失败 卸载grid 实操
  14. Hbase与Hadoop版本对应
  15. 《书生云超融合一体机》T-CAM评审会召开
  16. 腾讯云表格识别Python-SDK使用
  17. 达观数据荣获认知图谱产业建设“创新突破奖”,并与图谱知名专家共同探讨工业知识图谱应用落地
  18. 测试过程中遇到的问题总结
  19. 罗技k380键盘-数字键上的字符对不上怎么办?
  20. 4.python 系统批量运维管理器之paramiko模块

热门文章

  1. 吉他学习教程1 之 认识吉他
  2. 新媒体运营教程:如何设计SEM账户结构!
  3. webpy中使用session
  4. Rapid Object Detection using a Boosted Cascade of Simple Features 部分翻译
  5. 阿里云备案审核一般多久能过?域名备案需要几天?
  6. 数据预处理(纯干货,适合小白学习)
  7. 5V变3.3V好用的电源芯片
  8. 复盘2018,展望2019(上)
  9. 郝健: github多人协作项目开发实操笔记
  10. linux下的压缩工具下载,linux 各压缩工具