记一次符号类型不一致导致的链接错误
记一次符号类型不一致导致的链接错误两个头文件在WDK中有两个头文件ntddk.h:包含 wdm.h传统的 NT 架构驱动非即插即用ntifs.h:包含 ntddk.h 和 wdm.h文件系统驱动、文件系统过滤驱动由于 ntifs.h 已经包含了 ntddk.h只需包含 ntifs.h 即可。同时包含两者可能导致类型重定义等编译错误。报错信息IoCtlHandler.obj : error LNK2019: 无法解析的外部符号 “public: static long __cdecl HelpTool::GetEprocess(void *,struct _EPROCESS * *)” (?GetEprocessHelpToolSAJPEAXPEAPEAU_EPROCESSZ)函数 “long __cdecl ProtectProcess(void *)” (?ProtectProcessYAJPEAXZ) 中引用了该符号符号类型不一致我的源代码中分别引用了上面的两个头文件。Windows WDK 头文件如 wdm.h / ntifs.h中的 PEPROCESS 定义会根据预处理器宏尤其是NT_KERNEL或 _KERNEL_MODE来决定到底是引用 _EPROCESS 还是 _KPROCESS。检查HelpTool.obj中导出的符号发现dumpbin /SYMBOLS .\HelpTool.obj Microsoft (R) COFF/PE Dumper Version 14.51.36252.0 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file .\HelpTool.obj File Type: COFF OBJECT COFF SYMBOL TABLE 000 01058D9C ABS notype Static | comp.id 001 C0010990 ABS notype Static | feat.00 002 00000000 SECT1 notype Static | .drectve Section length 2F, #relocs 0, #linenums 0, checksum 0 004 00000000 SECT2 notype Static | .debug$S Section length 2028, #relocs 0, #linenums 0, checksum 0 006 00000000 SECT3 notype Static | .bss Section length 1, #relocs 0, #linenums 0, checksum 0, selection 2 (pick any) 008 00000000 SECT3 notype External | ExPoolZeroingNativelySupported 009 00000000 SECT4 notype Static | .text$mn Section length 62, #relocs 3, #linenums 0, checksum 4519E64B, selection 1 (pick no duplicates) 00B 00000000 SECT5 notype Static | .debug$S Section length 144, #relocs 8, #linenums 0, checksum 0, selection 5 (pick associative Section 0x4) 00D 00000000 UNDEF notype External | __imp_DbgPrintEx 00E 00000000 UNDEF notype External | __imp_PsLookupProcessByProcessId 00F 00000000 SECT4 notype () External | ?GetEprocessHelpToolSAJPEAXPEAPEAU_KPROCESSZ (public: static long __cdecl HelpTool::GetEprocess(void *,struct _KPROCESS * *)) 010 00000000 SECT4 notype Label | $LN6 011 00000000 SECT6 notype Static | .xdata Section length C, #relocs 0, #linenums 0, checksum B9123A2D, selection 5 (pick associative Section 0x4) 013 00000000 SECT6 notype Static | $unwind$?GetEprocessHelpToolSAJPEAXPEAPEAU_KPROCESSZ 014 00000000 SECT7 notype Static | .pdata Section length C, #relocs 3, #linenums 0, checksum 92CEA7C6, selection 5 (pick associative Section 0x4) 016 00000000 SECT7 notype Static | $pdata$?GetEprocessHelpToolSAJPEAXPEAPEAU_KPROCESSZ 017 00000000 SECT8 notype Static | .text$s Section length 39, #relocs 0, #linenums 0, checksum 81C4C899, selection 2 (pick any) 019 00000000 SECT8 notype External | ??_C_0DJKDOKOJHK?$FLProtectMyProcess?3?3HelpTool?$FN?3?5GeFNODOBFM ( ?? ?? ::FNODOBFM::string) 01A 00000000 SECT9 notype Static | .debug$S Section length 3C, #relocs 2, #linenums 0, checksum 0, selection 5 (pick associative Section 0x3) 01C 00000000 SECTA notype Static | .debug$T Section length 7C, #relocs 0, #linenums 0, checksum 0 01E 00000000 SECTB notype Static | .chks64 Section length 58, #relocs 0, #linenums 0, checksum 0 String Table Size 0x145 bytes Summary 1 .bss 58 .chks64 21A8 .debug$S 7C .debug$T 2F .drectve C .pdata 62 .text$mn 39 .text$s C .xdata对比两个编译单元看到的函数签名IoCtlHandler.cpp报错方 期望的符号是GetEprocessHelpToolSAJPEAXPEAPEAU**_EPROCESS**Z参数为 struct _EPROCESS **HelpTool.obj导出的符号是?GetEprocessHelpToolSAJPEAXPEAPEAU**_KPROCESS**Z参数为 struct _KPROCESS **在编译 HelpTool.cpp 时编译器认为 PEPROCESS 是 struct _KPROCESS *而在编译 IoCtlHandler.cpp 时PEPROCESS 被解析为 struct _EPROCESS *。解决方案我把参数中的peprocess改为了pvoid类型反正eprocess在内核驱动开发中就是一个不透明的数据结构最终都是要使用基址偏移的方式访问其中的字段索性让它直接为pvoid类型。

相关新闻

杜邦线母头制作:从压接原理到专业工具与测试验证的完整实践

杜邦线母头制作:从压接原理到专业工具与测试验证的完整实践

1. 引子:从一次“简单”的维修说起事情源于一块老旧的开发板。板子上一个关键的传感器接口,用的就是那种最常见的2.54mm间距的杜邦线母座。在一次粗暴的插拔后,母座里的金属簧片彻底松脱,失去了弹性,传感器信号时断时续…

2026/7/30 2:15:05阅读更多 →
ADB包管理命令实战:从安装卸载到系统排查的完整指南

ADB包管理命令实战:从安装卸载到系统排查的完整指南

1. 从一次紧急排查说起:为什么我离不开ADB的包管理命令那天下午,测试同事急匆匆地跑过来,说预装在我们测试机上的某个核心应用突然打不开了,点击图标就闪退。这可不是小事,距离版本封包只剩几个小时。我第一反应是应用…

2026/7/30 2:15:05阅读更多 →
TCP连接管理:三次握手与四次挥手详解

TCP连接管理:三次握手与四次挥手详解

1. TCP连接管理的核心机制TCP协议作为互联网的基石,其连接建立与终止过程直接影响着网络通信的可靠性和效率。在开始分析具体机制前,我们需要明确几个基本概念:TCP是面向连接的传输层协议,这意味着在数据传输前必须建立明确的通信…

2026/7/30 2:15:05阅读更多 →
锐捷交换机SNMP配置全解析:从v2c到v3安全监控实战

锐捷交换机SNMP配置全解析:从v2c到v3安全监控实战

1. 为什么你的网络设备需要“体检报告”?从SNMP说起 如果你管理过几台服务器或者网络设备,肯定遇到过这样的场景:半夜收到告警,说某台核心交换机CPU飙高,或者某个端口的流量异常,但你手头只有设备IP&#x…

2026/7/30 9:45:35阅读更多 →
提示词失效的5大隐形陷阱:从GPT-4到Claude 3,92%用户都踩过的底层逻辑错误

提示词失效的5大隐形陷阱:从GPT-4到Claude 3,92%用户都踩过的底层逻辑错误

更多请点击: https://codechina.net 第一章:AI提示词模板大全 高质量提示词是激发大语言模型潜力的关键杠杆。本章系统梳理覆盖通用任务、专业场景与工程实践的提示词模板,所有模板均经实测验证,支持主流模型(如GPT-4…

2026/7/30 9:45:35阅读更多 →
Logisim-Evolution 数字逻辑电路设计:从零基础到FPGA实战的完整指南

Logisim-Evolution 数字逻辑电路设计:从零基础到FPGA实战的完整指南

Logisim-Evolution 数字逻辑电路设计:从零基础到FPGA实战的完整指南 【免费下载链接】logisim-evolution Digital logic design tool and simulator 项目地址: https://gitcode.com/gh_mirrors/lo/logisim-evolution 想要学习数字电路设计却不知从何入手&…

2026/7/30 9:45:35阅读更多 →
云服务器搭建游戏私服:从Linux运维到实战部署全流程指南

云服务器搭建游戏私服:从Linux运维到实战部署全流程指南

1. 从零到一:为什么选择云服务器搭建游戏私服? 几年前,我和几个朋友想重温一款老网游,但官服早已停运,私服要么不稳定,要么广告满天飞。折腾了一圈,我萌生了自己动手搭建的念头。一开始是在家里…

2026/7/30 9:45:35阅读更多 →
基于Python+C++的二维碎片图像拼接复原系统:从特征匹配到图优化

基于Python+C++的二维碎片图像拼接复原系统:从特征匹配到图优化

1. 项目概述与核心价值最近在整理一些历史档案资料时,遇到一堆被物理切割成不规则碎片的纸质文档,手动拼接复原几乎是不可能完成的任务。这让我想起了计算机视觉领域一个经典且极具挑战性的课题:二维碎片图像的自动拼接复原。无论是考古文物修…

2026/7/30 9:45:35阅读更多 →
基于Electron与Node.js构建跨平台文件格式转换工具实战指南

基于Electron与Node.js构建跨平台文件格式转换工具实战指南

1. 项目概述:为什么我们需要一个“文件转换的小工具”?在数字办公和日常创作中,文件格式的壁垒几乎无处不在。你可能遇到过这样的场景:设计师发来一个AI格式的矢量图,但你的老旧排版软件只认EPS;财务同事传…

2026/7/30 9:43:34阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 🚀 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →