2011-08-26 59 views
19

假设Windows本地和网络文件路径不区分大小写是否安全?Windows环境中的文件路径不区分大小写?

+2

定义“安全”。 NTFS _can_可以配置为具有区分大小写的文件名,但几乎没有人会这样做(并且那些通常准备承担破解程序的责任)。但为什么你需要知道这一点? –

+1

@肯,51%没有臭味。大量的问题 - 通常最有趣的 - 就是没有合理的答案。 51%表明这不是不知道勾选勾选内容的用户;不管他的其他缺点如何,他显然会对接受什么做出合理的决定。 –

+1

@亨宁,我不同意。如果你问100个问题,其中有50个问题不能被任何人回答,你要么提出很多不好的问题,要么提出脱离主题的问题,要么你自己解决后没有跟进并回答你自己的问题以造福他人。但当然,你有权利得到你自己的意见。 :) –

回答

16

是的。 Windows(本地)文件系统(包括NTFS)以及FAT和变体不区分大小写(通常)。网络文件系统的底层实现可能区分大小写,但是,允许Windows访问的大多数软件(如SMB)都会自动将区分大小写的文件系统显示为不区分大小写的Windows。

有关详细信息,我读了Wikipedia article on filenames中的部分。

20

Windows的区分大小写实际上是在应用程序打开文件的过程中实现的。 NTFS可以是区分大小写的文件系统,并且可以愉快地存储文件,相同的名称仅在同一个目录中不同。

在Windows上,最终通过CreateFile API打开所有文件 - 如果将FILE_FLAG_POSIX_SEMANTICS标志传递给调用(并且正在访问的文件系统本身区分大小写),那么文件将根据精确的名称匹配打开。如果FILE_FLAG_POSIX_SEMANTICS未被传递,那么文件系统会打开一个不区分大小写的文件,并打开其中一个具有匹配名称的文件。如果有多于一个,则未定义哪一个实际打开。

大多数C和C++在Windows上运行时实现不提供这种机制的任何访问,并从来不使用这个标志,从而只有这样,才能获得区分大小写的行为是直接使用Windows API。

tl; dr - 您的语言运行库可能会将您的文件系统暴露为不区分大小写或保留大小写。如果您直接使用Windows API,则可以访问支持的文件系统,完全区分大小写。