#pragma once #include #include #include #include typedef enum { MEM_ALLOC_LIST_HEAD, MEM_ALLOC_MALLOC, MEM_ALLOC_VIRTUALALLOC, MEM_ALLOC_MAPPED_FILE } memAllocTracker; typedef struct _MemAllocEntry { SLIST_ENTRY allocEntry; void* Address; SIZE_T size; memAllocTracker type; } MemAllocEntry; class MyHostMalloc : public IHostMalloc { public: MyHostMalloc(HANDLE hHeap, IHostMemoryManager* owner, CRITICAL_SECTION* allocListLock, std::vector* allocList); ~MyHostMalloc(void); virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid,void **ppv); virtual ULONG STDMETHODCALLTYPE AddRef(void); virtual ULONG STDMETHODCALLTYPE Release(void); virtual HRESULT STDMETHODCALLTYPE Alloc(SIZE_T cbSize, EMemoryCriticalLevel eCriticalLevel, void** ppMem); virtual HRESULT STDMETHODCALLTYPE DebugAlloc(SIZE_T cbSize, EMemoryCriticalLevel eCriticalLevel, char* pszFileName, int iLineNo, void** ppMem); virtual HRESULT STDMETHODCALLTYPE Free(void* pMem); const std::vector& getMemAllocList() { return *m_memAllocList; } protected: volatile LONG count; private: HANDLE m_hHeap; IHostMemoryManager* m_owner; CRITICAL_SECTION* m_allocListLock; std::vector* m_memAllocList; };