Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 是否存在ReadProcessMemory会失败的情况?_Windows_Winapi_Error Handling_Process_Readprocessmemory - Fatal编程技术网

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
    是的,有,这在。它还告诉您如何使用
    GetLastError()
    查找失败原因。您总是,总是,总是检查API调用的返回值。毫无例外。如果不这样做,只会导致失败和难以跟踪错误。内存区域可以标记为可执行但不可读。内存也可以得到保护。内存被分配并不意味着你可以读取它。另外,如果不引入TICTTOU竞争,您无法检查分配的内存。此外,还不清楚您试图通过使用规范之外的API来解决什么实际编程问题。
    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);