Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.7 KiB

  1. //+---------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1993 - 1994.
  5. //
  6. // File: cmallspy.hxx
  7. //
  8. // Contents: CMallocSpy definitions
  9. //
  10. // Classes:
  11. //
  12. // Functions:
  13. //
  14. // History: 24-Oct-94 Created.
  15. //
  16. //----------------------------------------------------------------------
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. #define DIM(X) (sizeof(X)/sizeof((X)[0]))
  21. class FAR CAddrNode32
  22. {
  23. public:
  24. void FAR* m_pv; // instance
  25. SIZE_T m_cb; // size of allocation in BYTES
  26. ULONG m_nAlloc; // the allocation pass count
  27. CAddrNode32 FAR *m_pnNext;
  28. void FAR* operator new(size_t cb);
  29. void operator delete(void FAR* pv);
  30. static CAddrNode32 FAR* m_pnFreeList;
  31. };
  32. class CMallocSpy : public IMallocSpy
  33. {
  34. public:
  35. CMallocSpy(void);
  36. ~CMallocSpy(void);
  37. // IUnknown methods
  38. STDMETHOD(QueryInterface) (REFIID riid, LPVOID *ppUnk);
  39. STDMETHOD_(ULONG, AddRef) (void);
  40. STDMETHOD_(ULONG, Release) (void);
  41. // IMallocSpy methods
  42. STDMETHOD_(SIZE_T, PreAlloc) (SIZE_T cbRequest);
  43. STDMETHOD_(void *, PostAlloc) (void *pActual);
  44. STDMETHOD_(void *, PreFree) (void *pRequest, BOOL fSpyed);
  45. STDMETHOD_(void, PostFree) (BOOL fSpyed);
  46. STDMETHOD_(SIZE_T, PreRealloc) (void *pRequest, SIZE_T cbRequest,
  47. void **ppNewRequest, BOOL fSpyed);
  48. STDMETHOD_(void *, PostRealloc) (void *pActual, BOOL fSpyed);
  49. STDMETHOD_(void *, PreGetSize) (void *pRequest, BOOL fSpyed);
  50. STDMETHOD_(SIZE_T, PostGetSize) (SIZE_T cbActual, BOOL fSpyed);
  51. STDMETHOD_(void *, PreDidAlloc) (void *pRequest, BOOL fSpyed);
  52. STDMETHOD_(BOOL, PostDidAlloc) (void *pRequest, BOOL fSpyed, BOOL fActual);
  53. STDMETHOD_(void, PreHeapMinimize) (void);
  54. STDMETHOD_(void, PostHeapMinimize) (void);
  55. private:
  56. ULONG m_cRef;
  57. BOOL m_fWantTrueSize;
  58. UINT m_cHeapChecks;
  59. VOID * m_pvRealloc; // block we are throwing away during
  60. // a realloc
  61. ULONG m_cAllocCalls; // total count of allocation calls
  62. CAddrNode32 FAR* m_rganode[1024]; // address instance table
  63. // Instance table methods
  64. VOID MemInstance();
  65. VOID HeapCheck();
  66. void DelInst(void FAR* pv);
  67. CAddrNode32 FAR* FindInst(void FAR* pv);
  68. void AddInst(void FAR* pv, SIZE_T cb);
  69. void DumpInst(CAddrNode32 FAR* pn);
  70. void VerifyHeaderTrailer(CAddrNode32 FAR* pn);
  71. inline UINT HashInst(void FAR* pv) const
  72. {
  73. return ((UINT)((ULONG)pv >> 4)) % DIM(m_rganode);
  74. }
  75. BOOL IsEmpty(void);
  76. void DumpInstTable(void);
  77. void CheckForLeaks();
  78. };
  79. STDAPI GetMallocSpy(IMallocSpy FAR* FAR* ppmallocSpy);
  80. #ifdef __cplusplus
  81. }
  82. #endif