windows-nt/Source/XPSP1/NT/sdktools/debuggers/ntsd64/dbgclt.hpp
2020-09-26 16:20:57 +08:00

1855 lines
46 KiB
C++

//----------------------------------------------------------------------------
//
// Debug client classes.
//
// Copyright (C) Microsoft Corporation, 1999-2001.
//
//----------------------------------------------------------------------------
#ifndef __DBGCLT_HPP__
#define __DBGCLT_HPP__
// Most-derived interfaces. When casting back and forth
// from DebugClient to a specific interface these defines
// should be used so that when new versions of interfaces
// are added this is the only place that needs to be updated.
#define IDebugAdvancedN IDebugAdvanced
#define IDebugClientN IDebugClient2
#define IDebugControlN IDebugControl2
#define IDebugDataSpacesN IDebugDataSpaces2
#define IDebugRegistersN IDebugRegisters
#define IDebugSymbolGroupN IDebugSymbolGroup
#define IDebugSymbolsN IDebugSymbols2
#define IDebugSystemObjectsN IDebugSystemObjects2
#define INPUT_BUFFER_SIZE 4096
extern BOOL g_QuietMode;
// The platform ID of the machine running the debugger. Note
// that this may be different from g_TargetPlatformId, which
// is the platform ID of the machine being debugged.
extern ULONG g_DebuggerPlatformId;
// A lock that can be used for any short-term protection needs.
// This lock should not be held for a long time nor should
// other locks be taken when it is held. Users of the lock
// can expect little contention and no deadlock possibilities.
extern CRITICAL_SECTION g_QuickLock;
// The global lock protecting engine state. This lock
// should be taken everywhere and held any time engine
// activity occurs. It should be suspended whenever a
// call needs to call out of the engine, such as with
// callbacks.
extern CRITICAL_SECTION g_EngineLock;
extern ULONG g_EngineNesting;
#define ENTER_ENGINE() \
(EnterCriticalSection(&g_EngineLock), g_EngineNesting++)
#define LEAVE_ENGINE() \
(::FlushCallbacks(), g_EngineNesting--, \
LeaveCriticalSection(&g_EngineLock))
#define SUSPEND_ENGINE() \
(::FlushCallbacks(), LeaveCriticalSection(&g_EngineLock))
#define RESUME_ENGINE() \
EnterCriticalSection(&g_EngineLock)
// Special routine which opportunistically takes the engine lock.
inline HRESULT
TRY_ENTER_ENGINE()
{
if (g_DebuggerPlatformId != VER_PLATFORM_WIN32_NT)
{
return HRESULT_FROM_WIN32(ERROR_CALL_NOT_IMPLEMENTED);
}
if (!g_NtDllCalls.RtlTryEnterCriticalSection(&g_EngineLock))
{
return HRESULT_FROM_WIN32(ERROR_BUSY);
}
g_EngineNesting++;
return S_OK;
}
// Events and storage space for returning event callback
// status from an APC.
extern HANDLE g_EventStatusWaiting;
extern HANDLE g_EventStatusReady;
extern ULONG g_EventStatus;
// Named event to sleep on.
extern HANDLE g_SleepPidEvent;
extern ULONG64 g_ImplicitThreadData;
extern BOOL g_ImplicitThreadDataIsDefault;
extern ULONG64 g_ImplicitProcessData;
extern BOOL g_ImplicitProcessDataIsDefault;
HRESULT GetImplicitThreadData(PULONG64 Offset);
HRESULT GetImplicitThreadDataTeb(PULONG64 Offset);
HRESULT SetImplicitThreadData(ULONG64 Offset, BOOL Verbose);
HRESULT GetImplicitProcessData(PULONG64 Offset);
HRESULT GetImplicitProcessDataPeb(PULONG64 Offset);
HRESULT SetImplicitProcessData(ULONG64 Offset, BOOL Verbose);
void ResetImplicitData(void);
void ParseSetImplicitThread(void);
void ParseSetImplicitProcess(void);
HRESULT
GetContextFromThreadStack(
ULONG64 ThreadBase,
PCROSS_PLATFORM_CONTEXT Context,
PDEBUG_STACK_FRAME StkFrame,
BOOL Verbose
);
HRESULT SetContextFromThreadData(ULONG64 ThreadBase, BOOL Verbose);
//----------------------------------------------------------------------------
//
// DebugClient.
//
//----------------------------------------------------------------------------
extern DebugClient* g_Clients;
extern ULONG g_LogMask;
extern ULONG g_OutputWidth;
extern PCSTR g_OutputLinePrefix;
extern char g_InputBuffer[INPUT_BUFFER_SIZE];
extern ULONG g_InputSequence;
extern HANDLE g_InputEvent;
extern ULONG g_InputSizeRequested;
// The thread that created the current session.
extern ULONG g_SessionThread;
extern ULONG g_EngOptions;
extern ULONG g_GlobalProcOptions;
//
// Engine status flags.
//
#define ENG_STATUS_WAITING 0x00000001
#define ENG_STATUS_SUSPENDED 0x00000002
#define ENG_STATUS_BREAKPOINTS_INSERTED 0x00000004
#define ENG_STATUS_PROCESSES_ADDED 0x00000008
// A true system state change occurred.
#define ENG_STATUS_STATE_CHANGED 0x00000010
#define ENG_STATUS_MODULES_LOADED 0x00000020
#define ENG_STATUS_STOP_SESSION 0x00000040
#define ENG_STATUS_PREPARED_FOR_CALLS 0x00000080
#define ENG_STATUS_NO_AUTO_WAIT 0x00000100
#define ENG_STATUS_PENDING_BREAK_IN 0x00000200
#define ENG_STATUS_AT_INITIAL_BREAK 0x00000400
#define ENG_STATUS_AT_INITIAL_MODULE_LOAD 0x00000800
#define ENG_STATUS_EXIT_CURRENT_WAIT 0x00001000
#define ENG_STATUS_USER_INTERRUPT 0x00002000
extern ULONG g_EngStatus;
//
// Deferred action flags.
// These flags are set during processing in order to indicate
// actions that should be performed before execution begins
// again.
//
#define ENG_DEFER_SET_EVENT 0x00000001
#define ENG_DEFER_RESUME_THREAD 0x00000002
#define ENG_DEFER_DELETE_EXITED 0x00000004
#define ENG_DEFER_EXCEPTION_HANDLING 0x00000008
#define ENG_DEFER_UPDATE_CONTROL_SET 0x00000010
#define ENG_DEFER_HARDWARE_TRACING 0x00000020
#define ENG_DEFER_OUTPUT_CURRENT_INFO 0x00000040
#define ENG_DEFER_CONTINUE_EVENT 0x00000080
extern ULONG g_EngDefer;
//
// Error suppression flags.
// These flags are set when particular errors are displayed
// in order to avoid repeated errors.
//
#define ENG_ERR_DEBUGGER_DATA 0x00000001
extern ULONG g_EngErr;
//
// Per-client flags.
//
#define CLIENT_IN_LIST 0x00000001
#define CLIENT_DESTROYED 0x00000002
#define CLIENT_REMOTE 0x00000004
#define CLIENT_PRIMARY 0x00000008
class DebugClient
: public IDebugAdvanced,
public IDebugClient2,
public IDebugControl2,
public IDebugDataSpaces2,
public IDebugRegisters,
public IDebugSymbols2,
public IDebugSystemObjects2,
public DbgRpcClientObject
{
public:
DebugClient(void);
~DebugClient(void);
void Destroy(void);
// IUnknown.
STDMETHOD(QueryInterface)(
THIS_
IN REFIID InterfaceId,
OUT PVOID* Interface
);
STDMETHOD_(ULONG, AddRef)(
THIS
);
STDMETHOD_(ULONG, Release)(
THIS
);
// IDebugAdvanced.
STDMETHOD(GetThreadContext)(
THIS_
OUT PVOID Context,
IN ULONG ContextSize
);
STDMETHOD(SetThreadContext)(
THIS_
IN PVOID Context,
IN ULONG ContextSize
);
// IDebugClient and IDebugClient2.
STDMETHOD(AttachKernel)(
THIS_
IN ULONG Flags,
IN OPTIONAL PCSTR ConnectOptions
);
STDMETHOD(GetKernelConnectionOptions)(
THIS_
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG OptionsSize
);
STDMETHOD(SetKernelConnectionOptions)(
THIS_
IN PCSTR Options
);
STDMETHOD(StartProcessServer)(
THIS_
IN ULONG Flags,
IN PCSTR Options,
IN PVOID Reserved
);
STDMETHOD(ConnectProcessServer)(
THIS_
IN PCSTR RemoteOptions,
OUT PULONG64 Server
);
STDMETHOD(DisconnectProcessServer)(
THIS_
IN ULONG64 Server
);
STDMETHOD(GetRunningProcessSystemIds)(
THIS_
IN ULONG64 Server,
OUT OPTIONAL /* size_is(Count) */ PULONG Ids,
IN ULONG Count,
OUT OPTIONAL PULONG ActualCount
);
STDMETHOD(GetRunningProcessSystemIdByExecutableName)(
THIS_
IN ULONG64 Server,
IN PCSTR ExeName,
IN ULONG Flags,
OUT PULONG Id
);
STDMETHOD(GetRunningProcessDescription)(
THIS_
IN ULONG64 Server,
IN ULONG SystemId,
IN ULONG Flags,
OUT OPTIONAL PSTR ExeName,
IN ULONG ExeNameSize,
OUT OPTIONAL PULONG ActualExeNameSize,
OUT OPTIONAL PSTR Description,
IN ULONG DescriptionSize,
OUT OPTIONAL PULONG ActualDescriptionSize
);
STDMETHOD(AttachProcess)(
THIS_
IN ULONG64 Server,
IN ULONG ProcessId,
IN ULONG AttachFlags
);
STDMETHOD(CreateProcess)(
THIS_
IN ULONG64 Server,
IN PSTR CommandLine,
IN ULONG CreateFlags
);
STDMETHOD(CreateProcessAndAttach)(
THIS_
IN ULONG64 Server,
IN OPTIONAL PSTR CommandLine,
IN ULONG CreateFlags,
IN ULONG ProcessId,
IN ULONG AttachFlags
);
STDMETHOD(GetProcessOptions)(
THIS_
OUT PULONG Options
);
STDMETHOD(AddProcessOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(RemoveProcessOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(SetProcessOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(OpenDumpFile)(
THIS_
IN PCSTR DumpFile
);
STDMETHOD(WriteDumpFile)(
THIS_
IN PCSTR DumpFile,
IN ULONG Qualifier
);
STDMETHOD(ConnectSession)(
THIS_
IN ULONG Flags,
IN ULONG HistoryLimit
);
STDMETHOD(StartServer)(
THIS_
IN PCSTR Options
);
STDMETHOD(OutputServers)(
THIS_
IN ULONG OutputControl,
IN PCSTR Machine,
IN ULONG Flags
);
STDMETHOD(TerminateProcesses)(
THIS
);
STDMETHOD(DetachProcesses)(
THIS
);
STDMETHOD(EndSession)(
THIS_
IN ULONG Flags
);
STDMETHOD(GetExitCode)(
THIS_
OUT PULONG Code
);
STDMETHOD(DispatchCallbacks)(
THIS_
IN ULONG Timeout
);
STDMETHOD(ExitDispatch)(
THIS_
IN PDEBUG_CLIENT Client
);
STDMETHOD(CreateClient)(
THIS_
OUT PDEBUG_CLIENT* Client
);
STDMETHOD(GetInputCallbacks)(
THIS_
OUT PDEBUG_INPUT_CALLBACKS* Callbacks
);
STDMETHOD(SetInputCallbacks)(
THIS_
IN PDEBUG_INPUT_CALLBACKS Callbacks
);
STDMETHOD(GetOutputCallbacks)(
THIS_
OUT PDEBUG_OUTPUT_CALLBACKS* Callbacks
);
STDMETHOD(SetOutputCallbacks)(
THIS_
IN PDEBUG_OUTPUT_CALLBACKS Callbacks
);
STDMETHOD(GetOutputMask)(
THIS_
OUT PULONG Mask
);
STDMETHOD(SetOutputMask)(
THIS_
IN ULONG Mask
);
STDMETHOD(GetOtherOutputMask)(
THIS_
IN PDEBUG_CLIENT Client,
OUT PULONG Mask
);
STDMETHOD(SetOtherOutputMask)(
THIS_
IN PDEBUG_CLIENT Client,
IN ULONG Mask
);
STDMETHOD(GetOutputWidth)(
THIS_
OUT PULONG Columns
);
STDMETHOD(SetOutputWidth)(
THIS_
IN ULONG Columns
);
STDMETHOD(GetOutputLinePrefix)(
THIS_
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG PrefixSize
);
STDMETHOD(SetOutputLinePrefix)(
THIS_
IN OPTIONAL PCSTR Prefix
);
STDMETHOD(GetIdentity)(
THIS_
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG IdentitySize
);
STDMETHOD(OutputIdentity)(
THIS_
IN ULONG OutputControl,
IN ULONG Flags,
IN PCSTR Format
);
STDMETHOD(GetEventCallbacks)(
THIS_
OUT PDEBUG_EVENT_CALLBACKS* Callbacks
);
STDMETHOD(SetEventCallbacks)(
THIS_
IN PDEBUG_EVENT_CALLBACKS Callbacks
);
STDMETHOD(FlushCallbacks)(
THIS
);
STDMETHOD(WriteDumpFile2)(
THIS_
IN PCSTR DumpFile,
IN ULONG Qualifier,
IN ULONG FormatFlags,
IN OPTIONAL PCSTR Comment
);
STDMETHOD(AddDumpInformationFile)(
THIS_
IN PCSTR InfoFile,
IN ULONG Type
);
STDMETHOD(EndProcessServer)(
THIS_
IN ULONG64 Server
);
STDMETHOD(WaitForProcessServerEnd)(
THIS_
IN ULONG Timeout
);
STDMETHOD(IsKernelDebuggerEnabled)(
THIS
);
STDMETHOD(TerminateCurrentProcess)(
THIS
);
STDMETHOD(DetachCurrentProcess)(
THIS
);
STDMETHOD(AbandonCurrentProcess)(
THIS
);
// IDebugControl and IDebugControl2.
STDMETHOD(GetInterrupt)(
THIS
);
STDMETHOD(SetInterrupt)(
THIS_
IN ULONG Flags
);
STDMETHOD(GetInterruptTimeout)(
THIS_
OUT PULONG Seconds
);
STDMETHOD(SetInterruptTimeout)(
THIS_
IN ULONG Seconds
);
STDMETHOD(GetLogFile)(
THIS_
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG FileSize,
OUT PBOOL Append
);
STDMETHOD(OpenLogFile)(
THIS_
IN PCSTR File,
IN BOOL Append
);
STDMETHOD(CloseLogFile)(
THIS
);
STDMETHOD(GetLogMask)(
THIS_
OUT PULONG Mask
);
STDMETHOD(SetLogMask)(
THIS_
IN ULONG Mask
);
STDMETHOD(Input)(
THIS_
OUT PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG InputSize
);
STDMETHOD(ReturnInput)(
THIS_
IN PCSTR Buffer
);
STDMETHODV(Output)(
THIS_
IN ULONG Mask,
IN PCSTR Format,
...
);
STDMETHOD(OutputVaList)(
THIS_
IN ULONG Mask,
IN PCSTR Format,
IN va_list Args
);
STDMETHODV(ControlledOutput)(
THIS_
IN ULONG OutputControl,
IN ULONG Mask,
IN PCSTR Format,
...
);
STDMETHOD(ControlledOutputVaList)(
THIS_
IN ULONG OutputControl,
IN ULONG Mask,
IN PCSTR Format,
IN va_list Args
);
STDMETHOD(OutputPrompt)(
THIS_
IN ULONG OutputControl,
IN OPTIONAL PCSTR Format,
...
);
STDMETHOD(OutputPromptVaList)(
THIS_
IN ULONG OutputControl,
IN OPTIONAL PCSTR Format,
IN va_list Args
);
STDMETHOD(GetPromptText)(
THIS_
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG TextSize
);
STDMETHOD(OutputCurrentState)(
THIS_
IN ULONG OutputControl,
IN ULONG Flags
);
STDMETHOD(OutputVersionInformation)(
THIS_
IN ULONG OutputControl
);
STDMETHOD(GetNotifyEventHandle)(
THIS_
OUT PULONG64 Handle
);
STDMETHOD(SetNotifyEventHandle)(
THIS_
IN ULONG64 Handle
);
STDMETHOD(Assemble)(
THIS_
IN ULONG64 Offset,
IN PCSTR Instr,
OUT PULONG64 EndOffset
);
STDMETHOD(Disassemble)(
THIS_
IN ULONG64 Offset,
IN ULONG Flags,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG DisassemblySize,
OUT PULONG64 EndOffset
);
STDMETHOD(GetDisassembleEffectiveOffset)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(OutputDisassembly)(
THIS_
IN ULONG OutputControl,
IN ULONG64 Offset,
IN ULONG Flags,
OUT PULONG64 EndOffset
);
STDMETHOD(OutputDisassemblyLines)(
THIS_
IN ULONG OutputControl,
IN ULONG PreviousLines,
IN ULONG TotalLines,
IN ULONG64 Offset,
IN ULONG Flags,
OUT OPTIONAL PULONG OffsetLine,
OUT OPTIONAL PULONG64 StartOffset,
OUT OPTIONAL PULONG64 EndOffset,
OUT OPTIONAL /* size_is(TotalLines) */ PULONG64 LineOffsets
);
STDMETHOD(GetNearInstruction)(
THIS_
IN ULONG64 Offset,
IN LONG Delta,
OUT PULONG64 NearOffset
);
STDMETHOD(GetStackTrace)(
THIS_
IN ULONG64 FrameOffset,
IN ULONG64 StackOffset,
IN ULONG64 InstructionOffset,
OUT PDEBUG_STACK_FRAME Frames,
IN ULONG FramesSize,
OUT PULONG FramesFilled
);
STDMETHOD(GetReturnOffset)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(OutputStackTrace)(
THIS_
IN ULONG OutputControl,
IN PDEBUG_STACK_FRAME Frames,
IN ULONG FramesSize,
IN ULONG Flags
);
STDMETHOD(GetDebuggeeType)(
THIS_
OUT PULONG Class,
OUT PULONG Qualifier
);
STDMETHOD(GetActualProcessorType)(
THIS_
OUT PULONG Type
);
STDMETHOD(GetExecutingProcessorType)(
THIS_
OUT PULONG Type
);
STDMETHOD(GetNumberPossibleExecutingProcessorTypes)(
THIS_
OUT PULONG Number
);
STDMETHOD(GetPossibleExecutingProcessorTypes)(
THIS_
IN ULONG Start,
IN ULONG Count,
OUT PULONG Types
);
STDMETHOD(GetNumberProcessors)(
THIS_
OUT PULONG Number
);
STDMETHOD(GetSystemVersion)(
THIS_
OUT PULONG PlatformId,
OUT PULONG Major,
OUT PULONG Minor,
OUT OPTIONAL PSTR ServicePackString,
IN ULONG ServicePackStringSize,
OUT OPTIONAL PULONG ServicePackStringUsed,
OUT PULONG ServicePackNumber,
OUT OPTIONAL PSTR BuildString,
IN ULONG BuildStringSize,
OUT OPTIONAL PULONG BuildStringUsed
);
STDMETHOD(GetPageSize)(
THIS_
OUT PULONG Size
);
STDMETHOD(IsPointer64Bit)(
THIS
);
STDMETHOD(ReadBugCheckData)(
THIS_
OUT PULONG Code,
OUT PULONG64 Arg1,
OUT PULONG64 Arg2,
OUT PULONG64 Arg3,
OUT PULONG64 Arg4
);
STDMETHOD(GetNumberSupportedProcessorTypes)(
THIS_
OUT PULONG Number
);
STDMETHOD(GetSupportedProcessorTypes)(
THIS_
IN ULONG Start,
IN ULONG Count,
OUT PULONG Types
);
STDMETHOD(GetProcessorTypeNames)(
THIS_
IN ULONG Type,
OUT OPTIONAL PSTR FullNameBuffer,
IN ULONG FullNameBufferSize,
OUT OPTIONAL PULONG FullNameSize,
OUT OPTIONAL PSTR AbbrevNameBuffer,
IN ULONG AbbrevNameBufferSize,
OUT OPTIONAL PULONG AbbrevNameSize
);
STDMETHOD(GetEffectiveProcessorType)(
THIS_
OUT PULONG Type
);
STDMETHOD(SetEffectiveProcessorType)(
THIS_
IN ULONG Type
);
STDMETHOD(GetExecutionStatus)(
THIS_
OUT PULONG Status
);
STDMETHOD(SetExecutionStatus)(
THIS_
IN ULONG Status
);
STDMETHOD(GetCodeLevel)(
THIS_
OUT PULONG Level
);
STDMETHOD(SetCodeLevel)(
THIS_
IN ULONG Level
);
STDMETHOD(GetEngineOptions)(
THIS_
OUT PULONG Options
);
STDMETHOD(AddEngineOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(RemoveEngineOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(SetEngineOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(GetSystemErrorControl)(
THIS_
OUT PULONG OutputLevel,
OUT PULONG BreakLevel
);
STDMETHOD(SetSystemErrorControl)(
THIS_
IN ULONG OutputLevel,
IN ULONG BreakLevel
);
STDMETHOD(GetTextMacro)(
THIS_
IN ULONG Slot,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG MacroSize
);
STDMETHOD(SetTextMacro)(
THIS_
IN ULONG Slot,
IN PCSTR Macro
);
STDMETHOD(GetRadix)(
THIS_
OUT PULONG Radix
);
STDMETHOD(SetRadix)(
THIS_
IN ULONG Radix
);
STDMETHOD(Evaluate)(
THIS_
IN PCSTR Expression,
IN ULONG DesiredType,
OUT PDEBUG_VALUE Value,
OUT OPTIONAL PULONG RemainderIndex
);
STDMETHOD(CoerceValue)(
THIS_
IN PDEBUG_VALUE In,
IN ULONG OutType,
OUT PDEBUG_VALUE Out
);
STDMETHOD(CoerceValues)(
THIS_
IN ULONG Count,
IN /* size_is(Count) */ PDEBUG_VALUE In,
IN /* size_is(Count) */ PULONG OutTypes,
OUT /* size_is(Count) */ PDEBUG_VALUE Out
);
STDMETHOD(Execute)(
THIS_
IN ULONG OutputControl,
IN PCSTR Command,
IN ULONG Flags
);
STDMETHOD(ExecuteCommandFile)(
THIS_
IN ULONG OutputControl,
IN PCSTR CommandFile,
IN ULONG Flags
);
STDMETHOD(GetNumberBreakpoints)(
THIS_
OUT PULONG Number
);
STDMETHOD(GetBreakpointByIndex)(
THIS_
IN ULONG Index,
OUT PDEBUG_BREAKPOINT* Bp
);
STDMETHOD(GetBreakpointById)(
THIS_
IN ULONG Id,
OUT PDEBUG_BREAKPOINT* Bp
);
STDMETHOD(GetBreakpointParameters)(
THIS_
IN ULONG Count,
IN OPTIONAL /* size_is(Count) */ PULONG Ids,
IN ULONG Start,
OUT /* size_is(Count) */ PDEBUG_BREAKPOINT_PARAMETERS Params
);
STDMETHOD(AddBreakpoint)(
THIS_
IN ULONG Type,
IN ULONG DesiredId,
OUT PDEBUG_BREAKPOINT* Bp
);
STDMETHOD(RemoveBreakpoint)(
THIS_
IN PDEBUG_BREAKPOINT Bp
);
STDMETHOD(AddExtension)(
THIS_
IN PCSTR Path,
IN ULONG Flags,
OUT PULONG64 Handle
);
STDMETHOD(RemoveExtension)(
THIS_
IN ULONG64 Handle
);
STDMETHOD(GetExtensionByPath)(
THIS_
IN PCSTR Path,
OUT PULONG64 Handle
);
STDMETHOD(CallExtension)(
THIS_
IN OPTIONAL ULONG64 Handle,
IN PCSTR Function,
IN OPTIONAL PCSTR Arguments
);
STDMETHOD(GetExtensionFunction)(
THIS_
IN ULONG64 Handle,
IN PCSTR FuncName,
OUT FARPROC* Function
);
STDMETHOD(GetWindbgExtensionApis32)(
THIS_
IN OUT PWINDBG_EXTENSION_APIS32 Api
);
STDMETHOD(GetWindbgExtensionApis64)(
THIS_
IN OUT PWINDBG_EXTENSION_APIS64 Api
);
STDMETHOD(GetNumberEventFilters)(
THIS_
OUT PULONG SpecificEvents,
OUT PULONG SpecificExceptions,
OUT PULONG ArbitraryExceptions
);
STDMETHOD(GetEventFilterText)(
THIS_
IN ULONG Index,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG TextSize
);
STDMETHOD(GetEventFilterCommand)(
THIS_
IN ULONG Index,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG CommandSize
);
STDMETHOD(SetEventFilterCommand)(
THIS_
IN ULONG Index,
IN PCSTR Command
);
STDMETHOD(GetSpecificFilterParameters)(
THIS_
IN ULONG Start,
IN ULONG Count,
OUT /* size_is(Count) */ PDEBUG_SPECIFIC_FILTER_PARAMETERS Params
);
STDMETHOD(SetSpecificFilterParameters)(
THIS_
IN ULONG Start,
IN ULONG Count,
IN /* size_is(Count) */ PDEBUG_SPECIFIC_FILTER_PARAMETERS Params
);
STDMETHOD(GetSpecificFilterArgument)(
THIS_
IN ULONG Index,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG ArgumentSize
);
STDMETHOD(SetSpecificFilterArgument)(
THIS_
IN ULONG Index,
IN PCSTR Argument
);
STDMETHOD(GetExceptionFilterParameters)(
THIS_
IN ULONG Count,
IN OPTIONAL /* size_is(Count) */ PULONG Codes,
IN ULONG Start,
OUT /* size_is(Count) */ PDEBUG_EXCEPTION_FILTER_PARAMETERS Params
);
STDMETHOD(SetExceptionFilterParameters)(
THIS_
IN ULONG Count,
IN /* size_is(Count) */ PDEBUG_EXCEPTION_FILTER_PARAMETERS Params
);
STDMETHOD(GetExceptionFilterSecondCommand)(
THIS_
IN ULONG Index,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG CommandSize
);
STDMETHOD(SetExceptionFilterSecondCommand)(
THIS_
IN ULONG Index,
IN PCSTR Command
);
STDMETHOD(WaitForEvent)(
THIS_
IN ULONG Flags,
IN ULONG Timeout
);
STDMETHOD(GetLastEventInformation)(
THIS_
PULONG Type,
OUT PULONG ProcessId,
OUT PULONG ThreadId,
OUT OPTIONAL PVOID ExtraInformation,
IN ULONG ExtraInformationSize,
OUT OPTIONAL PULONG ExtraInformationUsed,
OUT OPTIONAL PSTR Description,
IN ULONG DescriptionSize,
OUT OPTIONAL PULONG DescriptionUsed
);
STDMETHOD(GetCurrentTimeDate)(
THIS_
OUT PULONG TimeDate
);
STDMETHOD(GetCurrentSystemUpTime)(
THIS_
OUT PULONG UpTime
);
STDMETHOD(GetDumpFormatFlags)(
THIS_
OUT PULONG FormatFlags
);
STDMETHOD(GetNumberTextReplacements)(
THIS_
OUT PULONG NumRepl
);
STDMETHOD(GetTextReplacement)(
THIS_
IN OPTIONAL PCSTR SrcText,
IN ULONG Index,
OUT OPTIONAL PSTR SrcBuffer,
IN ULONG SrcBufferSize,
OUT OPTIONAL PULONG SrcSize,
OUT OPTIONAL PSTR DstBuffer,
IN ULONG DstBufferSize,
OUT OPTIONAL PULONG DstSize
);
STDMETHOD(SetTextReplacement)(
THIS_
IN PCSTR SrcText,
IN OPTIONAL PCSTR DstText
);
STDMETHOD(RemoveTextReplacements)(
THIS
);
STDMETHOD(OutputTextReplacements)(
THIS_
IN ULONG OutputControl,
IN ULONG Flags
);
// IDebugDataSpaces and IDebugDataSpaces2.
STDMETHOD(ReadVirtual)(
THIS_
IN ULONG64 Offset,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(WriteVirtual)(
THIS_
IN ULONG64 Offset,
IN PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesWritten
);
STDMETHOD(SearchVirtual)(
THIS_
IN ULONG64 Offset,
IN ULONG64 Length,
IN PVOID Pattern,
IN ULONG PatternSize,
IN ULONG PatternGranularity,
OUT PULONG64 MatchOffset
);
STDMETHOD(ReadVirtualUncached)(
THIS_
IN ULONG64 Offset,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(WriteVirtualUncached)(
THIS_
IN ULONG64 Offset,
IN PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesWritten
);
STDMETHOD(ReadPointersVirtual)(
THIS_
IN ULONG Count,
IN ULONG64 Offset,
OUT /* size_is(Count) */ PULONG64 Ptrs
);
STDMETHOD(WritePointersVirtual)(
THIS_
IN ULONG Count,
IN ULONG64 Offset,
IN /* size_is(Count) */ PULONG64 Ptrs
);
STDMETHOD(ReadPhysical)(
THIS_
IN ULONG64 Offset,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(WritePhysical)(
THIS_
IN ULONG64 Offset,
IN PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesWritten
);
STDMETHOD(ReadControl)(
THIS_
IN ULONG Processor,
IN ULONG64 Offset,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(WriteControl)(
THIS_
IN ULONG Processor,
IN ULONG64 Offset,
IN PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesWritten
);
STDMETHOD(ReadIo)(
THIS_
IN ULONG InterfaceType,
IN ULONG BusNumber,
IN ULONG AddressSpace,
IN ULONG64 Offset,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(WriteIo)(
THIS_
IN ULONG InterfaceType,
IN ULONG BusNumber,
IN ULONG AddressSpace,
IN ULONG64 Offset,
IN PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesWritten
);
STDMETHOD(ReadMsr)(
THIS_
IN ULONG Msr,
OUT PULONG64 Value
);
STDMETHOD(WriteMsr)(
THIS_
IN ULONG Msr,
IN ULONG64 Value
);
STDMETHOD(ReadBusData)(
THIS_
IN ULONG BusDataType,
IN ULONG BusNumber,
IN ULONG SlotNumber,
IN ULONG Offset,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(WriteBusData)(
THIS_
IN ULONG BusDataType,
IN ULONG BusNumber,
IN ULONG SlotNumber,
IN ULONG Offset,
IN PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesWritten
);
STDMETHOD(CheckLowMemory)(
THIS
);
STDMETHOD(ReadDebuggerData)(
THIS_
IN ULONG Index,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(ReadProcessorSystemData)(
THIS_
IN ULONG Processor,
IN ULONG Index,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(VirtualToPhysical)(
THIS_
IN ULONG64 Virtual,
OUT PULONG64 Physical
);
STDMETHOD(GetVirtualTranslationPhysicalOffsets)(
THIS_
IN ULONG64 Virtual,
OUT OPTIONAL /* size_is(OffsetsSize) */ PULONG64 Offsets,
IN ULONG OffsetsSize,
OUT OPTIONAL PULONG Levels
);
STDMETHOD(ReadHandleData)(
THIS_
IN ULONG64 Handle,
IN ULONG DataType,
OUT OPTIONAL PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG DataSize
);
STDMETHOD(FillVirtual)(
THIS_
IN ULONG64 Start,
IN ULONG Size,
IN PVOID Pattern,
IN ULONG PatternSize,
OUT OPTIONAL PULONG Filled
);
STDMETHOD(FillPhysical)(
THIS_
IN ULONG64 Start,
IN ULONG Size,
IN PVOID Pattern,
IN ULONG PatternSize,
OUT OPTIONAL PULONG Filled
);
STDMETHOD(QueryVirtual)(
THIS_
IN ULONG64 Offset,
OUT PMEMORY_BASIC_INFORMATION64 Info
);
// IDebugRegisters.
STDMETHOD(GetNumberRegisters)(
THIS_
OUT PULONG Number
);
STDMETHOD(GetDescription)(
THIS_
IN ULONG Register,
OUT OPTIONAL PSTR NameBuffer,
IN ULONG NameBufferSize,
OUT OPTIONAL PULONG NameSize,
OUT OPTIONAL PDEBUG_REGISTER_DESCRIPTION Desc
);
STDMETHOD(GetIndexByName)(
THIS_
IN PCSTR Name,
OUT PULONG Index
);
STDMETHOD(GetValue)(
THIS_
IN ULONG Register,
OUT PDEBUG_VALUE Value
);
STDMETHOD(SetValue)(
THIS_
IN ULONG Register,
IN PDEBUG_VALUE Value
);
STDMETHOD(GetValues)(
THIS_
IN ULONG Count,
IN OPTIONAL PULONG Indices,
IN ULONG Start,
OUT PDEBUG_VALUE Values
);
STDMETHOD(SetValues)(
THIS_
IN ULONG Count,
IN OPTIONAL PULONG Indices,
IN ULONG Start,
IN PDEBUG_VALUE Values
);
STDMETHOD(OutputRegisters)(
THIS_
IN ULONG OutputControl,
IN ULONG Flags
);
STDMETHOD(GetInstructionOffset)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(GetStackOffset)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(GetFrameOffset)(
THIS_
OUT PULONG64 Offset
);
// IDebugSymbols and IDebugSymbols2.
STDMETHOD(GetSymbolOptions)(
THIS_
OUT PULONG Options
);
STDMETHOD(AddSymbolOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(RemoveSymbolOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(SetSymbolOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(GetNameByOffset)(
THIS_
IN ULONG64 Offset,
OUT OPTIONAL PSTR NameBuffer,
IN ULONG NameBufferSize,
OUT OPTIONAL PULONG NameSize,
OUT OPTIONAL PULONG64 Displacement
);
STDMETHOD(GetOffsetByName)(
THIS_
IN PCSTR Symbol,
OUT PULONG64 Offset
);
STDMETHOD(GetNearNameByOffset)(
THIS_
IN ULONG64 Offset,
IN LONG Delta,
OUT OPTIONAL PSTR NameBuffer,
IN ULONG NameBufferSize,
OUT OPTIONAL PULONG NameSize,
OUT OPTIONAL PULONG64 Displacement
);
STDMETHOD(GetLineByOffset)(
THIS_
IN ULONG64 Offset,
OUT PULONG Line,
OUT OPTIONAL PSTR FileBuffer,
IN ULONG FileBufferSize,
OUT OPTIONAL PULONG FileSize,
OUT OPTIONAL PULONG64 Displacement
);
STDMETHOD(GetOffsetByLine)(
THIS_
IN ULONG Line,
IN PCSTR File,
OUT PULONG64 Offset
);
STDMETHOD(GetNumberModules)(
THIS_
OUT PULONG Loaded,
OUT PULONG Unloaded
);
STDMETHOD(GetModuleByIndex)(
THIS_
IN ULONG Index,
OUT PULONG64 Base
);
STDMETHOD(GetModuleByModuleName)(
THIS_
IN PCSTR Name,
IN ULONG StartIndex,
OUT OPTIONAL PULONG Index,
OUT OPTIONAL PULONG64 Base
);
STDMETHOD(GetModuleByOffset)(
THIS_
IN ULONG64 Offset,
IN ULONG StartIndex,
OUT OPTIONAL PULONG Index,
OUT OPTIONAL PULONG64 Base
);
STDMETHOD(GetModuleNames)(
THIS_
IN ULONG Index,
IN ULONG64 Base,
OUT OPTIONAL PSTR ImageNameBuffer,
IN ULONG ImageNameBufferSize,
OUT OPTIONAL PULONG ImageNameSize,
OUT OPTIONAL PSTR ModuleNameBuffer,
IN ULONG ModuleNameBufferSize,
OUT OPTIONAL PULONG ModuleNameSize,
OUT OPTIONAL PSTR LoadedImageNameBuffer,
IN ULONG LoadedImageNameBufferSize,
OUT OPTIONAL PULONG LoadedImageNameSize
);
STDMETHOD(GetModuleParameters)(
THIS_
IN ULONG Count,
IN OPTIONAL /* size_is(Count) */ PULONG64 Bases,
IN ULONG Start,
OUT /* size_is(Count) */ PDEBUG_MODULE_PARAMETERS Params
);
STDMETHOD(GetSymbolModule)(
THIS_
IN PCSTR Symbol,
OUT PULONG64 Base
);
STDMETHOD(GetTypeName)(
THIS_
IN ULONG64 Module,
IN ULONG TypeId,
OUT OPTIONAL PSTR NameBuffer,
IN ULONG NameBufferSize,
OUT OPTIONAL PULONG NameSize
);
STDMETHOD(GetTypeId)(
THIS_
IN ULONG64 Module,
IN PCSTR Name,
OUT PULONG TypeId
);
STDMETHOD(GetTypeSize)(
THIS_
IN ULONG64 Module,
IN ULONG TypeId,
OUT PULONG Size
);
STDMETHOD(GetFieldOffset)(
THIS_
IN ULONG64 Module,
IN ULONG TypeId,
IN PCSTR Field,
OUT PULONG Offset
);
STDMETHOD(GetSymbolTypeId)(
THIS_
IN PCSTR Symbol,
OUT PULONG TypeId,
OUT OPTIONAL PULONG64 Module
);
STDMETHOD(GetOffsetTypeId)(
THIS_
IN ULONG64 Offset,
OUT PULONG TypeId,
OUT OPTIONAL PULONG64 Module
);
STDMETHOD(ReadTypedDataVirtual)(
THIS_
IN ULONG64 Offset,
IN ULONG64 Module,
IN ULONG TypeId,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(WriteTypedDataVirtual)(
THIS_
IN ULONG64 Offset,
IN ULONG64 Module,
IN ULONG TypeId,
IN PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesWritten
);
STDMETHOD(OutputTypedDataVirtual)(
THIS_
IN ULONG OutputControl,
IN ULONG64 Offset,
IN ULONG64 Module,
IN ULONG TypeId,
IN ULONG Flags
);
STDMETHOD(ReadTypedDataPhysical)(
THIS_
IN ULONG64 Offset,
IN ULONG64 Module,
IN ULONG TypeId,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
);
STDMETHOD(WriteTypedDataPhysical)(
THIS_
IN ULONG64 Offset,
IN ULONG64 Module,
IN ULONG TypeId,
IN PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesWritten
);
STDMETHOD(OutputTypedDataPhysical)(
THIS_
IN ULONG OutputControl,
IN ULONG64 Offset,
IN ULONG64 Module,
IN ULONG TypeId,
IN ULONG Flags
);
STDMETHOD(GetScope)(
THIS_
OUT OPTIONAL PULONG64 InstructionOffset,
OUT OPTIONAL PDEBUG_STACK_FRAME ScopeFrame,
OUT OPTIONAL PVOID ScopeContext,
IN ULONG ScopeContextSize
);
STDMETHOD(SetScope)(
THIS_
IN ULONG64 InstructionOffset,
IN OPTIONAL PDEBUG_STACK_FRAME ScopeFrame,
IN OPTIONAL PVOID ScopeContext,
IN ULONG ScopeContextSize
);
STDMETHOD(ResetScope)(
THIS
);
STDMETHOD(GetScopeSymbolGroup)(
THIS_
IN ULONG Flags,
IN OPTIONAL PDEBUG_SYMBOL_GROUP Update,
OUT PDEBUG_SYMBOL_GROUP* Symbols
);
STDMETHOD(CreateSymbolGroup)(
THIS_
OUT PDEBUG_SYMBOL_GROUP* Group
);
STDMETHOD(StartSymbolMatch)(
THIS_
IN PCSTR Pattern,
OUT PULONG64 Handle
);
STDMETHOD(GetNextSymbolMatch)(
THIS_
IN ULONG64 Handle,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG MatchSize,
OUT OPTIONAL PULONG64 Offset
);
STDMETHOD(EndSymbolMatch)(
THIS_
IN ULONG64 Handle
);
STDMETHOD(Reload)(
THIS_
IN PCSTR Module
);
STDMETHOD(GetSymbolPath)(
THIS_
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG PathSize
);
STDMETHOD(SetSymbolPath)(
THIS_
IN PCSTR Path
);
STDMETHOD(AppendSymbolPath)(
THIS_
IN PCSTR Addition
);
STDMETHOD(GetImagePath)(
THIS_
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG PathSize
);
STDMETHOD(SetImagePath)(
THIS_
IN PCSTR Path
);
STDMETHOD(AppendImagePath)(
THIS_
IN PCSTR Addition
);
STDMETHOD(GetSourcePath)(
THIS_
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG PathSize
);
STDMETHOD(GetSourcePathElement)(
THIS_
IN ULONG Index,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG PathSize
);
STDMETHOD(SetSourcePath)(
THIS_
IN PCSTR Path
);
STDMETHOD(AppendSourcePath)(
THIS_
IN PCSTR Addition
);
STDMETHOD(FindSourceFile)(
THIS_
IN ULONG StartElement,
IN PCSTR File,
IN ULONG Flags,
OUT OPTIONAL PULONG FoundElement,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG FoundSize
);
STDMETHOD(GetSourceFileLineOffsets)(
THIS_
IN PCSTR File,
OUT OPTIONAL PULONG64 Buffer,
IN ULONG BufferLines,
OUT OPTIONAL PULONG FileLines
);
STDMETHOD(GetModuleVersionInformation)(
THIS_
IN ULONG Index,
IN ULONG64 Base,
IN PCSTR Item,
OUT OPTIONAL PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG VerInfoSize
);
STDMETHOD(GetModuleNameString)(
THIS_
IN ULONG Which,
IN ULONG Index,
IN ULONG64 Base,
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG NameSize
);
STDMETHOD(GetConstantName)(
THIS_
IN ULONG64 Module,
IN ULONG TypeId,
IN ULONG64 Value,
OUT OPTIONAL PSTR NameBuffer,
IN ULONG NameBufferSize,
OUT OPTIONAL PULONG NameSize
);
STDMETHOD(GetFieldName)(
THIS_
IN ULONG64 Module,
IN ULONG TypeId,
IN ULONG FieldIndex,
OUT OPTIONAL PSTR NameBuffer,
IN ULONG NameBufferSize,
OUT OPTIONAL PULONG NameSize
);
STDMETHOD(GetTypeOptions)(
THIS_
OUT PULONG Options
);
STDMETHOD(SetTypeOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(AddTypeOptions)(
THIS_
IN ULONG Options
);
STDMETHOD(RemoveTypeOptions)(
THIS_
IN ULONG Options
);
// IDebugSystemObjects.
STDMETHOD(GetEventThread)(
THIS_
OUT PULONG Id
);
STDMETHOD(GetEventProcess)(
THIS_
OUT PULONG Id
);
STDMETHOD(GetCurrentThreadId)(
THIS_
OUT PULONG Id
);
STDMETHOD(SetCurrentThreadId)(
THIS_
IN ULONG Id
);
STDMETHOD(GetCurrentProcessId)(
THIS_
OUT PULONG Id
);
STDMETHOD(SetCurrentProcessId)(
THIS_
IN ULONG Id
);
STDMETHOD(GetNumberThreads)(
THIS_
OUT PULONG Number
);
STDMETHOD(GetTotalNumberThreads)(
THIS_
OUT PULONG Total,
OUT PULONG LargestProcess
);
STDMETHOD(GetThreadIdsByIndex)(
THIS_
IN ULONG Start,
IN ULONG Count,
OUT OPTIONAL /* size_is(Count) */ PULONG Ids,
OUT OPTIONAL /* size_is(Count) */ PULONG SysIds
);
STDMETHOD(GetThreadIdByProcessor)(
THIS_
IN ULONG Processor,
OUT PULONG Id
);
STDMETHOD(GetCurrentThreadDataOffset)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(GetThreadIdByDataOffset)(
THIS_
IN ULONG64 Offset,
OUT PULONG Id
);
STDMETHOD(GetCurrentThreadTeb)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(GetThreadIdByTeb)(
THIS_
IN ULONG64 Offset,
OUT PULONG Id
);
STDMETHOD(GetCurrentThreadSystemId)(
THIS_
OUT PULONG SysId
);
STDMETHOD(GetThreadIdBySystemId)(
THIS_
IN ULONG SysId,
OUT PULONG Id
);
STDMETHOD(GetCurrentThreadHandle)(
THIS_
OUT PULONG64 Handle
);
STDMETHOD(GetThreadIdByHandle)(
THIS_
IN ULONG64 Handle,
OUT PULONG Id
);
STDMETHOD(GetNumberProcesses)(
THIS_
OUT PULONG Number
);
STDMETHOD(GetProcessIdsByIndex)(
THIS_
IN ULONG Start,
IN ULONG Count,
OUT OPTIONAL /* size_is(Count) */ PULONG Ids,
OUT OPTIONAL /* size_is(Count) */ PULONG SysIds
);
STDMETHOD(GetCurrentProcessDataOffset)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(GetProcessIdByDataOffset)(
THIS_
IN ULONG64 Offset,
OUT PULONG Id
);
STDMETHOD(GetCurrentProcessPeb)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(GetProcessIdByPeb)(
THIS_
IN ULONG64 Offset,
OUT PULONG Id
);
STDMETHOD(GetCurrentProcessSystemId)(
THIS_
OUT PULONG SysId
);
STDMETHOD(GetProcessIdBySystemId)(
THIS_
IN ULONG SysId,
OUT PULONG Id
);
STDMETHOD(GetCurrentProcessHandle)(
THIS_
OUT PULONG64 Handle
);
STDMETHOD(GetProcessIdByHandle)(
THIS_
IN ULONG64 Handle,
OUT PULONG Id
);
STDMETHOD(GetCurrentProcessExecutableName)(
THIS_
OUT OPTIONAL PSTR Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG ExeSize
);
// IDebugSystemObjects2.
STDMETHOD(GetCurrentProcessUpTime)(
THIS_
OUT PULONG UpTime
);
STDMETHOD(GetImplicitThreadDataOffset)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(SetImplicitThreadDataOffset)(
THIS_
IN ULONG64 Offset
);
STDMETHOD(GetImplicitProcessDataOffset)(
THIS_
OUT PULONG64 Offset
);
STDMETHOD(SetImplicitProcessDataOffset)(
THIS_
IN ULONG64 Offset
);
// DbgRpcClientObject.
virtual HRESULT Initialize(PSTR Identity, PVOID* Interface);
virtual void Finalize(void);
virtual void Uninitialize(void);
//------------------------------------------------------------------------
// General.
HRESULT Initialize(void);
void InitializePrimary(void);
void Link(void);
void Unlink(void);
DebugClient* m_Next;
DebugClient* m_Prev;
ULONG m_Refs;
ULONG m_Flags;
ULONG m_ThreadId;
HANDLE m_Thread;
char m_Identity[DBGRPC_MAX_IDENTITY];
time_t m_LastActivity;
PDEBUG_EVENT_CALLBACKS m_EventCb;
ULONG m_EventInterest;
HANDLE m_DispatchSema;
PDEBUG_INPUT_CALLBACKS m_InputCb;
ULONG m_InputSequence;
PDEBUG_OUTPUT_CALLBACKS m_OutputCb;
ULONG m_OutMask;
ULONG m_OutputWidth;
PCSTR m_OutputLinePrefix;
};
ULONG GetExecutionStatus(void);
HRESULT SetExecutionStatus(ULONG Status);
HRESULT Execute(DebugClient* Client, PCSTR Command, ULONG Flags);
HRESULT ExecuteCommandFile(DebugClient* Client, PCSTR File, ULONG Flags);
HRESULT LiveKernelInitialize(DebugClient* Client, ULONG Qual, PCSTR Options);
HRESULT UserInitialize(DebugClient* Client, ULONG64 Server);
HRESULT InitializeTarget();
HRESULT InitializeMachine(ULONG Machine);
void DiscardTarget(ULONG Reason);
void DiscardMachine(ULONG Reason);
void GetClientIdentity(PSTR Identity);
#endif // #ifndef __DBGCLT_HPP__