【Windows】只看一眼文件管理器里的云盘,它就已经在运行了,这是怎么实现的
不知道大家有没有好奇过,资源管理器里的云盘功能,到底是怎么做到的?我在复刻这一功能时,发现了一些不符合直觉的事情,于是写下了这篇文章
我们暂且把注册到文件管理器的云盘称之为“虚拟硬盘”

当你打开文件管理器时,虚拟硬盘已经在运行了
理想情况下,你所看到的云盘图标应该是静态配置,只有你打开文件管理器后,再去点击虚拟硬盘,它才会开始运行
但实际上,只要文件管理器一打开,虚拟硬盘的代码就已经开始执行了
即是不需要用户交互就能运行
注意,这里说的远不只是加载虚拟硬盘的图标或右键菜单那么简单,而是它可以运行任意代码
而这一切,只需要你打开一次文件管理器就能完成

右键菜单-扩展菜单是否存在相同问题?
我们写一个自定义菜单来测试一下
同样是纯菜单,没有后台进程

结果如下:
菜单甚至还没显示出来,扩展菜单的内部代码(打开计算器)就已经执行了

这意味着什么?
如果一个应用心怀不轨,它甚至不需要申请开机自启,仅通过虚拟硬盘或右键扩展菜单中的任意一种方式,就能让自己在后台持续运行
在此之前,我一直以为它的机制和安卓类似:只是向系统注册一个菜单,只有用户明确选中时才会执行。从测试结果来看,两者的原理完全不同
资源管理器会在启动时,调用所有注册的dll,执行dllmain里的代码。
但是dllmain里没有太多限制,几乎是想做什么就能做什么。于是就实现了上面演示图的的效果

无论是虚拟硬盘还是右键菜单扩展,它们都可以在用户尚未进行任何交互时就被文件管理器提前加载,其对应的代码也因此获得了执行机会
这也解释了为什么扩展菜单多了后,右键菜单明显卡顿等现象——因为系统并不只是读取一份静态菜单,而是在后台完成了更多工作
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭