Index: util/win/process_info.h |
diff --git a/util/win/process_info.h b/util/win/process_info.h |
index ed07ab09f6b8ef27a51c6c456cdd7f40c2a285d1..5af28bd762bddabcc62f2f8be5e7cb88150f7ff0 100644 |
--- a/util/win/process_info.h |
+++ b/util/win/process_info.h |
@@ -49,6 +49,40 @@ class ProcessInfo { |
time_t timestamp; |
}; |
+ // \brief Contains information about a range of pages in the virtual address |
+ // space of a process. |
+ struct MemoryInfo { |
+ explicit MemoryInfo(const MEMORY_BASIC_INFORMATION& mbi); |
+ ~MemoryInfo(); |
+ |
+ //! \brief The base address of the region of pages. |
+ WinVMAddress base_address; |
+ |
+ //! \brief The size of the region beginning at base_address in bytes. |
+ WinVMSize region_size; |
+ |
+ //! \brief The base address of a range of pages that was allocated by |
+ //! `VirtualAlloc()`. The page pointed to base_address is within this |
+ //! range of pages. |
+ WinVMAddress allocation_base; |
+ |
+ //! \brief The state of the pages, one of `MEM_COMMIT`, `MEM_FREE`, or |
+ //! `MEM_RESERVE`. |
+ uint32_t state; |
+ |
+ //! \brief The memory protection option when this page was originally |
+ //! allocated. This will be `PAGE_EXECUTE`, `PAGE_EXECUTE_READ`, etc. |
+ uint32_t allocation_protect; |
+ |
+ //! \brief The current memoryprotection state. This will be `PAGE_EXECUTE`, |
+ //! `PAGE_EXECUTE_READ`, etc. |
+ uint32_t protect; |
+ |
+ //! \brief The type of the pages. This will be one of `MEM_IMAGE`, |
+ //! `MEM_MAPPED`, or `MEM_PRIVATE`. |
+ uint32_t type; |
+ }; |
+ |
ProcessInfo(); |
~ProcessInfo(); |
@@ -92,6 +126,9 @@ class ProcessInfo { |
//! first element. |
bool Modules(std::vector<Module>* modules) const; |
+ //! \brief Retrieves information about all pages mapped into the process. |
+ const std::vector<MemoryInfo>& MemoryInformation() const; |
+ |
private: |
template <class Traits> |
friend bool GetProcessBasicInformation(HANDLE process, |
@@ -104,12 +141,15 @@ class ProcessInfo { |
WinVMAddress peb_address_vmaddr, |
ProcessInfo* process_info); |
+ friend bool ReadMemoryInfo(HANDLE process, ProcessInfo* process_info); |
+ |
pid_t process_id_; |
pid_t inherited_from_process_id_; |
std::wstring command_line_; |
WinVMAddress peb_address_; |
WinVMSize peb_size_; |
std::vector<Module> modules_; |
+ std::vector<MemoryInfo> memory_info_; |
bool is_64_bit_; |
bool is_wow64_; |
InitializationStateDcheck initialized_; |