首页
社区
课程
招聘
[原创]Explorer到底是什么东西?—— 没那么简单,恳求解惑
发表于: 2012-1-2 22:36 8573

[原创]Explorer到底是什么东西?—— 没那么简单,恳求解惑

2012-1-2 22:36
8573
Explorer(Explorer.exe)到底是什么东西?

【系统背景】

Microsoft Windows 7  64位 旗舰版 简体中文版
(下简称“本Windows系统”)

【不止一个】

在本Winsows系统中,有叁个Explorer.exe,它们分别位于以下叁个不同的系统文件夹中:

C:\Windows
C:\Windows\System32
C:\Windows\SysWOW64

系统给出的上述三个Explorer.exe的版本号完全相同,均为6.1.7601.xxxx;但经过对文件的校验(Check)可知:分别位于C:\Windows\System32与C:\Windows\SysWOW64这两个文件夹中的两个Explorer.exe文件,完全相同(虽然它们分别位于“xx32”和“xx64”两个不同的位置),而位于C:\Windows文件夹中的Explorer.exe文件,却与它们不同,文件大小略小。

【扮演Shell的角色】

我们知道,Microsoft官方为本Windows操作系统配备的Shell就是Explorer.exe。我的一些粗略的理解是:Shell这个角色,承担着实现用户与Windows操作系统之间某些最基本的对话的任务,具体地说,就是以文件操作为主要内容,比如打开(包括运行/执行)、复制、删除、移动文件,以及查看与修改文件属性等操作。

TaskInfo或类似的进程/线程监控软件给出的信息是:扮演这个Shell角色的Explorer.exe,是位于C:\Windows文件夹中的那个,它的默认(当前)目录环境(Curr Dir)是C:\Windows\system32\,它由C:\Windows\system32\winlogon.exe即“Windows Logon Application”来开启运行,即它的父进程是winlogon.exe —— 运行中的Explorer.exe的Parent PID字段的值印证了这一点。

那么,第一个问题就来了:

既然C:\Windows\Explorer.exe担当了Shell,那么,C:\Windows\System32和C:\Windows\SysWOW64文件夹中的Explorer.exe,又是做什么用的呢?

【Explorer.exe与winlogon.exe的亲密关系】

上面粗略地谈到了我对Explorer.exe身为Shell这个事实的理解,但是,如果要再深究一层的话,问题就又来了。

请注意我下面所描述的各个操作的详细而具体的步骤。

我们都知道,当登录本Windows系统之后,第一个出现在用户面前的界面,就是任务栏与桌面图标。我们有理由相信这个{任务栏+桌面图标}是Explorer.exe程序的一部分。此时的Explorer.exe的父进程是winlogon.exe。

就在这时,我利用“命令提示符”(Windows Command Processor)工具,运行“taskkill”命令来“终止(本程序官方使用的动词是‘Terminate’)”掉Explorer.exe程序,系统所反馈出的结果是“关闭Windows”的对话界面。

然而,此时我若利用“Windows 任务管理器(taskmgr.exe)”来“结束(E) (根据这个“E”猜想,本程序官方使用的动词很可能是‘End’)”掉Explorer.exe程序,结果却不同,{任务栏+桌面图标}一同消失了。

再然而,此时我若利用第三方进程管理软件TaskInfo程序,来“终结(本程序官方使用的动词是‘Terminate’)”掉Explorer.exe程序,结果就又不同,{任务栏+桌面图标}消失后,又倏然重新“自动复活”。根据对此刻“复活”了的Explorer.exe的Parent PID的观察,可以知道:“自动复活”了Explorer.exe程序的,是winlogon.exe,即其父进程。而且,值得注意的是:当令{任务栏+桌面图标}消失之后,可以利用taskmgr.exe、cmd.exe(Windows Command Processor)将其“复活”,然后,再利用TaskInfo程序“Terminate”掉 Explorer.exe,Explorer.exe就又“自动复活”,而令其“自动复活”的父进程必定是winlogon.exe。

再再然而,此时我若利用第三方进程管理软件TaskInfo程序,来“关闭(本程序官方使用的动词是‘Close’)”掉Explorer.exe程序,那么,结果就与“taskkill”命令的“终止(本程序官方使用的动词是‘Terminate’)”行为的结果一致 ——系统所反馈出的结果是“关闭Windows”的对话界面。

那么,现在就又有三个问题:

(一)在第三方进程管理软件TaskInfo程序中,“Close”与“Terminate”操作的意义是完全不同的,而其中的“Close”又与“taskkill”命令的“Terminate”的果效一致(如前段所述)。那么,就以TaskInfo程序中的操作名称来说,“Close”与“Terminate”两种操作,实质的区别是什么?也就是说,当分别执行这两个操作时,TaskInfo程序到底令操作系统在幕后做了什么?

(二)由上述现象又可大致归纳得到:TaskInfo程序中的“Terminate”操作,与Windows 任务管理器(taskmgr.exe)的“结束(E)(可能是End)”操作,这两者的果效有相同之处,就是{任务栏+桌面图标}都消失了。而不同之处在于,taskmgr.exe的“结束(E)”操作让{任务栏+桌面图标}彻底消失不得“复活”,而第三方进程管理软件TaskInfo程序的“Terminate”操作令{任务栏+桌面图标}消失后,winlogon.exe又令Explorer.exe迅速“自动复活”,{任务栏+桌面图标}随之重现。这样看来,Explorer.exe与winlogon.exe有着不一般的“亲密关系”,后者仿佛是前者的“守护天使”—— 一旦有第三方软件令前者消失,后者就立刻令前者“自动复活”。那么,问题就是:这前后二者的“亲密关系”,是怎样在操作系统中实现的呢?

(三)进一步地追问:到底还有没有其他什么第三方进程/线程监控软件,可以达到Windows 任务管理器(taskmgr.exe)的“效级(Power Level)”,一次性地彻底Terminate或End掉Explorer.exe,且不再能被winlogon.exe“自动复活”呢?

【Shell vs 任务栏+桌面图标vs 资源管理器】

接下来,我们继续做实验,在{任务栏+桌面图标}存有的情况下,利用taskmgr.exe、cmd.exe(Windows Command Processor)、Explorer.exe的“运行”等工具, “运行”或执行“explorer”—— 实际打开的就是C:\Windows\explorer.exe,那么,一个新窗口就被开启了,这个新窗口(所在的)程序,应该被叫做“Windows资源管理器”。那么,监视正在运行的程序的信息,也可以确定,Windows资源管理器这个程序也正是C:\Windows\explorer.exe。

那么,问题自然就来了:同样一个C:\Windows\explorer.exe,显然肩负了{任务栏+桌面图标}以及{Windows资源管理器}这两大人机对话界面任务。这前后两项不同的界面任务,在explorer.exe这同一个程序中,是如何被分配与激活的呢?其中的机制是怎样的呢?

更深一步地实验,可以揭示出上面这个问题的复杂性:

利用Windows 任务管理器(taskmgr.exe)“结束(E)”掉Explorer.exe,结果上面已经说过了,就是{任务栏+桌面图标}一同消失,此时,再利用Windows 任务管理器(taskmgr.exe)、cmd.exe(Windows Command Processor)这些本Windows系统自带的工具,“运行”或执行“explorer”,结果是{任务栏+桌面图标}一同“复活”。

然而,如果此时(就是{任务栏+桌面图标}一同消失之后)利用第三方命令提示符工具如PowerCmd,来执行“explorer”,结果却不同,那就是{任务栏+桌面图标}不会“复活”,而是会开启一个Windows资源管理器窗口。

看似同样地运行或执行“explorer”,本Windows系统自带的工具与第三方工具,两者的果效就是不同,它们分别对应着Explorer.exe“里面”不同的两项功能 —— 这如何来解释?

【印象总结】

经历了上面所述的一切,我的意识中就有了这么一种印象:

本Windows系统自带的工具,其“效级(Power Level)”就是比第三方工具的更高。

而第三方工具软件,看似可以代替Windows系统自带的工具,如资源管理器、命令提示行、甚至是Shell,但实质与果效大相径庭。

在本Windows系统中,第三方工具软件似乎始终处于“二等公民”的地位。

那么,这样看来,利用第三方工具软件,彻底(尽最大可能地从系统底层)取代Windows系统自带的工具,还不是那么简单与容易。

关于本帖子中所涉及的问题,还可以参考本人的另外一篇帖子:
《突然间,各程序的“手”全断了!—— 困扰了我好几天,求大虾赐教!》

http://bbs.pediy.com/showthread.php?t=144861

而对于本帖子中所提到的种种问题与疑惑,期盼各位大虾、高人,不吝赐教、指点迷津!

非常感谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
潜力贴留名.插图补丁.颜色补丁.字数补丁..

楼主的专研精神让人佩服
2012-1-2 22:46
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
。。。。。。。。。。。微软的 秘密。。。。只有 他们知道。、
2012-1-2 22:57
0
雪    币: 88
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主的专研精神让人佩服
2012-1-7 14:03
0
雪    币: 159
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个不知道啊,我只知道结束这个进程后桌面就空空如也了。
2012-1-9 13:46
0
雪    币: 1737
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主干脆自己搞研究吧,别研究微软的东东了~~
2012-1-9 16:42
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习。。。。值得钻研一下、、、
2012-1-9 16:45
0
雪    币: 220
活跃值: (886)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
说实在的,我看晕了
2012-1-9 16:51
0
雪    币: 216
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这几种情况都见过 可没想这么深 佩服
2012-1-9 22:05
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
EXP             !!!
2012-1-13 23:16
0
雪    币: 304
活跃值: (507)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
我这里是Win 2008 r2

C:\Windows\System32\没有explorer.exe

想用第三方实现shell是很棘手的项目
因为大量的COM+组件都是由explorer调用的
比如本地连接配置等等
这也是reactos的explorer至今还没有完全实现的原因
explorer实在是太tm复杂了。。

另外决定winlogon是否在explorer结束后重启的关键因素是
进程的ExitCode
2012-1-14 10:00
0
雪    币: 340
活跃值: (957)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
12
“Close”是给进程发送信息,告示它该关掉了,至于进程是否真的关闭,就不管了。
而“Terminate”是直接kill掉这个进程。

LZ还是先去看《windows 程序设计》这本书吧。
2012-1-14 11:46
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
TerminateProcess第二个参数退出代码设为1就得了 这样就不会自动启动了 这有什么好研究的
2012-1-16 19:13
0
游客
登录 | 注册 方可回帖
返回