Index: snapshot/win/process_reader_win.cc |
diff --git a/snapshot/win/process_reader_win.cc b/snapshot/win/process_reader_win.cc |
index 383a66464a113334dd593e004d0d733da4b543a4..c34a1ab7ed134195620b3f59b9d6cd72937b44b4 100644 |
--- a/snapshot/win/process_reader_win.cc |
+++ b/snapshot/win/process_reader_win.cc |
@@ -16,7 +16,11 @@ |
namespace crashpad { |
-ProcessReaderWin::ProcessReaderWin() : process_info_(), initialized_() { |
+ProcessReaderWin::ProcessReaderWin() |
+ : process_(INVALID_HANDLE_VALUE), |
+ process_info_(), |
+ modules_(), |
+ initialized_() { |
} |
ProcessReaderWin::~ProcessReaderWin() { |
@@ -25,10 +29,37 @@ ProcessReaderWin::~ProcessReaderWin() { |
bool ProcessReaderWin::Initialize(HANDLE process) { |
INITIALIZATION_STATE_SET_INITIALIZING(initialized_); |
+ process_ = process; |
process_info_.Initialize(process); |
INITIALIZATION_STATE_SET_VALID(initialized_); |
return true; |
} |
+bool ProcessReaderWin::ReadMemory(win_vm_address_t at, |
+ win_vm_size_t num_bytes, |
+ void* into) { |
+ SIZE_T bytes_read; |
+ if (!ReadProcessMemory(process_, |
+ reinterpret_cast<void*>(at), |
+ into, |
+ num_bytes, |
+ &bytes_read) || |
+ num_bytes != bytes_read) { |
+ PLOG(ERROR) << "ReadMemory at " << at << " of " << num_bytes << " failed"; |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+const std::vector<ProcessInfo::Module>& ProcessReaderWin::Modules() { |
+ INITIALIZATION_STATE_DCHECK_VALID(initialized_); |
+ |
+ if (!process_info_.Modules(&modules_)) { |
+ LOG(ERROR) << "couldn't retrieve modules"; |
+ } |
+ |
+ return modules_; |
+} |
+ |
} // namespace crashpad |