Index: util/win/process_info.h |
diff --git a/util/win/process_info.h b/util/win/process_info.h |
index ed07ab09f6b8ef27a51c6c456cdd7f40c2a285d1..109b178b97ff9bbe31d5ac7009dc46173959daa3 100644 |
--- a/util/win/process_info.h |
+++ b/util/win/process_info.h |
@@ -49,6 +49,46 @@ class ProcessInfo { |
time_t timestamp; |
}; |
+ // \brief Contains information about a range of pages in the virtual address |
+ // space of a process. |
+ struct MemoryInfo { |
+ MemoryInfo(); |
+ |
+ //! \brief Constructs a MemoryInfo object from MEMORY_BASIC_INFORMATION32 or |
+ //! MEMORY_BASIC_INFORMATION64. |
+ template <class MBI> |
+ explicit MemoryInfo(const MBI& 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 +132,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 +147,16 @@ class ProcessInfo { |
WinVMAddress peb_address_vmaddr, |
ProcessInfo* process_info); |
+ template <class Traits> |
+ 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_; |