#pragma once #include namespace WinSys { struct MemoryRegionItem : MEMORY_BASIC_INFORMATION { bool operator==(const MemoryRegionItem&) const; }; class ProcessVMTracker { public: ProcessVMTracker(HANDLE hProcess); ProcessVMTracker(DWORD pid); ~ProcessVMTracker(); bool IsValid() const; const std::vector>& GetRegions() const; const std::vector>& GetNewRegions() const; const std::vector>& GetOldRegions() const; size_t EnumRegions(); private: struct Impl; std::unique_ptr _impl; }; } template<> struct std::hash { size_t operator()(const WinSys::MemoryRegionItem& key) const { return (size_t)key.BaseAddress ^ key.Protect ^ key.State; } };