/*++ Copyright (c) 1992 Microsoft Corporation Module Name: regleak.h Abstract: This file contains declarations for data structures needed for tracking win32 registry leaks Author: Adam Edwards (adamed) 14-Nov-1997 Notes: --*/ #ifdef LOCAL #include "winver.h" #if !defined(_REGLEAK_H_) #define _REGLEAK_H_ #ifdef LEAK_TRACK #include "imagehlp.h" #define MAX_LEAK_STACK_DEPTH 40 #define SYM_PATH_MAX_SIZE 1000 typedef struct _TrackObjectData { LIST_ENTRY Links; HKEY hKey; DWORD dwStackDepth; PVOID* rgStack; } TrackObjectData; void TrackObjectDataPrint(TrackObjectData* pKeyData); NTSTATUS TrackObjectDataInit(TrackObjectData* pKeyData, PVOID* rgStack, DWORD dwMaxStackDepth, HKEY hKey); NTSTATUS TrackObjectDataClear(TrackObjectData* pKeyData); NTSTATUS GetLeakStack(PVOID** prgStack, DWORD* pdwMaxDepth, DWORD dwMaxDepth); enum { LEAK_TRACK_FLAG_NONE = 0, LEAK_TRACK_FLAG_USER = 1, LEAK_TRACK_FLAG_ALL = 0xFFFFFFFF }; typedef struct _RegLeakTable { TrackObjectData* pHead; DWORD cKeys; DWORD dwFlags; BOOL bCriticalSectionInitialized; RTL_CRITICAL_SECTION CriticalSection; } RegLeakTable; typedef struct _RegLeakTraceInfo { DWORD dwMaxStackDepth; LPTSTR szSymPath; BOOL bEnableLeakTrack; RTL_CRITICAL_SECTION StackInitCriticalSection; } RegLeakTraceInfo; extern RegLeakTraceInfo g_RegLeakTraceInfo; NTSTATUS RegLeakTableInit(RegLeakTable* pLeakTable, DWORD dwFlags); NTSTATUS RegLeakTableClear(RegLeakTable* pLeakTable); NTSTATUS RegLeakTableAddKey(RegLeakTable* pLeakTable, HKEY hKey); NTSTATUS RegLeakTableRemoveKey(RegLeakTable* pLeakTable, HKEY hKey); BOOL RegLeakTableIsEmpty(RegLeakTable* pLeakTable); BOOL RegLeakTableIsTrackedObject(RegLeakTable* pLeakTable, HKEY hKey); NTSTATUS TrackObject(HKEY hKey); BOOL InitializeLeakTrackTable(); BOOL CleanupLeakTrackTable(); NTSTATUS UnTrackObject(HKEY hKey); extern RegLeakTable gLeakTable; #endif // LEAK_TRACK #endif // _REGLEAK_H_ #endif // LOCAL