| Index: util/win/process_info.cc
 | 
| diff --git a/util/win/process_info.cc b/util/win/process_info.cc
 | 
| index ed5262c7f7cc9d7f2d2958d3c7c74a1b69a7b9a6..6d70fa0d448eb35e4a8361b0d08e5c7c05d9b5b8 100644
 | 
| --- a/util/win/process_info.cc
 | 
| +++ b/util/win/process_info.cc
 | 
| @@ -16,6 +16,8 @@
 | 
|  
 | 
|  #include <winternl.h>
 | 
|  
 | 
| +#include <limits>
 | 
| +
 | 
|  #include "base/logging.h"
 | 
|  #include "base/strings/stringprintf.h"
 | 
|  #include "build/build_config.h"
 | 
| @@ -253,15 +255,17 @@ bool ReadProcessData(HANDLE process,
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| -bool ReadMemoryInfo(HANDLE process, ProcessInfo* process_info) {
 | 
| +bool ReadMemoryInfo(HANDLE process, bool is_64_bit, ProcessInfo* process_info) {
 | 
|    DCHECK(process_info->memory_info_.empty());
 | 
|  
 | 
| -  SYSTEM_INFO system_info;
 | 
| -  GetSystemInfo(&system_info);
 | 
| -  const WinVMAddress min_address =
 | 
| -      reinterpret_cast<WinVMAddress>(system_info.lpMinimumApplicationAddress);
 | 
| -  const WinVMAddress max_address =
 | 
| -      reinterpret_cast<WinVMAddress>(system_info.lpMaximumApplicationAddress);
 | 
| +  const WinVMAddress min_address = 0;
 | 
| +  // We can't use GetSystemInfo() to get the address space range for another
 | 
| +  // process. VirtualQueryEx() will fail with ERROR_INVALID_PARAMETER if the
 | 
| +  // address is above the highest memory address accessible to the process, so
 | 
| +  // we just probe the entire potential range (2^32 for x86, or 2^64 for x64).
 | 
| +  const WinVMAddress max_address = is_64_bit
 | 
| +                                       ? std::numeric_limits<uint64_t>::max()
 | 
| +                                       : std::numeric_limits<uint32_t>::max();
 | 
|    MEMORY_BASIC_INFORMATION memory_basic_information;
 | 
|    for (WinVMAddress address = min_address; address <= max_address;
 | 
|         address += memory_basic_information.RegionSize) {
 | 
| @@ -270,6 +274,8 @@ bool ReadMemoryInfo(HANDLE process, ProcessInfo* process_info) {
 | 
|                                     &memory_basic_information,
 | 
|                                     sizeof(memory_basic_information));
 | 
|      if (result == 0) {
 | 
| +      if (GetLastError() == ERROR_INVALID_PARAMETER)
 | 
| +        break;
 | 
|        PLOG(ERROR) << "VirtualQueryEx";
 | 
|        return false;
 | 
|      }
 | 
| @@ -367,7 +373,7 @@ bool ProcessInfo::Initialize(HANDLE process) {
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| -  if (!ReadMemoryInfo(process, this)) {
 | 
| +  if (!ReadMemoryInfo(process, is_64_bit_, this)) {
 | 
|      LOG(ERROR) << "ReadMemoryInfo failed";
 | 
|      return false;
 | 
|    }
 | 
| 
 |