home *** CD-ROM | disk | FTP | other *** search
/ Troubleshooting Netware Systems / CSTRIAL0196.BIN / attach / msj / v10n10 / oleq1195.exe / HEAPDET.H < prev    next >
C/C++ Source or Header  |  1995-10-01  |  2KB  |  81 lines

  1. //////////////////////////////////////////////////////
  2. // 
  3. // HeapDet.h - Copyright 1995, Don Box 
  4. //
  5. // Simple IMallocSpy to track allocation byte count
  6. //
  7.  
  8. #ifndef _HEAPDET_H
  9. #define _HEAPDET_H
  10.  
  11. class CoHeapDetective : public IMallocSpy
  12. {                                      
  13. public:
  14. // this exception will be thrown if a bad ptr is detected
  15.     class XCorruptedHeap {};
  16.  
  17.     CoHeapDetective(HANDLE hTrace = 0);
  18.   virtual ~CoHeapDetective();
  19.  
  20.     DWORD GetBytesAlloced() const;
  21.  
  22. private:
  23. // paramters to cache between pre/post phases
  24.     long m_cbLastAlloc;
  25.     void *m_pvLastRealloc; 
  26.  
  27. // total heap usage
  28.     DWORD m_dwBytesAlloced;
  29.  
  30. // output device for tracing
  31.     HANDLE m_hTraceOutput;
  32.  
  33. // helper function to send simple trace message to debug window
  34.     void Trace(DWORD cb, LPCTSTR szAction, BOOL bSuccess);
  35.  
  36. // simple alloc header to track allocation size
  37.     struct ArenaHeader
  38.     {
  39.         enum { SIGNATURE = 0x1BADABBAL };
  40.         DWORD m_dwAllocSize;  // the user's idea of size
  41.         DWORD m_dwSignature;  // always 0x1BADABBA when good
  42.     };
  43.  
  44. // helper function to write a valid arena header at ptr
  45.     void SetArenaHeader(void *ptr, DWORD dwAllocSize);
  46.  
  47. // helper function to verify and return the prepended 
  48. // header (or null if failure)
  49.   ArenaHeader *GetHeader(void *ptr);
  50.  
  51. // IUnknown methods
  52.  
  53.   STDMETHODIMP QueryInterface(REFIID riid, void**ppv);
  54.   STDMETHODIMP_(ULONG) AddRef();
  55.   STDMETHODIMP_(ULONG) Release();
  56.  
  57. // IMallocSpy methods
  58.  
  59.   STDMETHODIMP_(ULONG) PreAlloc(ULONG cbRequest);
  60.   STDMETHODIMP_(void*) PostAlloc(void *pActual);
  61.   
  62.   STDMETHODIMP_(void*) PreFree(void *pRequest, BOOL fSpyed);
  63.   STDMETHODIMP_(void)  PostFree(BOOL fSpyed);
  64.   
  65.   STDMETHODIMP_(ULONG) PreRealloc(void *pRequest,    ULONG cbRequest, 
  66.                                                                   void **ppNewRequest, BOOL fSpyed);
  67.   STDMETHODIMP_(void*) PostRealloc(void *pActual, BOOL fSpyed);
  68.   
  69.   STDMETHODIMP_(void*) PreGetSize(void *pRequest, BOOL fSpyed);
  70.   STDMETHODIMP_(ULONG) PostGetSize(ULONG cbActual, BOOL fSpyed);
  71.   
  72.   STDMETHODIMP_(void*) PreDidAlloc(void *pRequest, BOOL fSpyed);
  73.   STDMETHODIMP_(int)   PostDidAlloc(void *pRequest, BOOL fSpyed, int fActual);
  74.   
  75.   STDMETHODIMP_(void)  PreHeapMinimize(void);
  76.   STDMETHODIMP_(void)  PostHeapMinimize(void);
  77.  
  78. };
  79.  
  80. #endif
  81.