|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
remote.cxx
Abstract:
This file contains the thunk routines to make wdbgext api calls from a remote client.
Author:
Jason Hartman (JasonHa) 2000-10-27
Environment:
User Mode
--*/
#include "precomp.hxx"
VOID RemoteWarn(PCSTR pszAPI) { ExtApiClass ExtApi(NULL); if (ExtApi.Client != NULL) { ExtWarn("Extension using WinDbg Extension API, %s, which isn't remote compatible.\n", pszAPI); } }
VOID WDBGAPIV RemoteThunkOutputRoutine( PCSTR lpFormat, ... ) { ExtApiClass ExtApi(NULL); // RemoteWarn("dprintf");
va_list Args; if (g_pExtControl == NULL) { DbgPrint("g_pExtControl is NULL.\n"); return; }
va_start(Args, lpFormat); g_pExtControl->OutputVaList(DEBUG_OUTPUT_NORMAL, lpFormat, Args); va_end(Args); }
ULONG64 WDBGAPI RemoteThunkGetExpressionRoutine( PCSTR lpExpression ) { ExtApiClass ExtApi(NULL); // RemoteWarn("GetExpression");
DEBUG_VALUE Value;
if (g_pExtControl != NULL) { if (g_pExtControl->Evaluate(lpExpression, DEBUG_VALUE_INT64, &Value, NULL) == S_OK) { return Value.I64; } }
return 0; }
//PWINDBG_GET_SYMBOL64
VOID WDBGAPI RemoteThunkGetSymbolRoutine( ULONG64 offset, PCHAR pchBuffer, PULONG64 pDisplacement ) { RemoteWarn("GetSymbol"); if (pchBuffer != NULL) ((PSTR)pchBuffer)[0] = '\0'; if (pDisplacement != NULL) *pDisplacement = 0; return; }
ULONG WDBGAPI RemoteThunkDisasmRoutine( ULONG64 *lpOffset, PCSTR lpBuffer, ULONG fShowEffectiveAddress ) { RemoteWarn("Disasm"); return FALSE; }
ULONG WDBGAPI RemoteThunkCheckControlCRoutine( VOID ) { ExtApiClass ExtApi(NULL); RemoteWarn("CheckControlC");
return (g_pExtControl != NULL) ? (g_pExtControl->GetInterrupt() == S_OK) : FALSE; }
ULONG WDBGAPI RemoteThunkReadProcessMemoryRoutine( ULONG64 offset, PVOID lpBuffer, ULONG cb, PULONG lpcbBytesRead ) { RemoteWarn("ReadMemory"); if (lpBuffer != NULL) RtlZeroMemory(lpBuffer, cb); if (lpcbBytesRead != NULL) *lpcbBytesRead = 0; return FALSE; }
ULONG WDBGAPI RemoteThunkWriteProcessMemoryRoutine( ULONG64 offset, LPCVOID lpBuffer, ULONG cb, PULONG lpcbBytesWritten ) { RemoteWarn("WriteMemory"); if (lpcbBytesWritten != NULL) *lpcbBytesWritten = 0; return FALSE; }
ULONG WDBGAPI RemoteThunkGetThreadContextRoutine( ULONG Processor, PCONTEXT lpContext, ULONG cbSizeOfContext ) { RemoteWarn("GetContext"); if (lpContext != NULL) RtlZeroMemory(lpContext, cbSizeOfContext); return FALSE; }
ULONG WDBGAPI RemoteThunkSetThreadContextRoutine( ULONG Processor, PCONTEXT lpContext, ULONG cbSizeOfContext ) { RemoteWarn("SetContext"); return FALSE; }
ULONG WDBGAPI RemoteThunkIoctlRoutine( USHORT IoctlType, PVOID lpvData, ULONG cbSize ) { RemoteWarn("Ioctl"); return 0; }
ULONG RemoteThunkStackTraceRoutine( ULONG64 FramePointer, ULONG64 StackPointer, ULONG64 ProgramCounter, PEXTSTACKTRACE64 StackFrames, ULONG Frames ) { RemoteWarn("StackTrace"); return 0; }
void GetRemoteWindbgExtApis( PWINDBG_EXTENSION_APIS64 ExtensionApis ) { ExtensionApis->lpOutputRoutine = RemoteThunkOutputRoutine; ExtensionApis->lpGetExpressionRoutine = RemoteThunkGetExpressionRoutine; ExtensionApis->lpGetSymbolRoutine = RemoteThunkGetSymbolRoutine; ExtensionApis->lpDisasmRoutine = RemoteThunkDisasmRoutine; ExtensionApis->lpCheckControlCRoutine = RemoteThunkCheckControlCRoutine; ExtensionApis->lpReadProcessMemoryRoutine = RemoteThunkReadProcessMemoryRoutine; ExtensionApis->lpWriteProcessMemoryRoutine = RemoteThunkWriteProcessMemoryRoutine; ExtensionApis->lpGetThreadContextRoutine = RemoteThunkGetThreadContextRoutine; ExtensionApis->lpSetThreadContextRoutine = RemoteThunkSetThreadContextRoutine; ExtensionApis->lpIoctlRoutine = RemoteThunkIoctlRoutine; ExtensionApis->lpStackTraceRoutine = RemoteThunkStackTraceRoutine; }
|