双十一|一种最奇怪的检测Windows NT系统的方法


双十一|一种最奇怪的检测Windows NT系统的方法
文章图片
双十一|一种最奇怪的检测Windows NT系统的方法
我的一位同事推荐了下面的代码为年度函数(Function of the Year) , 他也是第一个报告Windows Beta版本使用了一个值得怀疑的URL的人 。
我不得不承认 , 这段代码确实令人印象深刻 。 和所有其他检查操作系统版本的方法相比 , 通过检测内存映射文件里的未公开实现细节来判断操作系统版本 , 确实是非常具有创造性 。
请看代码
请不要诧异 , 这段函数并没有关闭映射文件句柄 , 并在你每次调用此函数时 , 会导致泄露了两个句柄资源和视图 。
此外 , 如果内存管理器碰巧将第二个文件视图分配给下一个 64K 内存块 , 则此函数可能会在 Windows NT 机器上错误的报告FALSE 。 (它确实可以这样做 , 因为地址空间的颗粒度为64KB)
如果 MAIN.CPL 文件恰好小于 64K , 或者如果你对该文件没有写权限 , 它也可能在 Windows 95 机器上错误地报告 TRUE 。(请注意 , 该程序请求对 MAIN.CPL 文件进行读写访问 。 )
另外 , 这段代码被许多流行的多媒体的标题栏使用 。
检测一台电脑正在运行的是Windows 95系列还是Windows NT系列 , 最快捷的方法就是使用咱们的老朋友GetVersion这个函数 , 如下图所示:
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《The strangest way of detecting Windows NT》
【双十一|一种最奇怪的检测Windows NT系统的方法】