首页
社区
课程
招聘
[求助]C语言内核开发中关于部分结构体重定义的问题,请大佬指导
发表于: 2018-3-31 12:53 3248

[求助]C语言内核开发中关于部分结构体重定义的问题,请大佬指导

2018-3-31 12:53
3248
内核开发中  经常性会用到一些微软未公开的结构体
比如typedef struct _IMAGE_NT_HEADERS {
DWORD                 Signature;
IMAGE_FILE_HEADER     FileHeader;
IMAGE_OPTIONAL_HEADER OptionalHeader;
} IMAGE_NT_HEADERS
在ntddk.h中  微软只是用宏声明了一下  并没有定义其结构体
然后我自己在c文件头部  定义了这个结构体
编译的时候 提示重定义 这个该怎么解决?


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
2
楼主是什么环境?我的WDK7600+VS2015自己定义该结构体没有问题的。附件是我刚才的测试工程代码,系统环境变量中增加一项名为 WDKPAT 值为WDK路径 的变量就可以了,vs2013和vs2015都可以编译
上传的附件:
2018-3-31 15:04
0
雪    币: 12
活跃值: (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
KevinsBobo 楼主是什么环境?我的WDK7600+VS2015自己定义该结构体没有问题的。附件是我刚才的测试工程代码,系统环境变量中增加一项名为 WDKPAT 值为WDK路径 的变量就可以了,vs2013和vs20 ...
问题解决了,只有一个结构体有这个问题
typedef  struct  _IMAGE_OPTIONAL_HEADER64  {
       WORD                Magic;
       BYTE                MajorLinkerVersion;
       BYTE                MinorLinkerVersion;
       DWORD              SizeOfCode;
       DWORD              SizeOfInitializedData;
       DWORD              SizeOfUninitializedData;
       DWORD              AddressOfEntryPoint;
       DWORD              BaseOfCode;
       ULONGLONG      ImageBase;
       DWORD              SectionAlignment;
       DWORD              FileAlignment;
       WORD                MajorOperatingSystemVersion;
       WORD                MinorOperatingSystemVersion;
       WORD                MajorImageVersion;
       WORD                MinorImageVersion;
       WORD                MajorSubsystemVersion;
       WORD                MinorSubsystemVersion;
       DWORD              Win32VersionValue;
       DWORD              SizeOfImage;
       DWORD              SizeOfHeaders;
       DWORD              CheckSum;
       WORD                Subsystem;
       WORD                DllCharacteristics;
       ULONGLONG      SizeOfStackReserve;
       ULONGLONG      SizeOfStackCommit;
       ULONGLONG      SizeOfHeapReserve;
       ULONGLONG      SizeOfHeapCommit;
       DWORD              LoaderFlags;
       DWORD              NumberOfRvaAndSizes;
       IMAGE_DATA_DIRECTORY  DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
}  IMAGE_OPTIONAL_HEADER64,  *PIMAGE_OPTIONAL_HEADER64;

这里只能定义为  PIMAGE_OPTIONAL_HEADER64    64结尾  不能定义为  PIMAGE_OPTIONAL_HEADER    因为在wdm.h中有一个if宏 

#ifdef  _WIN64
typedef  PIMAGE_NT_HEADERS64  PIMAGE_NT_HEADERS;
#else
typedef  PIMAGE_NT_HEADERS32  PIMAGE_NT_HEADERS;
#endif
2018-4-1 22:46
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
4
明白了!我去WRK里面找的结构体定义,看到了里面是PIMAGE_OPTIONAL_HEADER32,当时没多想,结果还真是这里要明确指定
2018-4-2 09:45
0
游客
登录 | 注册 方可回帖
返回
//