| Index: util/win/process_info.cc
|
| diff --git a/util/win/process_info.cc b/util/win/process_info.cc
|
| index 64fb79b04d2243801aedcfdd7b446d34337911e7..ff8689ed5300f48ad122ab5af8b42574f34cd854 100644
|
| --- a/util/win/process_info.cc
|
| +++ b/util/win/process_info.cc
|
| @@ -110,7 +110,8 @@ template <class Traits>
|
| bool GetProcessBasicInformation(HANDLE process,
|
| bool is_wow64,
|
| ProcessInfo* process_info,
|
| - WinVMAddress* peb_address) {
|
| + WinVMAddress* peb_address,
|
| + WinVMSize* peb_size) {
|
| ULONG bytes_returned;
|
| process_types::PROCESS_BASIC_INFORMATION<Traits> process_basic_information;
|
| NTSTATUS status =
|
| @@ -143,6 +144,7 @@ bool GetProcessBasicInformation(HANDLE process,
|
| // The address of this is found by a second call to NtQueryInformationProcess.
|
| if (!is_wow64) {
|
| *peb_address = process_basic_information.PebBaseAddress;
|
| + *peb_size = sizeof(process_types::PEB<Traits>);
|
| } else {
|
| ULONG_PTR wow64_peb_address;
|
| status = crashpad::NtQueryInformationProcess(process,
|
| @@ -159,6 +161,7 @@ bool GetProcessBasicInformation(HANDLE process,
|
| return false;
|
| }
|
| *peb_address = wow64_peb_address;
|
| + *peb_size = sizeof(process_types::PEB<process_types::internal::Traits32>);
|
| }
|
|
|
| return true;
|
| @@ -260,6 +263,8 @@ ProcessInfo::ProcessInfo()
|
| : process_id_(),
|
| inherited_from_process_id_(),
|
| command_line_(),
|
| + peb_address_(0),
|
| + peb_size_(0),
|
| modules_(),
|
| is_64_bit_(false),
|
| is_wow64_(false),
|
| @@ -293,13 +298,12 @@ bool ProcessInfo::Initialize(HANDLE process) {
|
| }
|
| #endif
|
|
|
| - WinVMAddress peb_address;
|
| #if ARCH_CPU_64_BITS
|
| bool result = GetProcessBasicInformation<process_types::internal::Traits64>(
|
| - process, is_wow64_, this, &peb_address);
|
| + process, is_wow64_, this, &peb_address_, &peb_size_);
|
| #else
|
| bool result = GetProcessBasicInformation<process_types::internal::Traits32>(
|
| - process, false, this, &peb_address);
|
| + process, false, this, &peb_address_, &peb_size_);
|
| #endif // ARCH_CPU_64_BITS
|
|
|
| if (!result) {
|
| @@ -308,9 +312,9 @@ bool ProcessInfo::Initialize(HANDLE process) {
|
| }
|
|
|
| result = is_64_bit_ ? ReadProcessData<process_types::internal::Traits64>(
|
| - process, peb_address, this)
|
| - : ReadProcessData<process_types::internal::Traits32>(
|
| - process, peb_address, this);
|
| + process, peb_address_, this)
|
| + : ReadProcessData<process_types::internal::Traits32>(
|
| + process, peb_address_, this);
|
| if (!result) {
|
| LOG(ERROR) << "ReadProcessData failed";
|
| return false;
|
| @@ -346,6 +350,11 @@ bool ProcessInfo::CommandLine(std::wstring* command_line) const {
|
| return true;
|
| }
|
|
|
| +void ProcessInfo::Peb(WinVMAddress* peb_address, WinVMSize* peb_size) const {
|
| + *peb_address = peb_address_;
|
| + *peb_size = peb_size_;
|
| +}
|
| +
|
| bool ProcessInfo::Modules(std::vector<Module>* modules) const {
|
| INITIALIZATION_STATE_DCHECK_VALID(initialized_);
|
| *modules = modules_;
|
|
|