/******************************Module*Header*******************************\ * Module Name: dbgext.h * * Created: 10-Sep-1993 08:36:42 * Author: Eric Kutter [erick] * * Copyright (c) 1993 Microsoft Corporation * * Dependencies: * * common macros for debugger extensions * * \**************************************************************************/ /**************************************************************************\ * * GetAddress - symbol of another module * \**************************************************************************/ #define GetAddress(dst, src) \ __try { \ char *pj = (char *)(src); \ /* if it is NTSD, don't want the trailing & */ \ if ((ExtensionApis.nSize < sizeof(WINDBG_EXTENSION_APIS)) && \ (*pj == '&')) \ { \ pj++; \ } \ *((ULONG *) &dst) = EvalExpression(pj); \ } __except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? \ EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { \ Print("NTSD: Access violation on \"%s\", switch to server context\n", src); \ } #define GetValue(dst,src) \ GetAddress(dst,src) \ if (TRUE || ExtensionApis.nSize < sizeof(WINDBG_EXTENSION_APIS)) \ { \ move(dst,dst); \ } /**************************************************************************\ * * move(dst, src ptr) * \**************************************************************************/ #define move(dst, src) \ __try { \ if (ExtensionApis.nSize >= sizeof(WINDBG_EXTENSION_APIS)) \ { \ (*ExtensionApis.lpReadProcessMemoryRoutine)( \ (ULONG_PTR) (src), &(dst), sizeof(dst), NULL); \ } else \ { \ NtReadVirtualMemory(hCurrentProcess, (LPVOID) (src), &(dst), sizeof(dst), NULL);\ } \ \ } __except (EXCEPTION_EXECUTE_HANDLER) { \ Print("exception in move()\n"); \ } /**************************************************************************\ * * move2(dst ptr, src ptr, num bytes) * \**************************************************************************/ #define move2(dst, src,bytes) \ __try { \ if (ExtensionApis.nSize >= sizeof(WINDBG_EXTENSION_APIS)) \ { \ (*ExtensionApis.lpReadProcessMemoryRoutine)( \ (ULONG_PTR) (src), (dst), (bytes), NULL); \ } else \ { \ NtReadVirtualMemory(hCurrentProcess, (LPVOID) (src), (dst), (bytes), NULL);\ } \ \ } __except (EXCEPTION_EXECUTE_HANDLER) { \ Print("exception in move2()\n"); \ }