调用MmFreeNonCachedMemory出现错误?

xia43232601 2008-10-26 04:26:27
急!请高手帮忙,vs2008调用MmFreeNonCachedMemory出现错误c:\001\hellowdm\hellowdm\hellowdm.cpp(167) : error C2440: '=' : cannot convert from 'PVOID' to 'IOPM (*)'

我的代码是这样的
#define IOPM_SIZE 8192
typedef UCHAR IOPM[IOPM_SIZE];
IOPM *pIOPM = NULL;
void Ke386SetIoAccessMap(int, IOPM *);
void Ke386IoSetAccessProcess(PEPROCESS, int);

DriverEntry的代码:
pIOPM = MmAllocateNonCachedMemory(sizeof(IOPM));
if (pIOPM == 0)
{
return STATUS_INSUFFICIENT_RESOURCES;
}
RtlZeroMemory(pIOPM, sizeof(IOPM));
Ke386IoSetAccessProcess(PsGetCurrentProcess(), 1);
Ke386SetIoAccessMap(1, pIOPM);


部问题在于不能将PVOID类型转换成其它的指针,因为调用pvIOBuffer = Irp->AssociatedIrp.SystemBuffer;
同样出现c:\001\hellowdm\hellowdm\hellowdm.cpp(82) : error C2440: '=' : cannot convert from 'PVOID' to 'PULONG' 的错误
...全文
229 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xia43232601 2008-10-29
  • 打赏
  • 举报
回复
学习了,如果点结贴给分,别人以后还可以不可以在贴子里留言?
baihacker 2008-10-28
  • 打赏
  • 举报
回复
你应该点结贴给分.而不是无满意.
xia43232601 2008-10-28
  • 打赏
  • 举报
回复
奇怪,我第一次发帖,怎么我给每个贴子分配了20分后,再点[无满意答案结帖] 怎么分配的贴子都变0了,操作不了,baihacker只好在另外的帖子上多给你分了。
baihacker 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xia43232601 的回复:]
我的环境是vs2008、win2008的wdk、DDKWizard,编2008下64位的驱动,我的包文件和库文件都是在工具-选项-项目和解决方案-vc++目录设置的路径,现在驱动与应用可以通信,就是物理端口无法操作,这ntoskrnl.exe的lib的路径在wdk的什么地方?
[/Quote]
搜索
xia43232601 2008-10-27
  • 打赏
  • 举报
回复
我的环境是vs2008、win2008的wdk、DDKWizard,编2008下64位的驱动,我的包文件和库文件都是在工具-选项-项目和解决方案-vc++目录设置的路径,现在驱动与应用可以通信,就是物理端口无法操作,这ntoskrnl.exe的lib的路径在wdk的什么地方?
baihacker 2008-10-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xia43232601 的回复:]
void Ke386SetIoAccessMap(int, IOPM *);
void Ke386IoSetAccessProcess(PEPROCESS, int);
在ntoskrnl.exe中的未见文档的服务例程,应该可以直接BUILD通过,如果要把相应的lib加到里面,应该加哪一个?
http://www.cnitblog.com/cc682/articles/43256.html
[/Quote]
先只加一个,如果不通过,
那么只加另一个,如果不通过,
两个都加,如果不通过,
继续找资料.
xia43232601 2008-10-26
  • 打赏
  • 举报
回复
void Ke386SetIoAccessMap(int, IOPM *);
void Ke386IoSetAccessProcess(PEPROCESS, int);
在ntoskrnl.exe中的未见文档的服务例程,应该可以直接BUILD通过,如果要把相应的lib加到里面,应该加哪一个?
http://www.cnitblog.com/cc682/articles/43256.html
xia43232601 2008-10-26
  • 打赏
  • 举报
回复
是不是vs的设置有错?
baihacker 2008-10-26
  • 打赏
  • 举报
回复
void __cdecl Ke386SetIoAccessMap(int,unsigned char (*)[8192])" (?Ke386SetIoAccessMap@@YAXHPEAY0CAAA@E@Z)
很明显在你的代码里,是调用的C++编译器,Ke386SetIoAccessMap的内部命名规则为C++的
楼主是不是没有把相应的lib加到里面去?

如果库的代码是C的就要加extern "C"否则就不

编译驱动好像是在DIRES里面还是FILES写包含库吧.

再不然
#pragma comment(lib, "库名")
如果是VC编译器的话
xia43232601 2008-10-26
  • 打赏
  • 举报
回复
我的DriverEntry例程是在extern "C"修饰
#ifdef __cplusplus
extern "C" {
#endif
NTSTATUS DriverEntry(
IN OUT PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{

}
#ifdef __cplusplus
}; // extern "C"
#endif

再在前面用了
extern "C" {
void Ke386SetIoAccessMap(int, IOPM *);
void Ke386IoSetAccessProcess(PEPROCESS, int);
}就出现
c:\001\hellowdm\hellowdm\hellowdm.obj : error LNK2001: unresolved external symbol Ke386SetIoAccessMap
c:\001\hellowdm\hellowdm\hellowdm.obj : error LNK2001: unresolved external symbol Ke386IoSetAccessProcess的错误

帅得不敢出门 2008-10-26
  • 打赏
  • 举报
回复
void Ke386SetIoAccessMap(int, IOPM *);
void Ke386IoSetAccessProcess(PEPROCESS, int);
是否应该加个extern "C"修饰下
xia43232601 2008-10-26
  • 打赏
  • 举报
回复
多谢帮忙,调用(IOPM*)MmAllocateNonCachedMemory(sizeof(IOPM))后又出现了unresolved external symbol "void __cdecl Ke386SetIoAccessMap(int,unsigned char (*)[8192])" (?Ke386SetIoAccessMap@@YAXHPEAY0CAAA@E@Z)的错误
baihacker 2008-10-26
  • 打赏
  • 举报
回复
(IOPM*)MmAllocateNonCachedMemory(sizeof(IOPM));
内容概要:本文深入研究了电力系统状态估计问题,重点围绕无迹卡尔曼滤波(UKF)、自适应无迹卡尔曼滤波(AUKF)以及扩展无迹卡尔曼滤波(EUKF)三种先进非线性滤波方法展开理论分析与仿真验证。通过Matlab平台实现了完整的算法架构与系统建模,系统地比较了各方法在处理电力系统非线性动态特性及噪声干扰方面的性能差异,旨在提升电压幅值、相角等关键状态变量的估计精度与鲁棒性。研究突出了算法在智能电网实时监控、故障诊断与动态调度中的应用潜力,并提供了可复现的代码支持。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、科研人员,以及从事电力自动化、智能电网状态监测与控制相关的工程技术人员。; 使用场景及目标:①掌握UKF、AUKF与EUKF在非线性状态估计中的建模流程与实现细节;②应用于电力系统实时数据融合、动态安全评估与运行优化,提升估计系统的抗噪能力与适应性;③为学术论文撰写、课题申报或工程原型开发提供算法参考与仿真基础。; 阅读建议:建议结合Matlab环境逐模块调试代码,深入理解滤波器在不同噪声水平和系统非线性程度下的响应特性,重点关注协方差自适应机制与数值稳定性处理策略,并可根据具体应用场景调整系统模型与参数配置以优化性能。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧