Tesla.Angela 发表于 2016-6-27 18:56:17

冷知识:根据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的内核没有导出这个函数,所以驱动无法完成加载过程。

284406022 发表于 2016-6-27 21:32:19

来看看,学习一下

284406022 发表于 2016-6-27 22:19:23

"根据系统环境的不同,选择安装不同的驱动即可"--------话说全系统兼容还是用编译4份驱动的,BeforeVista32.sysAfterVista32.sysBeforeVista64.sysAfterVista64.sys 然后加载器根据环境加载,但是源码工程只要两份就行了,是这样子的吗?

软绵绵 发表于 2016-6-27 23:03:16

来看看,学习一下

Tesla.Angela 发表于 2016-6-28 18:25:03

284406022 发表于 2016-6-27 22:19
"根据系统环境的不同,选择安装不同的驱动即可"--------话说全系统兼容还是用编译4份驱动的,BeforeVista32. ...

一份源码,编译N个BIN。

yhsy1002 发表于 2016-6-28 19:47:26

来看看,学习一下,非常感谢楼主的分享

rtfkill 发表于 2016-6-30 21:06:55

这个有点6,学习中

qq569582281 发表于 2016-7-3 23:39:42

厉害,学习了

sijin 发表于 2016-7-12 13:08:57

谢谢分享,最近在学习,学习下

3207145141 发表于 2017-1-4 22:09:42

学习一下.

YOUBADBAD 发表于 2017-1-23 12:57:09

学习一下

tangptr@126.com 发表于 2017-2-23 01:05:55

看看。。。

hanfengyuxue 发表于 2017-11-8 14:18:07

看看,学习一下

yxxxxxxx 发表于 2020-1-17 11:59:34

谢谢楼主

风尘浮泛 发表于 2020-1-18 10:04:48

谢谢分享

consciousness 发表于 2021-9-10 19:27:38

感谢楼主分享

Henry 发表于 2021-9-14 16:10:48

来看看,学习一下
页: [1]
查看完整版本: 冷知识:根据WDK编译器的版本编译不同的代码