利用未文档化API:RtlGetNtVersionNumbers 获取系统版本号
2015-09-01 13:54
447 查看
问题一:Windows SDK 8.1版本中的VersionHelper.h文件当中没有IsWindows10ORGreater,所以当你用IsWindows8Point1ORGreater判断出版本信息是Windows8.1以上的版本后,你就无法区分它到底是Win8.1还是Win10.
问题二:使用GetVersionEx这个API配合结构体OSVERSIONINFOEX这个方法获取版本信息,那么Win8以上的系统不论是Win8.1还是Win10都会被判定为主版本号为6,次版本号为2(即Win8的版本号)。
参考:
http://blog.csdn.net/pjl1119/article/details/8556693
和MSDN相关API说明。
那么如何区分Win8.1和Win10?
使用如下未文档化API:
RtlGetNtVersionNumbers。
参考:
/article/1423167.html
使用方法如下:
Windows7下返回结果:
Windows8.1下返回结果:
Windows10下返回结果:
这样我们即使不是用WindowsSDK10,也能区分开Win8.1和Win10了。
其他方法:
http://blog.csdn.net/k1988/article/details/47614529
其中这篇文章分析了很多方法:
/article/1423167.html
问题二:使用GetVersionEx这个API配合结构体OSVERSIONINFOEX这个方法获取版本信息,那么Win8以上的系统不论是Win8.1还是Win10都会被判定为主版本号为6,次版本号为2(即Win8的版本号)。
参考:
http://blog.csdn.net/pjl1119/article/details/8556693
和MSDN相关API说明。
那么如何区分Win8.1和Win10?
使用如下未文档化API:
RtlGetNtVersionNumbers。
参考:
/article/1423167.html
使用方法如下:
int main() { HMODULE hm; if (hm = LoadLibrary("ntdll.dll")) { DWORD i = 0, j = 0, p = 0; typedef void (WINAPI *getver)(DWORD*, DWORD*, DWORD*); getver gv; gv = (getver)GetProcAddress(hm, "RtlGetNtVersionNumbers"); if (gv) { gv(&i, &j, &p); printf("Major is %d\nMinor is %d\nOptional Build is %d\n", i, j, p); } FreeLibrary(hm); } system("pause"); return 0; }
Windows7下返回结果:
Windows8.1下返回结果:
Windows10下返回结果:
这样我们即使不是用WindowsSDK10,也能区分开Win8.1和Win10了。
其他方法:
http://blog.csdn.net/k1988/article/details/47614529
其中这篇文章分析了很多方法:
/article/1423167.html
相关文章推荐
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- Servlet容器和Web容器
- nyoj 628 小媛在努力【大水题】
- npm install -g 错误集锦
- 单点登录SSO
- java内存分配
- 安装Windows和Linux双系统注意事项
- jQuery table行变色
- 加密
- VMworld 2015 感受:VMware “Ready For Any”
- 优秀项目经理应备技能08-项目管理的技能
- 做产品收集的一些网址
- private final static ×× 和private static final xx 两者修饰变量的区别
- 自己自动拨号更换IP 刷新网页的工具源代码。
- hdu2553(回溯)
- ios textView 输入时,输入框里面的文字上下浮动Bug
- PHP中的命名空间
- 关于开源框架GPUImage 的简单说明
- 黑马入门教程笔记03-OC
- oracle数据库字符集US7ASCII,在java中处理中文问题