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 ...
最新文章
- cubemx pwm dma_红米K30S至尊纪念版翻车?被曝虽是LDC屏,却是PWM调光
- 求助马斯克实现载人飞行,NASA省了近300亿美元
- 程序人生 Hello‘s P2P
- 前端之登录注册页面案例
- 【Linux】一步一步学Linux——objdump命令(254)
- Android开发(五)——计时器
- vue实现可编辑的文字_苹果还自带文字转语音,只要一键按下便可实现,今天分享给大家...
- 《Python Cookbook 3rd》笔记(5.14):忽略文件名编码
- linux编程排序,Linux下简单的c编程——选择法排序
- 华为一季度每天入账20亿,首次披露云业务用户超100万
- 人性歪曲的心理调适 一【浮躁心理、偏激心理、自卑心理、自杀心理、愤怒心理】...
- uva 12086 树状数组
- grid 安装失败 卸载grid 实操
- Hbase与Hadoop版本对应
- 《书生云超融合一体机》T-CAM评审会召开
- 腾讯云表格识别Python-SDK使用
- 达观数据荣获认知图谱产业建设“创新突破奖”,并与图谱知名专家共同探讨工业知识图谱应用落地
- 测试过程中遇到的问题总结
- 罗技k380键盘-数字键上的字符对不上怎么办?
- 4.python 系统批量运维管理器之paramiko模块
热门文章
- 吉他学习教程1 之 认识吉他
- 新媒体运营教程:如何设计SEM账户结构!
- webpy中使用session
- Rapid Object Detection using a Boosted Cascade of Simple Features 部分翻译
- 阿里云备案审核一般多久能过?域名备案需要几天?
- 数据预处理(纯干货,适合小白学习)
- 5V变3.3V好用的电源芯片
- 复盘2018,展望2019(上)
- 郝健: github多人协作项目开发实操笔记
- linux下的压缩工具下载,linux 各压缩工具