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

回顾一下我们开始接触计算机的阶段,你对着桌面上的图标点击却怎么也打不开,当老师告诉你要左击两下的时候,你发现还是没有打开,而你要打开的图标的名字却变成了可编辑状态,后来大致搞懂是手速不够,那么当你接触计算机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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值