首页
社区
课程
招聘
[原创]白话windows之 会话、工作站、桌面、窗口之间的关系
发表于: 2013-6-8 22:51 30761

[原创]白话windows之 会话、工作站、桌面、窗口之间的关系

2013-6-8 22:51
30761
收藏
免费 10
支持
分享
最新回复 (47)
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
26
你说system是系统内核本身,我就越来越糊涂了。
虽说是0号进程(空闲进程),实际上存在Kprocess,不像是虚拟的。
不同点:相对system权限来说,这个R3被拒绝访问,线程更多,无分页内存。
相同点:有ntkrnlpa(windbg看到的是另一个)的线程,看起来更像是寄生的。
2013-6-12 07:27
0
雪    币: 4691
活跃值: (4067)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
楼主整理的挺好的,辛苦啦
2013-6-12 08:26
0
雪    币: 541
活跃值: (694)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
28
0号进程管理0号线程的。每个Cpu都有一个0号线程,0号线程是空闲线程,当Cpu没有其他线程需要运行的时候,就会让0号线程运行。这也说明了为什么0号进程显示的Cpu占用率代表Cpu空闲率了。
(0号进程是有EPROCESS的,只是没法通过Pid找到它)

另外线程问题,内核线程都属于system进程的(除了0号线程)。
为什么说system是系统本身呢?有一下几点证明:
1. system进程是没有实体的,并且从字面上和对该进程的描述(NT Kernel & System)上可以说明。
2. system没有用户态模式,system是一个系统内核进程。全系统只有两个:Idle和system。
3. 所有内核线程都归system管理

分页内存和未分页内存是由内核中全局变量指定的,在system进程信息中体现不出来(上一个跟帖说的有错误啊,不好意思~)

不知道能否解决你的疑惑
2013-6-12 09:45
0
雪    币: 541
活跃值: (694)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
29
用windbg看一下进程信息会有更好的理解效果
0号进程:!process poi(PsIdleProcess) f
system进程:!process poi(PsInitialSystemProcess) f
2013-6-12 09:59
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
30
我的理解:
1   0,4号进程都是内核的宿主(system也能被R3进程申请分页内存),哪个进程的非分页内存里的才是存放内核映像。
2.  我发现ntdll,ole等有仅存在于Idle的线程。
3.  另外我想知道userinit的父进程是?为什么不是system进程,这进程退出得太快很难查。
无论如何在这里总算学到了不少。
2013-6-12 10:58
0
雪    币: 541
活跃值: (694)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
31
1. system要在R3申请分页内存需要一些特殊技巧吧(没试过,system是没有PEB的,就是申请了也没多大用)。system和idle进程中都不会有存放内核镜像。非分页内存由内核的全局变量维护,不存在system和0号进程的VadRoot 中。另外,内核镜像不是都存放在非分页内存中。nt模块的代码有一部分是存放在非分页内存的如.text段, 有一部分是存在分页内存里的如PAGE段,还有一部分是存放在分页内存并可抛弃如INIT段,这个由PE的段头属性决定。
2. 这个是不可能的吧,idle没有R3的内存布局,也没PEB,也不能被用户态访问,idle进程中更不能存在ntdll,ole模块。不知道你用什么工具看的,或者运行什么软件导致这样的情况,给介绍一下
3. userinit进程是用户初始化进程,是在用户登录后,做初始化工作用的。所以他的父进程是winLogin.exe。
2013-6-12 11:41
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
32
好吧,我承认我才学疏浅,做个渔人比做个愚人要好
1.   我用NtAllocateVirtualMemory向system申请的内存,提下权就行了
2.   我用Kernel Detective查看的线程;若用XT才无语,system模块有ntdll.dll存在
3.   据我了解父进程为system,子进程也会一样。因此我对所用的PS API甚感兴趣。
2013-6-12 12:19
0
雪    币: 108
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
Mark一下,手机不方便阅读
2013-6-12 12:27
0
雪    币: 541
活跃值: (694)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
34
只有相互探讨,才能融汇贯通。。理不辨不明~。有兴趣加入群么?151843490。探讨windows内核技术的~
2013-6-12 12:28
0
雪    币: 541
活跃值: (694)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
35
1. 你是对的
2. 用Kernel Detective看idle线程列表,里面显示的是所有的线程。所属idle的都是线程ID==0的线程。system存在ntdll.dll不奇怪,是为了让其他进程能够使用ntdll.dll预先映射到system进程中的。system本身是不使用该模块的。
3. userinit父进程是winlogin.exe,这个我是看《windows内核原理与实现》中说的。我没实际测试,

交流是学习最快的方法,我不是在炫耀自己知道的多,自己知道的不一定是对的,这也是我来看雪的原因。希望能与大家相互交流,让自己知道存在哪些不足,并验证自己脑子里记得东西哪些是错的。
如有冒犯请多包涵你说的很对”做个渔人比做个愚人要好“,我来看雪也是不想做个愚人
2013-6-12 13:01
0
雪    币: 1235
活跃值: (5775)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
36
学习了   楼主辛苦
2013-6-12 13:10
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
mark
支持一下
2013-6-12 20:33
0
雪    币: 519
活跃值: (852)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
38
不错,支持一下!.
2013-6-13 00:21
0
雪    币: 516
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
感谢楼主  先收藏了
2013-6-13 10:00
0
雪    币: 7936
活跃值: (3745)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
我觉得写的很不错。
2013-6-13 11:49
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
不错不错,学习了。
2013-6-14 08:14
0
雪    币: 541
活跃值: (694)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
42
对本帖进行了重新编辑,非常感谢与各位的探讨。发现本帖中确实存在错误。主要是从启动到登陆各个进程启动的顺序和时机不正确。
现已对该问题进行了修正。详见本帖。
2013-6-15 01:40
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
43
论坛迁移,丢了一些楼层吧~~ 内容值得回味
2018-7-25 15:51
0
雪    币: 279
活跃值: (3122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
mark
2019-4-3 11:51
0
雪    币: 267
活跃值: (77)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
此类帖子严重点赞
2019-4-12 12:58
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
46
把windows操作系统主要的进程,启动顺序详细梳理给了大家,给力。
2023-3-14 14:15
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
47
winlogin.exe,应该是 winlogon.exe吧
2023-3-14 16:38
0
雪    币: 4430
活跃值: (4917)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
48
感谢分享!
2023-3-14 16:52
0
游客
登录 | 注册 方可回帖
返回