Win32k(1) 图形线程的初始化
来源:互联网 发布:notepad pro mac 编辑:程序博客网 时间:2024/06/06 00:35
很久以前看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 onlyW32HEAP_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, _nCount unsignedshort _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) 图形线程的初始化
- Win32K里的死循环
- (1)C语言图形模式的初始化和关闭
- Win32k(2) 报文驱动的通信机制
- ★图形模式的初始化★
- 线程安全的延迟初始化
- java线程和线程组的初始化
- win32k.sys驱动的注入与利用漏洞
- Win32k syscall
- initgraph:初始化图形系统
- Android 图形驱动初始化
- 解决"OCC图形设备初始化失败"的方法
- 考虑可能的线程冲突【尤其是初始化、反初始化】
- C下图形模式的初始化、独立图形程序的建立
- 关于dos下图形编程的图形初始化容易出现的几个问题!
- 线程的初始化到运行过程
- 线程安全的延迟初始化方式
- 安全的初始化 mysql线程链接
- 重命名索引
- ios开发之从输入流里读入数据
- 第十六周实验报告3
- 重建索引
- iocomp winform 类型的使用笔记
- Win32k(1) 图形线程的初始化
- Win32k(2) 报文驱动的通信机制
- 删除索引
- 在水晶报表中怎样显示页合计
- WebApplication(Web应用程序)和WebSite(网站)的区别
- 注册消息码
- Win32k(3) R0 to R3,键盘鼠标输入
- Xcode 开发 控件如何和代码配合使用
- Get和post的区别