summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/wdbgexts.h
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /public/sdk/inc/wdbgexts.h
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'public/sdk/inc/wdbgexts.h')
-rw-r--r--public/sdk/inc/wdbgexts.h519
1 files changed, 519 insertions, 0 deletions
diff --git a/public/sdk/inc/wdbgexts.h b/public/sdk/inc/wdbgexts.h
new file mode 100644
index 000000000..56b8fe83d
--- /dev/null
+++ b/public/sdk/inc/wdbgexts.h
@@ -0,0 +1,519 @@
+/*++
+
+Copyright (c) 1992-1995 Microsoft Corporation
+
+Module Name:
+
+ wdbgexts.h
+
+Abstract:
+
+ This file contains the necessary prototypes and data types for a user
+ to write a debugger extension DLL. This header file is also included
+ by the NT debuggers (WINDBG & KD).
+
+ This header file must be included after "windows.h" and "imagehlp.h".
+
+ Please see the NT DDK documentation for specific information about
+ how to write your own debugger extension DLL.
+
+Environment:
+
+ Win32 only.
+
+Revision History:
+
+--*/
+
+#ifndef _WDBGEXTS_
+#define _WDBGEXTS_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(WDBGAPI)
+#define WDBGAPI __stdcall
+#endif
+
+#ifndef _WINDEF_
+typedef CONST void far *LPCVOID;
+#endif
+
+
+typedef
+VOID
+(WDBGAPI*PWINDBG_OUTPUT_ROUTINE)(
+ PCSTR lpFormat,
+ ...
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_GET_EXPRESSION)(
+ PCSTR lpExpression
+ );
+
+typedef
+VOID
+(WDBGAPI*PWINDBG_GET_SYMBOL)(
+ PVOID offset,
+ PUCHAR pchBuffer,
+ PULONG pDisplacement
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_DISASM)(
+ PULONG lpOffset,
+ PCSTR lpBuffer,
+ ULONG fShowEffectiveAddress
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_CHECK_CONTROL_C)(
+ VOID
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_READ_PROCESS_MEMORY_ROUTINE)(
+ ULONG offset,
+ PVOID lpBuffer,
+ ULONG cb,
+ PULONG lpcbBytesRead
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_WRITE_PROCESS_MEMORY_ROUTINE)(
+ ULONG offset,
+ LPCVOID lpBuffer,
+ ULONG cb,
+ PULONG lpcbBytesWritten
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_GET_THREAD_CONTEXT_ROUTINE)(
+ ULONG Processor,
+ PCONTEXT lpContext,
+ ULONG cbSizeOfContext
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_SET_THREAD_CONTEXT_ROUTINE)(
+ ULONG Processor,
+ PCONTEXT lpContext,
+ ULONG cbSizeOfContext
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_IOCTL_ROUTINE)(
+ USHORT IoctlType,
+ PVOID lpvData,
+ ULONG cbSize
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_OLDKD_READ_PHYSICAL_MEMORY)(
+ LARGE_INTEGER address,
+ PVOID buffer,
+ ULONG count,
+ PULONG bytesread
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_OLDKD_WRITE_PHYSICAL_MEMORY)(
+ LARGE_INTEGER address,
+ PVOID buffer,
+ ULONG length,
+ PULONG byteswritten
+ );
+
+
+typedef struct _tagEXTSTACKTRACE {
+ ULONG FramePointer;
+ ULONG ProgramCounter;
+ ULONG ReturnAddress;
+ ULONG Args[4];
+} EXTSTACKTRACE, *PEXTSTACKTRACE;
+
+
+typedef
+ULONG
+(*PWINDBG_STACKTRACE_ROUTINE)(
+ ULONG FramePointer,
+ ULONG StackPointer,
+ ULONG ProgramCounter,
+ PEXTSTACKTRACE StackFrames,
+ ULONG Frames
+ );
+
+typedef struct _WINDBG_EXTENSION_APIS {
+ ULONG nSize;
+ PWINDBG_OUTPUT_ROUTINE lpOutputRoutine;
+ PWINDBG_GET_EXPRESSION lpGetExpressionRoutine;
+ PWINDBG_GET_SYMBOL lpGetSymbolRoutine;
+ PWINDBG_DISASM lpDisasmRoutine;
+ PWINDBG_CHECK_CONTROL_C lpCheckControlCRoutine;
+ PWINDBG_READ_PROCESS_MEMORY_ROUTINE lpReadProcessMemoryRoutine;
+ PWINDBG_WRITE_PROCESS_MEMORY_ROUTINE lpWriteProcessMemoryRoutine;
+ PWINDBG_GET_THREAD_CONTEXT_ROUTINE lpGetThreadContextRoutine;
+ PWINDBG_SET_THREAD_CONTEXT_ROUTINE lpSetThreadContextRoutine;
+ PWINDBG_IOCTL_ROUTINE lpIoctlRoutine;
+ PWINDBG_STACKTRACE_ROUTINE lpStackTraceRoutine;
+} WINDBG_EXTENSION_APIS, *PWINDBG_EXTENSION_APIS;
+
+typedef struct _WINDBG_OLD_EXTENSION_APIS {
+ ULONG nSize;
+ PWINDBG_OUTPUT_ROUTINE lpOutputRoutine;
+ PWINDBG_GET_EXPRESSION lpGetExpressionRoutine;
+ PWINDBG_GET_SYMBOL lpGetSymbolRoutine;
+ PWINDBG_DISASM lpDisasmRoutine;
+ PWINDBG_CHECK_CONTROL_C lpCheckControlCRoutine;
+} WINDBG_OLD_EXTENSION_APIS, *PWINDBG_OLD_EXTENSION_APIS;
+
+typedef struct _WINDBG_OLDKD_EXTENSION_APIS {
+ ULONG nSize;
+ PWINDBG_OUTPUT_ROUTINE lpOutputRoutine;
+ PWINDBG_GET_EXPRESSION lpGetExpressionRoutine;
+ PWINDBG_GET_SYMBOL lpGetSymbolRoutine;
+ PWINDBG_DISASM lpDisasmRoutine;
+ PWINDBG_CHECK_CONTROL_C lpCheckControlCRoutine;
+ PWINDBG_READ_PROCESS_MEMORY_ROUTINE lpReadVirtualMemRoutine;
+ PWINDBG_WRITE_PROCESS_MEMORY_ROUTINE lpWriteVirtualMemRoutine;
+ PWINDBG_OLDKD_READ_PHYSICAL_MEMORY lpReadPhysicalMemRoutine;
+ PWINDBG_OLDKD_WRITE_PHYSICAL_MEMORY lpWritePhysicalMemRoutine;
+} WINDBG_OLDKD_EXTENSION_APIS, *PWINDBG_OLDKD_EXTENSION_APIS;
+
+typedef
+VOID
+(WDBGAPI*PWINDBG_OLD_EXTENSION_ROUTINE)(
+ HANDLE hCurrentProcess,
+ HANDLE hCurrentThread,
+ ULONG dwCurrentPc,
+ PWINDBG_EXTENSION_APIS lpExtensionApis,
+ PCSTR lpArgumentString
+ );
+
+typedef
+VOID
+(WDBGAPI*PWINDBG_EXTENSION_ROUTINE)(
+ HANDLE hCurrentProcess,
+ HANDLE hCurrentThread,
+ ULONG dwCurrentPc,
+ ULONG dwProcessor,
+ PCSTR lpArgumentString
+ );
+
+typedef
+VOID
+(WDBGAPI*PWINDBG_OLDKD_EXTENSION_ROUTINE)(
+ ULONG dwCurrentPc,
+ PWINDBG_OLDKD_EXTENSION_APIS lpExtensionApis,
+ PCSTR lpArgumentString
+ );
+
+typedef
+VOID
+(WDBGAPI*PWINDBG_EXTENSION_DLL_INIT)(
+ PWINDBG_EXTENSION_APIS lpExtensionApis,
+ USHORT MajorVersion,
+ USHORT MinorVersion
+ );
+
+typedef
+ULONG
+(WDBGAPI*PWINDBG_CHECK_VERSION)(
+ VOID
+ );
+
+#define EXT_API_VERSION_NUMBER 5
+
+typedef struct EXT_API_VERSION {
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ USHORT Revision;
+ USHORT Reserved;
+} EXT_API_VERSION, *LPEXT_API_VERSION;
+
+typedef
+LPEXT_API_VERSION
+(WDBGAPI*PWINDBG_EXTENSION_API_VERSION)(
+ VOID
+ );
+
+#define IG_KD_CONTEXT 1
+#define IG_READ_CONTROL_SPACE 2
+#define IG_WRITE_CONTROL_SPACE 3
+#define IG_READ_IO_SPACE 4
+#define IG_WRITE_IO_SPACE 5
+#define IG_READ_PHYSICAL 6
+#define IG_WRITE_PHYSICAL 7
+#define IG_READ_IO_SPACE_EX 8
+#define IG_WRITE_IO_SPACE_EX 9
+#define IG_KSTACK_HELP 10
+#define IG_SET_THREAD 11
+#define IG_READ_MSR 12
+#define IG_WRITE_MSR 13
+
+typedef struct _tagPROCESSORINFO {
+ USHORT Processor; // current processor
+ USHORT NumberProcessors; // total number of processors
+} PROCESSORINFO, *PPROCESSORINFO;
+
+typedef struct _tagREADCONTROLSPACE {
+ USHORT Processor;
+ ULONG Address;
+ ULONG BufLen;
+ UCHAR Buf[1];
+} READCONTROLSPACE, *PREADCONTROLSPACE;
+
+typedef struct _tagIOSPACE {
+ ULONG Address;
+ ULONG Length; // 1, 2, or 4 bytes
+ ULONG Data;
+} IOSPACE, *PIOSPACE;
+
+typedef struct _tagIOSPACE_EX {
+ ULONG Address;
+ ULONG Length; // 1, 2, or 4 bytes
+ ULONG Data;
+ ULONG InterfaceType;
+ ULONG BusNumber;
+ ULONG AddressSpace;
+} IOSPACE_EX, *PIOSPACE_EX;
+
+typedef struct _tagPHYSICAL {
+ LARGE_INTEGER Address;
+ ULONG BufLen;
+ UCHAR Buf[1];
+} PHYSICAL, *PPHYSICAL;
+
+typedef struct _tagREAD_WRITE_MSR {
+ ULONG Msr;
+ LONGLONG Value;
+} READ_WRITE_MSR, *PREAD_WRITE_MSR;
+
+#ifdef __cplusplus
+#define CPPMOD extern "C"
+#else
+#define CPPMOD
+#endif
+
+
+#define DECLARE_API(s) \
+ CPPMOD VOID \
+ s( \
+ HANDLE hCurrentProcess, \
+ HANDLE hCurrentThread, \
+ ULONG dwCurrentPc, \
+ ULONG dwProcessor, \
+ PCSTR args \
+ )
+
+#ifndef NOEXTAPI
+
+#define dprintf (ExtensionApis.lpOutputRoutine)
+#define GetExpression (ExtensionApis.lpGetExpressionRoutine)
+#define GetSymbol (ExtensionApis.lpGetSymbolRoutine)
+#define Disassm (ExtensionApis.lpDisasmRoutine)
+#define CheckControlC (ExtensionApis.lpCheckControlCRoutine)
+#define ReadMemory (ExtensionApis.lpReadProcessMemoryRoutine)
+#define WriteMemory (ExtensionApis.lpWriteProcessMemoryRoutine)
+#define GetContext (ExtensionApis.lpGetThreadContextRoutine)
+#define SetContext (ExtensionApis.lpSetThreadContextRoutine)
+#define Ioctl (ExtensionApis.lpIoctlRoutine)
+#define StackTrace (ExtensionApis.lpStackTraceRoutine)
+
+
+#define GetKdContext(ppi) \
+ Ioctl( IG_KD_CONTEXT, (PVOID)ppi, sizeof(*ppi) )
+
+extern WINDBG_EXTENSION_APIS ExtensionApis;
+
+__inline VOID
+ReadControlSpace(
+ USHORT processor,
+ ULONG address,
+ PVOID buf,
+ ULONG size
+ )
+{
+ PREADCONTROLSPACE prc;
+ prc = (PREADCONTROLSPACE)LocalAlloc(LPTR, sizeof(*prc) + size );
+ ZeroMemory( prc->Buf, size );
+ prc->Processor = processor;
+ prc->Address = (ULONG)address;
+ prc->BufLen = size;
+ Ioctl( IG_READ_CONTROL_SPACE, (PVOID)prc, sizeof(*prc) + size );
+ CopyMemory( buf, prc->Buf, size );
+ LocalFree( prc );
+}
+
+__inline VOID
+ReadIoSpace(
+ ULONG address,
+ PULONG data,
+ PULONG size
+ )
+{
+ IOSPACE is;
+ is.Address = (ULONG)address;
+ is.Length = *size;
+ is.Data = 0;
+ Ioctl( IG_READ_IO_SPACE, (PVOID)&is, sizeof(is) );
+ *data = is.Data;
+ *size = is.Length;
+}
+
+__inline VOID
+WriteIoSpace(
+ ULONG address,
+ ULONG data,
+ PULONG size
+ )
+{
+ IOSPACE is;
+ is.Address = (ULONG)address;
+ is.Length = *size;
+ is.Data = data;
+ Ioctl( IG_WRITE_IO_SPACE, (PVOID)&is, sizeof(is) );
+ *size = is.Length;
+}
+
+__inline VOID
+ReadIoSpaceEx(
+ ULONG address,
+ PULONG data,
+ PULONG size,
+ ULONG interfacetype,
+ ULONG busnumber,
+ ULONG addressspace
+ )
+{
+ IOSPACE_EX is;
+ is.Address = (ULONG)address;
+ is.Length = *size;
+ is.Data = 0;
+ is.InterfaceType = interfacetype;
+ is.BusNumber = busnumber;
+ is.AddressSpace = addressspace;
+ Ioctl( IG_READ_IO_SPACE_EX, (PVOID)&is, sizeof(is) );
+ *data = is.Data;
+ *size = is.Length;
+}
+
+__inline VOID
+WriteIoSpaceEx(
+ ULONG address,
+ ULONG data,
+ PULONG size,
+ ULONG interfacetype,
+ ULONG busnumber,
+ ULONG addressspace
+ )
+{
+ IOSPACE_EX is;
+ is.Address = (ULONG)address;
+ is.Length = *size;
+ is.Data = data;
+ is.InterfaceType = interfacetype;
+ is.BusNumber = busnumber;
+ is.AddressSpace = addressspace;
+ Ioctl( IG_WRITE_IO_SPACE_EX, (PVOID)&is, sizeof(is) );
+ *size = is.Length;
+}
+
+__inline VOID
+ReadPhysical(
+ LARGE_INTEGER address,
+ PVOID buf,
+ ULONG size,
+ PULONG sizer
+ )
+{
+ PPHYSICAL phy;
+ phy = (PPHYSICAL)LocalAlloc(LPTR, sizeof(*phy) + size );
+ ZeroMemory( phy->Buf, size );
+ phy->Address = address;
+ phy->BufLen = size;
+ Ioctl( IG_READ_PHYSICAL, (PVOID)phy, sizeof(*phy) + size );
+ *sizer = phy->BufLen;
+ CopyMemory( buf, phy->Buf, *sizer );
+ LocalFree( phy );
+}
+
+__inline VOID
+WritePhysical(
+ LARGE_INTEGER address,
+ PVOID buf,
+ ULONG size,
+ PULONG sizew
+ )
+{
+ PPHYSICAL phy;
+ phy = (PPHYSICAL)LocalAlloc(LPTR, sizeof(*phy) + size );
+ ZeroMemory( phy->Buf, size );
+ phy->Address = address;
+ phy->BufLen = size;
+ CopyMemory( phy->Buf, buf, size );
+ Ioctl( IG_WRITE_PHYSICAL, (PVOID)phy, sizeof(*phy) + size );
+ *sizew = phy->BufLen;
+ LocalFree( phy );
+}
+
+__inline VOID
+SetThreadForOperation(
+ PULONG Thread
+ )
+{
+ Ioctl(IG_SET_THREAD, (PVOID)Thread, sizeof(ULONG));
+}
+
+__inline VOID
+ReadMsr(
+ ULONG MsrReg,
+ ULONGLONG *MsrValue
+ )
+{
+ PREAD_WRITE_MSR msr;
+ LARGE_INTEGER li;
+
+ msr = (PREAD_WRITE_MSR)LocalAlloc(LPTR, sizeof(*msr));
+ msr->Msr = MsrReg;
+ Ioctl( IG_READ_MSR, (PVOID)msr, sizeof(*msr) );
+
+ *MsrValue = msr->Value;
+ LocalFree( msr );
+}
+
+__inline VOID
+WriteMsr(
+ ULONG MsrReg,
+ ULONGLONG MsrValue
+ )
+{
+ PREAD_WRITE_MSR msr;
+
+ msr = (PREAD_WRITE_MSR)LocalAlloc(LPTR, sizeof(*msr));
+ msr->Msr = MsrReg;
+ msr->Value = MsrValue;
+ Ioctl( IG_WRITE_MSR, (PVOID)msr, sizeof(*msr) );
+ LocalFree( msr );
+}
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _WDBGEXTS_