|
|
//----------------------------------------------------------------------------
//
// Extension DLL support.
//
// Copyright (C) Microsoft Corporation, 1997-2001.
//
//----------------------------------------------------------------------------
#ifndef _EXTS_H_
#define _EXTS_H_
#define WOW64EXTS_FLUSH_CACHE 0
#define WOW64EXTS_GET_CONTEXT 1
#define WOW64EXTS_SET_CONTEXT 2
#define WOW64EXTS_FLUSH_CACHE_WITH_HANDLE 3
typedef VOID (*WOW64EXTSPROC)(ULONG64, ULONG64, ULONG64, ULONG64);
typedef ULONG (CALLBACK* WMI_FORMAT_TRACE_DATA) (PDEBUG_CONTROL Ctrl, ULONG Mask, ULONG DataLen, PVOID Data);
extern ULONG64 g_ExtThread; extern LPTSTR g_ExtensionSearchPath; extern WOW64EXTSPROC g_Wow64exts;
extern WMI_FORMAT_TRACE_DATA g_WmiFormatTraceData;
extern DEBUG_SCOPE g_ExtThreadSavedScope; extern BOOL g_ExtThreadScopeSaved;
//
// Functions prototyped specifically for compatibility with extension
// callback prototypes. They can also be used directly.
//
VOID WDBGAPIV ExtOutput64( PCSTR lpFormat, ... );
VOID WDBGAPIV ExtOutput32( PCSTR lpFormat, ... );
ULONG64 ExtGetExpression( PCSTR CommandString );
ULONG ExtGetExpression32( PCSTR CommandString );
void ExtGetSymbol( ULONG64 Offset, PCHAR Buffer, PULONG64 Displacement );
void ExtGetSymbol32( ULONG Offset, PCHAR Buffer, PULONG Displacement );
DWORD ExtDisasm( PULONG64 lpOffset, PCSTR lpBuffer, ULONG fShowEA );
DWORD ExtDisasm32( PULONG lpOffset, PCSTR lpBuffer, ULONG fShowEA );
BOOL ExtReadVirtualMemory( IN ULONG64 Address, OUT PUCHAR Buffer, IN ULONG Length, OUT PULONG BytesRead );
BOOL ExtReadVirtualMemory32( IN ULONG Address, OUT PUCHAR Buffer, IN ULONG Length, OUT PULONG BytesRead );
ULONG ExtWriteVirtualMemory( IN ULONG64 Address, IN LPCVOID Buffer, IN ULONG Length, OUT PULONG BytesWritten );
ULONG ExtWriteVirtualMemory32( IN ULONG Address, IN LPCVOID Buffer, IN ULONG Length, OUT PULONG BytesWritten );
BOOL ExtGetThreadContext( DWORD Processor, PVOID lpContext, DWORD cbSizeOfContext );
BOOL ExtSetThreadContext( DWORD Processor, PVOID lpContext, DWORD cbSizeOfContext );
BOOL ExtIoctl( USHORT IoctlType, LPVOID lpvData, DWORD cbSize );
BOOL ExtIoctl32( USHORT IoctlType, LPVOID lpvData, DWORD cbSize );
DWORD ExtCallStack( DWORD64 FramePointer, DWORD64 StackPointer, DWORD64 ProgramCounter, PEXTSTACKTRACE64 StackFrames, DWORD Frames );
DWORD ExtCallStack32( DWORD FramePointer, DWORD StackPointer, DWORD ProgramCounter, PEXTSTACKTRACE32 StackFrames, DWORD Frames );
BOOL ExtReadPhysicalMemory( ULONGLONG Address, PVOID Buffer, ULONG Length, PULONG BytesRead );
BOOL ExtWritePhysicalMemory( ULONGLONG Address, LPCVOID Buffer, ULONG Length, PULONG BytesWritten );
extern WINDBG_EXTENSION_APIS64 g_WindbgExtensions64; extern WINDBG_EXTENSION_APIS32 g_WindbgExtensions32; extern NTSD_EXTENSION_APIS g_NtsdExtensions64; extern NTSD_EXTENSION_APIS g_NtsdExtensions32; extern WINDBG_OLDKD_EXTENSION_APIS g_KdExtensions;
BOOL bangSymPath( IN PCSTR args, IN BOOL Append, OUT PSTR string, IN ULONG len );
void fnBangCmd( DebugClient* Client, PSTR argstring, PSTR *pNext, BOOL BuiltInOnly );
VOID fnShell( PCSTR Args );
enum ExtensionType { NTSD_EXTENSION_TYPE = 1, DEBUG_EXTENSION_TYPE, WINDBG_EXTENSION_TYPE, WINDBG_OLDKD_EXTENSION_TYPE, }; typedef struct _EXTDLL { struct _EXTDLL *Next; HINSTANCE Dll; EXT_API_VERSION ApiVersion;
BOOL UserLoaded; ExtensionType ExtensionType; PDEBUG_EXTENSION_NOTIFY Notify; PDEBUG_EXTENSION_UNINITIALIZE Uninit;
PWINDBG_EXTENSION_DLL_INIT64 Init; PWINDBG_EXTENSION_API_VERSION ApiVersionRoutine; PWINDBG_CHECK_VERSION CheckVersionRoutine;
// Array extends to contain the full name.
char Name[1];
} EXTDLL;
extern EXTDLL* g_ExtDlls;
LONG ExtensionExceptionFilter( struct _EXCEPTION_POINTERS *ExceptionInfo, PCSTR Module, PCSTR Func );
EXTDLL* AddExtensionDll( char *Name, BOOL UserLoaded, char **End );
BOOL LoadExtensionDll( EXTDLL *Ext );
void DeferExtensionDll( EXTDLL *Match );
void UnloadExtensionDll( EXTDLL *Match );
BOOL CallAnyExtension(DebugClient* Client, EXTDLL* Ext, PSTR Function, PCSTR Arguments, BOOL ModuleSpecified, BOOL ShowWarnings, HRESULT* ExtStatus);
void OutputModuleIdInfo(HMODULE Mod, PSTR ModFile, LPEXT_API_VERSION ApiVer); void OutputExtensions(DebugClient* Client, BOOL Versions);
void LoadMachineExtensions(void);
void NotifyExtensions(ULONG Notify, ULONG64 Argument);
/*
* _NT_DEBUG_OPTIONS support. Each OPTION_ define must have a corresponding * string in gpaszOptions, in the same order. */ void ReadDebugOptions (BOOL fQuiet, char * pszOptionsStr); extern DWORD gdwOptions; #define OPTION_NOEXTWARNING 0x00000001
#define OPTION_NOVERSIONCHECK 0x00000002
#define OPTION_COUNT 2
VOID LoadWow64ExtsIfNeeded( VOID );
#endif // #ifndef _EXTS_H_
|