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, _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;


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值