冷知识:根据WDK编译器的版本编译不同的代码
今天群里的一个网友问到这个问题,特地整理出来记录一下。有些时候一个功能在NT5和NT6系统上实现的方法不同,比如在NT5上通过HOOK的方式实现拦截进程保护,而在NT6上则通过“进程对象回调”的方式实现。那么代码可以这么写:#if (NTDDI_VERSION >= NTDDI_VISTA)
DbgPrint("CODE-FOR-NT6!\n");
#else
DbgPrint("CODE-FOR-NT5!\n");
#endif每个不同的系统都有不同的NTDDI_XXXX。具体可以在这里查询:**** Hidden Message *****编译时,如果用XP的BUILD环境,不会把CODE-FOR-NT6这坨代码编译出来;当使用WIN7的BUILD环境时,则不会把CODE-FOR-NT5这坨代码编译出来。到了具体安装的时候,根据系统环境的不同,选择安装不同的驱动即可。
也许有人说可以直接用if(*NtBuildNumber==XXXX)的方式进行动态判定,然后直接用XP的BUILD环境编译。其实这么说就大错特错了,因为XP的BUILD环境无法编译使用了新API(XP系统没有的API)的驱动代码,即使编译成功了,在XP上也会加载失败,因为XP的内核没有导出这个函数,所以驱动无法完成加载过程。 来看看,学习一下 "根据系统环境的不同,选择安装不同的驱动即可"--------话说全系统兼容还是用编译4份驱动的,BeforeVista32.sysAfterVista32.sysBeforeVista64.sysAfterVista64.sys 然后加载器根据环境加载,但是源码工程只要两份就行了,是这样子的吗? 来看看,学习一下 284406022 发表于 2016-6-27 22:19
"根据系统环境的不同,选择安装不同的驱动即可"--------话说全系统兼容还是用编译4份驱动的,BeforeVista32. ...
一份源码,编译N个BIN。 来看看,学习一下,非常感谢楼主的分享 这个有点6,学习中 厉害,学习了 谢谢分享,最近在学习,学习下 学习一下. 学习一下 看看。。。 看看,学习一下 谢谢楼主 谢谢分享 感谢楼主分享 来看看,学习一下
页:
[1]