ReadProcessMemory
從特定進程的內存裏讀取數據。被讀取的整個位置應該是可讀的否則操作會失敗。
BOOL WINAPI ReadProcessMemory(
__in HANDLE hProcess ,
__in LPCVOID lpBaseAddress ,
__out LPVOID lpBuffer ,
__in SIZE_T nSize ,
__out SIZE_T* lpNumberOfBytesRead
);
參數:
hProcess:目標進程的句柄。這個句柄必須有 PROCESS_VM_READ 標記。
lpBaseAddress:一個指向目標進程需要讀取數據的首地址的指針。在讀取數據之前,系統將會確認需讀取的所有數據是否可讀,如果不可讀那麼函數執行失敗。
lpBuffer:指向要接收讀取到的數據的緩衝區。
nSize:讀取的數據大小,單位爲Bytes。
lpNumberOfBytesRead:指向一個變量,用於放置傳送數據的大小。如果爲NULL,該參數被忽略。
返回值:
成功:非零。
失敗:零。
得到更多錯誤信息,使用 GetLastError 函數。
如果讀到了不可讀的內存,該函數會失敗。
附註:
該函數從指定的進程讀取內存數據到當前進程的內存。任何標記爲 PROCESS_VM_READ 的句柄都能使用該函數。Typically but not always, the process with address space that is being written to is being debugged.(在很典型的情況下,可被寫內存的進程是處於調試狀態的。)
要求:
頭文件:在Winbase.h裏聲明;包括Windows.h。
庫:Kernel32.lib
動態鏈接庫:Kernel32.dll