Windows 是否存在ReadProcessMemory会失败的情况?
我目前正在编写一个程序,它利用Windows 是否存在ReadProcessMemory会失败的情况?,windows,winapi,error-handling,process,readprocessmemory,Windows,Winapi,Error Handling,Process,Readprocessmemory,我目前正在编写一个程序,它利用ReadProcessMemory将内存块作为文本保存到文件中。在程序中,用户将指定内存块的基址和大小。在调用ReadProcessMemory之前进行输入验证,以确保没有与参数相关的错误。内存边界也限制在预先分配的区域,以确保用户不会尝试读取未分配的内存。由于所有分配的内存都是可读的,我认为不需要对ReadProcessMemory执行一般的调用后错误检查。我这样说对吗?当然,假设所有参数都有效。我以前曾多次使用过ReadProcessMemory,并进行了正确的
ReadProcessMemory
将内存块作为文本保存到文件中。在程序中,用户将指定内存块的基址和大小。在调用ReadProcessMemory
之前进行输入验证,以确保没有与参数相关的错误。内存边界也限制在预先分配的区域,以确保用户不会尝试读取未分配的内存。由于所有分配的内存都是可读的,我认为不需要对ReadProcessMemory
执行一般的调用后错误检查。我这样说对吗?当然,假设所有参数都有效。我以前曾多次使用过ReadProcessMemory
,并进行了正确的错误检查,发现这是不必要的,因为该函数总是成功的
如能举出例子也将不胜感激。
提前谢谢 我假设所有参数都有效:
具有handle
对流程的访问权限李>PROCESS\u VM\u READ
有效李>lpBaseAddress
是的,有,这在。它还告诉您如何使用nSize
查找失败原因。您总是,总是,总是检查API调用的返回值。毫无例外。如果不这样做,只会导致失败和难以跟踪错误。内存区域可以标记为可执行但不可读。内存也可以得到保护。内存被分配并不意味着你可以读取它。另外,如果不引入TICTTOU竞争,您无法检查分配的内存。此外,还不清楚您试图通过使用规范之外的API来解决什么实际编程问题。GetLastError()
lpvBase = VirtualAlloc( NULL, // System selects address PAGELIMIT*dwPageSize, // Size of allocation MEM_RESERVE, // Allocate reserved pages PAGE_NOACCESS); // Protection = no access
lpvAddr = VirtualAlloc(NULL, dwPageSize, MEM_RESERVE | MEM_COMMIT, PAGE_READONLY | PAGE_GUARD);
VirtualProtectEx(hProcess, lpAddress, dwSize, PAGE_NOACCESS, &old);
VirtualProtectEx(hProcess, lpAddress, dwSize, PAGE_GUARD | PAGE_READONLY, &old);