home *** CD-ROM | disk | FTP | other *** search
- // obsearch.hpp
- //
- // Created 11/15/98
- //
- // (C)Copyright 1998-1999 Microsoft Corporation, All rights reserved.
- //
-
- #ifndef __OBSEARCH_HPP__
- #define __OBSEARCH_HPP__
-
-
- #include "ids.hpp"
- #include "walkheap.hpp"
-
-
- class RootReferencesRecorder;
- struct SearchOperation;
- class SearchHeapInfoCallback;
-
-
- typedef int SearchProc (ID id, ObjectID vmid, PVOID token);
-
- enum SearchOperationType
- {
- SOP_INVALID,
-
- SOP_INSTANCE_OF,
-
- SOP_REFERENCE_TO,
- };
-
- struct SearchOperation
- {
- SearchOperationType op;
-
- union
- {
- // SOP_INSTANCE_OF
- struct {
- ClassID cid;
- } instanceof;
-
- // SOP_REFERENCE_TO
- struct {
- ObjectID oid;
- } refersto;
- };
-
- SearchProc *proc;
- PVOID token;
-
- SearchOperation *next;
- };
-
-
- class SearchHeapInfoCallback : public IWalkHeapCallback
- {
- HeapMonitorManager *m_mgr;
- SearchOperation *m_workitems;
- ULONG m_RefCount;
-
- public:
-
- SearchHeapInfoCallback (HeapMonitorManager *mgr);
-
- ~SearchHeapInfoCallback ();
-
- VOID AddSearchOperation (SearchOperation *workitem);
-
- private:
-
- // IWalkHeapCallback methods
-
- STDMETHODIMP BeginDump ();
- STDMETHODIMP_(VOID) EndDump ();
-
- // IHeapInfoCallback methods
-
- STDMETHODIMP BeginContainer (CONTAINER_TYPE type, UniqueID id1, UniqueID id2)
- {
- return E_UNEXPECTED;
- }
-
- STDMETHODIMP RootReferences (const ObjectID *prefs, unsigned nrefs, const DWORD *pflags)
- {
- return E_UNEXPECTED;
- }
-
- static int FindRootRefsCB (ID id, ObjectID refvmid, PVOID token);
-
- STDMETHODIMP ObjectReferences (ObjectID vmid, DWORD flags, const ObjectID *prefs, unsigned nrefs, const DWORD *pflags);
-
-
- public:
-
- // IUnknown methods
-
- ULONG STDMETHODCALLTYPE AddRef (VOID);
- ULONG STDMETHODCALLTYPE Release (VOID);
- STDMETHODIMP QueryInterface (REFIID riid, PVOID *ppvObj);
- };
-
-
-
- #endif /* __OBJSEARCH_HPP__ */
-
-