消息队列存储在0环
KThread - WIn32Thread(图形界面有值)->包含消息队列
Thread.ServiceTable-KeServiceDescriptorTable->服务号大于100时 访问win32K.sys ->PsConvertTOGuiTHread -
扩充内核栈 64K大内核栈 普通线程内核栈只有12K
创建消息队列的结构体 挂到KTHread上
Thread.ServiceTable->KeServiceDescriptorTableShadow 包含ssdt和win32k两张表
把内存数据映射到本进程空间
win32k --监控鼠标线程 监控键盘进程
内核_WINDOW_OBJECT PTHREADINFO WNDPROC
窗口句柄是全局的 一个线程可有多个窗口共享消息队列 一个窗口只能对应一个线程
消息队列的结构 USERMESSAGEQUEUE
SendMessageListHead
PostMessageListHead
HardwareListHead
NotifyListHead
DIspathingListHead
LocalDispathListHead
MouseMoveMessage
GetMessage ->直接处理SendMessageListHead的消息 KeUserModeCallBack
取出其他队列的消息 -》DisPatchMessage ->0环根据句柄找到窗口回调-》 KeUserModeCallBack
TranslateMessage 仅仅转换加工键盘消息
0环-》KeUserModeCallBack 窗口创建时
FS:[0] TEB+30 PEB + 2c 回调函数地址表