Windows2000/private/windows/screg/winreg/exts/regexts.hxx
2020-09-30 17:12:32 +02:00

157 lines
4.3 KiB
C++

/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
regleaks.hxx
Abstract:
Common stuff for CS debugger extensions
Author:
UShaji (Adapted from rpc extensions, MarioGo, MazharM, JRoberts)
--*/
#ifndef _REGLEAKS_HXX_
#define _REGLEAKS_HXX_
#define MY_DECLARE_API(_x_) \
DECLARE_API( _x_ ) \
{ \
DWORD dwAddr; \
INIT_DPRINTF(); \
dwAddr = GetExpression(lpArgumentString); \
if ( !dwAddr ) { \
dprintf("Error: Failure to get address\n"); \
return; \
} \
do_##_x_(dwAddr); \
return;} \
extern
WCHAR *
ReadProcessChar(
unsigned short * Address
);
extern
PCHAR
MapSymbol(DWORD);
#define READ(addr, buffer, length) \
b = GetData((addr),(buffer),(length), NULL); \
if (!b) { \
dprintf("Failed to read address %d, %d bytes", (addr), (length)); \
return; \
} \
extern HANDLE ProcessHandle;
extern BOOL fKernelDebug;
#undef DECLARE_API
#define DECLARE_API(s) \
VOID \
s( \
HANDLE hCurrentProcess, \
HANDLE hCurrentThread, \
DWORD dwCurrentPc, \
PWINDBG_EXTENSION_APIS pExtensionApis, \
LPSTR lpArgumentString \
)
// types
typedef BOOL (*UEnvReadMemory)( HANDLE, const void*, void*, DWORD, DWORD* );
typedef BOOL (*UEnvWriteMemory)( HANDLE, void*, void*, DWORD, DWORD* );
// forwards
BOOL
ReadMemoryUserMode( HANDLE hProcess, const void* pAddress, void* pBuffer, DWORD dwSize, DWORD* pdwRead );
BOOL
ReadMemoryKernelMode( HANDLE hProcess, const void* pAddress, void* pBuffer, DWORD dwSize, DWORD* pdwRead );
BOOL
WriteMemoryUserMode( HANDLE hProcess, const void* pAddress, void* pBuffer, DWORD dwSize, DWORD* pdwRead );
BOOL
WriteMemoryKernelMode( HANDLE hProcess, const void* pAddress, void* pBuffer, DWORD dwSize, DWORD* pdwRead );
extern UEnvReadMemory ReadMemoryExt;
extern UEnvReadMemory WriteMemoryExt;
#define INIT_DPRINTF() { if (!fKernelDebug) \
{ \
ExtensionApis = *pExtensionApis; \
ReadMemoryExt = ReadMemoryUserMode; \
WriteMemoryExt = WriteMemoryUserMode; \
} \
ProcessHandle = hCurrentProcess; \
} \
extern WINDBG_EXTENSION_APIS ExtensionApis;
#define MIN(x, y) ((x) < (y)) ? x:y
extern
BOOL
GetData(IN DWORD dwAddress, IN LPVOID ptr, IN ULONG size, IN PCSTR type );
#define MAX_SYMBOL_LENGTH (sizeof( IMAGEHLP_SYMBOL ) + 256)
typedef struct _TrackObjectData
{
LIST_ENTRY Links;
HKEY hKey;
DWORD dwStackDepth;
PVOID* rgStack;
} TrackObjectData;
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;
void TrackObjectDataPrint(TrackObjectData* pKeyData);
void RegLeakTableDump(RegLeakTable* pLeakTable);
NTSTATUS PrintObjectInfo(HANDLE Handle);
/*
void GetSymbolForFrame(
PVOID pAddress,
PUCHAR pchBuffer,
DWORD_PTR *pDisplacement
);*/
#endif