/*++ Copyright (c) 2000 Microsoft Corporation Module Name: extapi.hxx Abstract: This header file declares general macros and routines for debugger extension routines. Author: JasonHa --*/ #ifndef _EXTAPI_HXX_ #define _EXTAPI_HXX_ extern const BOOL ClientInitialized; #define INIT_API() \ HRESULT Status; \ const BOOL ClientInitialized = TRUE; \ if ((Status = ExtQuery(Client)) != S_OK) return Status #define EXIT_API(hr) \ do { \ if (ClientInitialized) ExtRelease(); \ return (hr); \ } while (0) // Safe release and NULL. #define EXT_RELEASE(Unk) \ ((Unk) != NULL ? ((Unk)->Release(), (Unk) = NULL) : NULL) #ifdef __cplusplus extern "C" { #endif // Global variables initialized by ExtQuery/INIT_API. extern PDEBUG_ADVANCED g_pExtAdvanced; extern PDEBUG_CLIENT g_pExtClient; extern PDEBUG_CONTROL g_pExtControl; extern PDEBUG_DATA_SPACES g_pExtData; extern PDEBUG_REGISTERS g_pExtRegisters; extern PDEBUG_SYMBOLS g_pExtSymbols; extern PDEBUG_SYSTEM_OBJECTS g_pExtSystem; HRESULT ExtQuery(PDEBUG_CLIENT Client); void ExtRelease(BOOL Cleanup = FALSE); // Normal output. void __cdecl ExtOut(PCSTR Format, ...); // Error output. void __cdecl ExtErr(PCSTR Format, ...); // Warning output. void __cdecl ExtWarn(PCSTR Format, ...); // Verbose output. void __cdecl ExtVerb(PCSTR Format, ...); HRESULT ReadSymbolData( IN PDEBUG_CLIENT Client, IN PCSTR Symbol, OUT PVOID Buffer, IN ULONG BufferSize, OUT OPTIONAL PULONG SizeRead ); #define EVALUATE_DEFAULT_TYPE DEBUG_VALUE_INVALID #define EVALUATE_DEFAULT_RADIX 0 #define EVALUATE_COMPACT_EXPR 1 #define EVALUATE_DEFAULT_FLAGS 0 HRESULT Evaluate( IN PDEBUG_CLIENT Client, IN PCSTR Expression, IN ULONG DesiredType, IN ULONG Radix, OUT PDEBUG_VALUE Value, OUT OPTIONAL PULONG RemainderIndex = NULL, OUT OPTIONAL PULONG StartIndex = NULL, IN OPTIONAL FLONG Flags = EVALUATE_DEFAULT_FLAGS ); HRESULT DumpType( IN PDEBUG_CLIENT Client, IN PCSTR Type, IN ULONG64 Offset, IN ULONG Flags = DEBUG_OUTTYPE_DEFAULT, IN OutputControl *OutCtl = NULL, IN BOOL Physical = FALSE ); HRESULT ExtDumpType( IN PDEBUG_CLIENT Client, IN PCSTR ExtName, IN PCSTR Type, IN PCSTR Args ); HRESULT ReadPointerPhysical( IN PDEBUG_CLIENT Client, IN ULONG64 Offset, OUT PULONG64 Ptr ); HRESULT GetTypeId( IN PDEBUG_CLIENT Client, IN PCSTR Type, OUT PULONG TypeId, OUT OPTIONAL PULONG64 Module ); HRESULT GetFieldSize( IN PDEBUG_CLIENT Client, IN ULONG64 Module, IN ULONG TypeId, IN PCSTR FieldPath, OUT PULONG Size, OUT OPTIONAL PULONG Length = NULL, OUT OPTIONAL PULONG EntrySize = NULL ); ULONG DbgIntValTypeFromSize( IN ULONG Size ); BOOL GetArrayDimensions( IN PDEBUG_CLIENT Client, IN PCSTR Type, OPTIONAL IN PCSTR Field, OPTIONAL OUT PULONG ArraySize, OPTIONAL OUT PULONG Length, OPTIONAL OUT PULONG EntrySize ); #ifdef __cplusplus } #endif class ExtApiClass { public: ExtApiClass(PDEBUG_CLIENT); ~ExtApiClass(); PDEBUG_CLIENT Client; }; #endif _EXTAPI_HXX_