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

384 lines
9.7 KiB
C

//----------------------------------------------------------------------------
//
// Low-level debugging service interfaces.
//
// Copyright (C) Microsoft Corporation, 1999-2000.
//
//----------------------------------------------------------------------------
#ifndef __DBGSVC_H__
#define __DBGSVC_H__
#include <stdarg.h>
#include <objbase.h>
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------------
//
// GUIDs and interface forward declarations.
//
//----------------------------------------------------------------------------
/* a7ba24c4-e4fb-4625-a8fc-b1cb1fd51f53 */
DEFINE_GUID(IID_IUserDebugServices, 0xa7ba24c4, 0xe4fb, 0x4625,
0xa8, 0xfc, 0xb1, 0xcb, 0x1f, 0xd5, 0x1f, 0x53);
typedef interface DECLSPEC_UUID("a7ba24c4-e4fb-4625-a8fc-b1cb1fd51f53")
IUserDebugServices* PUSER_DEBUG_SERVICES;
//----------------------------------------------------------------------------
//
// IUserDebugServices.
//
//----------------------------------------------------------------------------
// The service implementation does not implement Insert/RemoveCodeBreakpoints
// directly, instead it is the caller's responsibility to handle them
// via break instruction insertion and removal.
#define DBGSVC_GENERIC_CODE_BREAKPOINTS 0x00000001
// Handles returned in create process and create thread events
// are not automatically closed. Instead it is the responsibility
// of the caller to close them when they are no longer needed.
#define DBGSVC_CLOSE_PROC_THREAD_HANDLES 0x00000002
// Handle to ULONG64 and back.
#define SERVICE_HANDLE(OsHandle) ((ULONG64)(OsHandle))
#define OS_HANDLE(SvcHandle) ((HANDLE)(ULONG_PTR)(SvcHandle))
typedef struct _USER_THREAD_INFO
{
ULONG64 Handle;
ULONG Id;
ULONG Reserved;
} USER_THREAD_INFO, *PUSER_THREAD_INFO;
#undef INTERFACE
#define INTERFACE IUserDebugServices
DECLARE_INTERFACE_(IUserDebugServices, IUnknown)
{
// IUnknown.
STDMETHOD(QueryInterface)(
THIS_
IN REFIID InterfaceId,
OUT PVOID* Interface
) PURE;
STDMETHOD_(ULONG, AddRef)(
THIS
) PURE;
STDMETHOD_(ULONG, Release)(
THIS
) PURE;
// IUserDebugServices.
STDMETHOD(Initialize)(
THIS_
OUT PULONG Flags
) PURE;
STDMETHOD(Uninitialize)(
THIS_
IN BOOL Global
) PURE;
STDMETHOD(GetTargetInfo)(
THIS_
OUT PULONG MachineType,
OUT PULONG NumberProcessors,
OUT PULONG PlatformId,
OUT PULONG BuildNumber,
OUT PULONG CheckedBuild,
OUT PSTR CsdString,
IN ULONG CsdStringSize,
OUT PSTR BuildString,
IN ULONG BuildStringSize
) PURE;
STDMETHOD(GetProcessorId)(
THIS_
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT PULONG BufferUsed
) PURE;
STDMETHOD(GetFileVersionInformation)(
THIS_
IN PCSTR File,
IN PCSTR Item,
OUT OPTIONAL PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG VerInfoSize
) PURE;
STDMETHOD(GetProcessIds)(
THIS_
OUT OPTIONAL /* size_is(Count) */ PULONG Ids,
IN ULONG Count,
OUT OPTIONAL PULONG ActualCount
) PURE;
STDMETHOD(GetProcessIdByExecutableName)(
THIS_
IN PCSTR ExeName,
IN ULONG Flags,
OUT PULONG Id
) PURE;
STDMETHOD(GetProcessDescription)(
THIS_
IN ULONG ProcessId,
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
) PURE;
STDMETHOD(GetProcessInfo)(
THIS_
IN ULONG ProcessId,
OUT OPTIONAL PULONG64 Handle,
OUT OPTIONAL /* size_is(InfoCount) */ PUSER_THREAD_INFO Threads,
IN ULONG InfoCount,
OUT OPTIONAL PULONG ThreadCount
) PURE;
STDMETHOD(AttachProcess)(
THIS_
IN ULONG ProcessId,
IN ULONG AttachFlags,
OUT PULONG64 ProcessHandle,
OUT PULONG ProcessOptions
) PURE;
STDMETHOD(DetachProcess)(
THIS_
IN ULONG ProcessId
) PURE;
STDMETHOD(CreateProcess)(
THIS_
IN PSTR CommandLine,
IN ULONG CreateFlags,
OUT PULONG ProcessId,
OUT PULONG ThreadId,
OUT PULONG64 ProcessHandle,
OUT PULONG64 ThreadHandle
) PURE;
STDMETHOD(TerminateProcess)(
THIS_
IN ULONG64 Process,
IN ULONG ExitCode
) PURE;
STDMETHOD(AbandonProcess)(
THIS_
IN ULONG64 Process
) PURE;
STDMETHOD(GetProcessExitCode)(
THIS_
IN ULONG64 Process,
OUT PULONG ExitCode
) PURE;
STDMETHOD(CloseHandle)(
THIS_
IN ULONG64 Handle
) PURE;
STDMETHOD(SetProcessOptions)(
THIS_
IN ULONG64 Process,
IN ULONG Options
) PURE;
STDMETHOD(SetDebugObjectOptions)(
THIS_
IN ULONG64 DebugObject,
IN ULONG Options
) PURE;
STDMETHOD(GetProcessDebugObject)(
THIS_
IN ULONG64 Process,
OUT PULONG64 DebugObject
) PURE;
STDMETHOD(DuplicateHandle)(
THIS_
IN ULONG64 InProcess,
IN ULONG64 InHandle,
IN ULONG64 OutProcess,
IN ULONG DesiredAccess,
IN ULONG Inherit,
IN ULONG Options,
OUT PULONG64 OutHandle
) PURE;
STDMETHOD(ReadVirtual)(
THIS_
IN ULONG64 Process,
IN ULONG64 Offset,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesRead
) PURE;
STDMETHOD(WriteVirtual)(
THIS_
IN ULONG64 Process,
IN ULONG64 Offset,
IN PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BytesWritten
) PURE;
STDMETHOD(QueryVirtual)(
THIS_
IN ULONG64 Process,
IN ULONG64 Offset,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BufferUsed
) PURE;
STDMETHOD(ProtectVirtual)(
THIS_
IN ULONG64 Process,
IN ULONG64 Offset,
IN ULONG64 Size,
IN ULONG NewProtect,
OUT PULONG OldProtect
) PURE;
STDMETHOD(AllocVirtual)(
THIS_
IN ULONG64 Process,
IN ULONG64 Offset,
IN ULONG64 Size,
IN ULONG Type,
IN ULONG Protect,
OUT PULONG64 AllocOffset
) PURE;
STDMETHOD(FreeVirtual)(
THIS_
IN ULONG64 Process,
IN ULONG64 Offset,
IN ULONG64 Size,
IN ULONG Type
) PURE;
STDMETHOD(ReadHandleData)(
THIS_
IN ULONG64 Process,
IN ULONG64 Handle,
IN ULONG DataType,
OUT OPTIONAL PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG DataSize
) PURE;
STDMETHOD(SuspendThreads)(
THIS_
IN ULONG Count,
IN /* size_is(Count) */ PULONG64 Threads,
OUT OPTIONAL /* size_is(Count) */ PULONG SuspendCounts
) PURE;
STDMETHOD(ResumeThreads)(
THIS_
IN ULONG Count,
IN /* size_is(Count) */ PULONG64 Threads,
OUT OPTIONAL /* size_is(Count) */ PULONG SuspendCounts
) PURE;
STDMETHOD(GetContext)(
THIS_
IN ULONG64 Thread,
IN ULONG Flags,
IN ULONG FlagsOffset,
OUT PVOID Context,
IN ULONG ContextSize,
OUT OPTIONAL PULONG ContextUsed
) PURE;
STDMETHOD(SetContext)(
THIS_
IN ULONG64 Thread,
IN PVOID Context,
IN ULONG ContextSize,
OUT OPTIONAL PULONG ContextUsed
) PURE;
STDMETHOD(GetProcessDataOffset)(
THIS_
IN ULONG64 Process,
OUT PULONG64 Offset
) PURE;
STDMETHOD(GetThreadDataOffset)(
THIS_
IN ULONG64 Thread,
OUT PULONG64 Offset
) PURE;
STDMETHOD(DescribeSelector)(
THIS_
IN ULONG64 Thread,
IN ULONG Selector,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BufferUsed
) PURE;
STDMETHOD(GetCurrentTimeDateN)(
THIS_
OUT PULONG64 TimeDate
) PURE;
STDMETHOD(GetCurrentSystemUpTimeN)(
THIS_
OUT PULONG64 UpTime
) PURE;
STDMETHOD(GetProcessUpTimeN)(
THIS_
IN ULONG64 Process,
OUT PULONG64 UpTime
) PURE;
STDMETHOD(RequestBreakIn)(
THIS_
IN ULONG64 Process
) PURE;
STDMETHOD(WaitForEvent)(
THIS_
IN ULONG Timeout,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG BufferUsed
) PURE;
STDMETHOD(ContinueEvent)(
THIS_
IN ULONG ContinueStatus
) PURE;
STDMETHOD(InsertCodeBreakpoint)(
THIS_
IN ULONG64 Process,
IN ULONG64 Offset,
IN ULONG MachineType,
OUT PVOID Storage,
IN ULONG StorageSize
) PURE;
STDMETHOD(RemoveCodeBreakpoint)(
THIS_
IN ULONG64 Process,
IN ULONG64 Offset,
IN ULONG MachineType,
IN PVOID Storage,
IN ULONG StorageSize
) PURE;
STDMETHOD(GetFunctionTableListHead)(
THIS_
IN ULONG64 Process,
OUT PULONG64 Offset
) PURE;
STDMETHOD(GetOutOfProcessFunctionTable)(
THIS_
IN ULONG64 Process,
IN PSTR Dll,
IN ULONG64 Table,
IN OPTIONAL PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG TableSize
) PURE;
};
#ifdef __cplusplus
};
#endif
#endif // #ifndef __DBGSVC_H__