|
|
/*++
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_
|