Win32k(1) 图形线程的初始化

很久以前看ROS的笔记,跟windows不一样的地方不少,最近没时间看这块了= = 先贴上来备份


第一部分 图形线程的初始化

综述一下——

 

图形通信对象(user object)以线程为单位。这个线程是图形线程,调用表就是ssdt shadow,包含了图形系统调用,三环由user32提供,0环由win32k支持。

 

线程包含窗口,桌面,普通窗口,各种控件,都是窗口。窗口有一个wndproc,用来相应各种消息。

 

线程有若干个消息队列,分别负责接收和发送同步send消息,异步post消息,ROS中有七个。

 

线程内的窗口公用一组消息队列,消息本身知名发送到哪个窗口。

 

图形对象有这么几个元素,有所属关系?这点纯YY没细看:

windows工作站>桌面>一般窗口

 

窗口是窗口类的成员,窗口类是创建窗口的模板。之前说了窗口属于线程,而窗口类处于进程。

 

一.PsConvertToGuiThread

    更换更大的内核栈

 

    调用PspW32ProcessCalloutPspW32ThreadCallout创建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;

 

 

阅读全文
类别: 内核  查看评论

转载于:https://www.cnblogs.com/retme/archive/2012/03/26/2494893.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值