lpBaseAddress [in]:
指向要读取的指定进程中的基址的指针.在发生任何数据传输之前,系统会验证基本地址和指定大小的内存中的所有数据是否都可以进行读访问,如果无法访问,则该函数将失败.
nSize [in]:
从指定进程读取的字节数.
lpNumberOfBytesRead [out]
指向变量的指针,该变量接收传输到指定缓冲区的字节数.如果lpNumberOfBytesRead为NULL,则忽略该参数.
所以.. ReadProcessMemory只能完全成功或完全失败.并且呼叫者显然知道大小 - 必须通过它来拨打电话.为什么有lpNumberOfBytesRead?
Rem*_*anu 11
来自winerror.h:
//
// MessageId: ERROR_PARTIAL_COPY
//
// MessageText:
//
// Only part of a ReadProcessMemory or WriteProcessMemory request was completed.
//
#define ERROR_PARTIAL_COPY 299L
Run Code Online (Sandbox Code Playgroud)
ReadProcessMemory将返回FALSE并在副本发生页面错误时GetLastError返回ERROR_PARTIAL_COPY.这是转储器中的常见情况,它必须处理可能已损坏的进程,因此无法确定所请求的区域是否有效(他们追逐以获取起始地址的指针可能已损坏并指向la- la-land),但他们仍然希望尽可能多地复制到垃圾场.