当你对着一个应用程序双击后发生了什么

回顾一下我们开始接触计算机的阶段,你对着桌面上的图标点击却怎么也打不开,当老师告诉你要左击两下的时候,你发现还是没有打开,而你要打开的图标的名字却变成了可编辑状态,后来大致搞懂是手速不够,那么当你接触计算机N年后,你是否搞懂双击这个习以为常的动作完成后发生了什么?

你在图标上双击的操作被Explorer.exe也就是桌面程序获知,在桌面程序体内有一堆等着响应的DLL,它们被称为Shell程序。其中有一个叫Shell32.dll的家伙,它表示认领双击工作,首先它获取被我们点击的文件名字和位置,然后开始通过ShellExecuteExW来执行我们的程序,最终调用了程序员熟悉的CreateProcessW。
以XP为例,流程如下:

......
_InvokeContextMenu()
CDefFolderMenu::InvokeCommand()
HDXA_LetHandlerProcessCommandEx()
CShellExecMenu::InvokeCommand
CShellExecMenu::_InvokeOne()
_InvokePid()
ShellExecuteExW()
_ShellExecuteNormal()
ExecuteNormal()
_TryInvokeApplication()
_DoExecCommand()
_SHCreateProcess()
CreateProcessW()

CreateProcessW()中的工作比较多,先做必要的合法检查,再分析此文件是可执行程序吗?是否需要其他程序打开,就想你双击的虽然是.txt文件但打开的往往是记事本.
如果你想了解更详细的Windows系统中创建进程后半部分的内容,阅读React OS源码是个不错的选择。

双击跟踪过程在尝试多种工具后发现火绒剑可以满足我的需要。

感谢你的阅读,晚安。
2016年8月11日 00:41:16

你可能感兴趣的:(实践,深造之旅)