85 lines
2.5 KiB
C++
85 lines
2.5 KiB
C++
//-----------------------------------------------------------------------------
|
|
// Microsoft OLE DB TABLECOPY Sample
|
|
// Copyright (C) 1996 By Microsoft Corporation.
|
|
//
|
|
// @doc
|
|
//
|
|
// @module SPY.HXX
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
static const ALLOC_SIGNATURE = 'A';
|
|
static const FREE_SIGNATURE = 'F';
|
|
|
|
|
|
//ROUNDUP on all platforms pointers must be aligned properly
|
|
#define ROUNDUP_AMOUNT 8
|
|
#define ROUNDUP_(size,amount) (((ULONG)(size)+((amount)-1))&~((amount)-1))
|
|
#define ROUNDUP(size) ROUNDUP_(size, ROUNDUP_AMOUNT)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMallocSpy
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
class CMallocSpy : public IMallocSpy
|
|
{
|
|
|
|
public:
|
|
|
|
CMallocSpy(void);
|
|
virtual ~CMallocSpy(void);
|
|
|
|
//Interface
|
|
virtual BOOL Add(void* pv);
|
|
virtual BOOL Remove(void* pv);
|
|
virtual BOOL DumpLeaks();
|
|
|
|
// IUnknown methods
|
|
virtual STDMETHODIMP QueryInterface(REFIID riid, void** ppIUnknown);
|
|
virtual STDMETHODIMP_(ULONG) AddRef();
|
|
virtual STDMETHODIMP_(ULONG) Release();
|
|
|
|
// IMallocSpy methods
|
|
|
|
//Alloc
|
|
virtual STDMETHODIMP_(SIZE_T) PreAlloc(SIZE_T cbRequest);
|
|
virtual STDMETHODIMP_(void*) PostAlloc(void *pActual);
|
|
|
|
//Free
|
|
virtual STDMETHODIMP_(void*) PreFree(void *pRequest, BOOL fSpyed);
|
|
virtual STDMETHODIMP_(void ) PostFree(BOOL fSpyed);
|
|
|
|
//Realloc
|
|
virtual STDMETHODIMP_(SIZE_T) PreRealloc(void *pRequest, SIZE_T cbRequest, void **ppNewRequest, BOOL fSpyed);
|
|
virtual STDMETHODIMP_(void*) PostRealloc(void *pActual, BOOL fSpyed);
|
|
|
|
//GetSize
|
|
virtual STDMETHODIMP_(void*) PreGetSize(void *pRequest, BOOL fSpyed);
|
|
virtual STDMETHODIMP_(SIZE_T) PostGetSize(SIZE_T cbActual, BOOL fSpyed);
|
|
|
|
//DidAlloc
|
|
virtual STDMETHODIMP_(void*) PreDidAlloc(void *pRequest, BOOL fSpyed);
|
|
virtual STDMETHODIMP_(BOOL) PostDidAlloc(void *pRequest, BOOL fSpyed, BOOL fActual);
|
|
|
|
//HeapMinimize
|
|
virtual STDMETHODIMP_(void ) PreHeapMinimize();
|
|
virtual STDMETHODIMP_(void ) PostHeapMinimize();
|
|
|
|
|
|
private:
|
|
|
|
ULONG m_cRef; //Reference count
|
|
SIZE_T m_cbRequest; //Bytes requested
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Registration
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
void MallocSpyRegister(CMallocSpy** ppCMallocSpy);
|
|
void MallocSpyUnRegister(CMallocSpy* pCMallocSpy);
|
|
void MallocSpyDump(CMallocSpy* pCMallocSpy);
|
|
|