日期:2014-05-17  浏览次数:20847 次

Explorer到底是什么东西?—— 没那么简单,恳求解惑!


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“里面”不同的两项功能 —— 这如何来解释?

【印象总结】
经历了上面所