ntifs.h(85) : error C2371:PEPROCES: redefinition; different basic types Wdm.h、Ntddk.h 和 Ntifs.h头文件包含结构
2023-04-12
45
0
在做windows驱动时,有时由于引用头文件不当,会引起头文件中的重定义而引起编译失败。
'PEPROCESS' : redefinition; different basic types
c:winddk6000incddktifs.h(85) : error C2371: 'PEPROCESS' : redefinition; different basic types
c:winddk6000incddktifs.h(86) : error C2371: 'PETHREAD' : redefinition; different basic types
此类错误是因为ntddk.h和ntifs.h冲突,因为ntifs.h已经包含了ntddk的定义,所以包含了ntifs.h就不必包含ntddk.h。
DRIVERTYPE=FS时才能包含ntifs.h
Wdm.h、Ntddk.h 和 Ntifs.h头文件包含结构
在 Windows Vista 版本的 WDK 之前,比如DDK3600,用于驱动程序开发的主要头文件为 Wdm.h、Ntddk.h 和 Ntifs.h,但这些头文件中包含很多重复的声名。
wdm.h一般用于即插即用驱动。
ntddk.h 一般用于非即插即用驱动,如我们常说的NT架构驱动。这类驱动一般用于无硬件支持的系统内核服务。
从 Windows Vista 版本的 WDK 开始,Wdm.h、Ntddk.h 和 Ntifs.h 将按层次结构来组织并且不包含重复信息。上层的文件将包含下层的文件。较高级别的文件包括较低级别的文件。每个函数和结构声明只出现一次。
Ntifs.h 包含 Ntddk.h,而 Ntddk.h 又包含 Wdm.h。下图显示了此结构
驱动头文件结构