文件类型处理器中的程序路径必须是全路径
很多人可能还没有意识到这一点,但是在 Windows XP SP2 中,我们对文件类型处理器添加了这样一条要求:即如果文件处理器程序不在 Windows 目录或者不在 System 目录中的时候,注册该处理器程序的路径必须全路径,而不是相对路径。
为什么会有这个要求?
原因是出于对安全性的考虑,并和”可预测性”有一丝关系。
我们先说安全性,SearchPath 这个 API 会在当前目录下查找文件,并且它会在查找系统目录或 PATH 环境变量目录之前查找当前目录。这意味着,如果攻击者创建一个富有诱惑性的文件名,如”机密文件.txt”,并在当前目录下创建一个隐藏的 Notepad.exe 执行文件,会出现安全问题。
用户看到这个 “机密文件.txt”,会忍不住好奇着打开它,当他双击打开这个文件时,隐藏在当前目录下的 Notepad.exe 会首先被执行,而不是系统目录下正牌程序。
所以,基于以上的原因,我们添加了对文件全路径的要求,这样就有效的规避了上述安全问题。
下面我们说说可预测性,因为 PATH 环境变量可能随着进程的不同而各不相同。因此,相对路径可以解析为不同的程序,具体取决于谁在询问。
这反过来又导致必须解决诸如“当我从资源管理器双击它时它有效,但如果从批处理文件运行它则不起作用”等问题。
总结
从我的经验来说,相对路径在跨环境文件定位时还是十分有用的。
如果你希望得到某种确定性,则使用全路径会比较合适。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Program names in file type handlers need to be fully-qualified》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
相关推荐
- 为XBox开发者提供的ASan早期发布版本
- Posted on 07月02日
- 请特别注意COM组件的线程模型
- Posted on 12月17日
- 一个潜在问题:内存分配操作中可能出现的整数溢出
- Posted on 11月12日
- 理解哈希码
- Posted on 03月22日
评论已关闭。