【发布时间】:2010-12-16 03:23:37
【问题描述】:
lpBaseAddress [in]:
指向要从中读取的指定进程中的基地址的指针。在发生任何数据传输之前,系统会验证指定大小的基地址和内存中的所有数据是否可访问以进行读取访问,如果不可访问,则函数失败。
nSize [in]:
要从指定进程读取的字节数。
lpNumberOfBytesRead [out]
指向变量的指针,该变量接收传输到指定缓冲区的字节数。如果 lpNumberOfBytesRead 为 NULL,则忽略该参数。
所以..ReadProcessMemory只能完全成功或完全失败。调用者显然知道大小 - 必须将其传入才能进行调用。为什么有lpNumberOfBytesRead?
【问题讨论】:
-
这是一个该死的好问题。
-
@paxdiablo:谢谢 :)
-
这里有黑魔法。有一个特定的错误 ERROR_PARTIAL_COPY 指出“只有部分 ReadProcessMemory 或 WriteProcessMemory 请求已完成”。这似乎与“完全成功或失败”完全相反,但我不知道哪个是正确的。
-
这是一个想法。即使您可以从其他进程读取整个缓冲区,但如果您不能在当前进程中写入整个缓冲区怎么办?抓着稻草,但我猜这似乎是合理的。
-
@pax:WriteProcessMemory 的文档说的差不多。我的假设是 1. 这里的“可访问”有一些特殊含义,或者 2. 函数“失败”,但仍然复制尽可能多的数据。