调用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' 的错误
...全文
227 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));
内容概要:本文提出了一种基于蒙特卡洛模拟与拉格朗日松弛法相结合的分散式优化方法,用于解决电动汽车充电站在分时电价机制下的有序充电调度问题。通过构建考虑用户充电需求与电网负荷平衡的优化模型,利用拉格朗日松弛法处理多车充电之间的耦合约束,实现去中心化的决策过程;同时引入蒙特卡洛方法模拟用户充电行为的不确定性,提升调度策略的鲁棒性。该方法有效降低了电网负荷峰谷差,提高了充电经济性与系统运行效率,为大规模电动汽车接入提供了可行的调度解决方案。; 适合人群:具备电力系统优化基础和Matlab编程能力的研究生、科研人员,以及从事智能电网、电动汽车能源管理等相关领域的工程技术人员。; 使用场景及目标:①应用于城市充电站集群的运营调度,实现削峰填谷与成本优化;②支撑电力系统需求侧管理研究,评估分时电价政策对用户充电行为的引导效果;③为多主体参与的分散式能源管理系统提供算法参考与仿真验证工具。; 阅读建议:建议读者结合提供的Matlab代码深入理解拉格朗日乘子迭代更新机制与蒙特卡洛场景生成流程,重点分析算法收敛性与不同电价策略下的调度结果差异,可通过调整用户数量、充电功率等参数进行仿真实验,以掌握模型的实际应用特性。

65,210

社区成员

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

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