首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ WinAPI ReadProcessMemory

C++ WinAPI ReadProcessMemory
EN

Stack Overflow用户
提问于 2017-11-23 16:14:49
回答 1查看 1K关注 0票数 0

我刚开始学习WinAPI,偶然发现了函数的不同变量。现在我正在和ReadProcessMemory做斗争。守则是:

代码语言:javascript
复制
ReadProcessMemory(phandle, (LPVOID)address, &value , sizeof(value), 0);

现在我知道第一个参数是进程的句柄,但我不明白为什么第二个参数(指向基本地址的指针)必须是地址的空(LPVOID)。

在MSDN中,它说:指向指定进程中要读取的基地址的指针。在进行任何数据传输之前,系统将验证指定大小的基址和内存中的所有数据都可用于读取访问,如果无法访问,则函数将失败。

那么为什么它必须是(LPVOID)地址而不仅仅是第二个参数的地址呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-23 16:21:11

lpBaseAddress是..。一个地址,所以它的类型应该是一个指针。它指的是哪种类型?我们不知道,这个( WinApi)是C,所以没有模板--因此是void *。另外,我们不想修改内存,所以const是很好的衡量标准。

关于您的编辑(为什么转换):它取决于address的类型。任何非volatile对象指针都可以隐式转换为void const *,因此在这种情况下,转换是不必要的。不过,我认为该地址是一个已知的integer常量,在这种情况下,需要一个reinterpret_cast才能将其转换为指针。这是在这里做的不好的风格C风格的演员,但实现了同样的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47459679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档