13#include "DebugServer2/Base.h"
19#define DS2_EXCEPTION_UNCAUGHT_COM 0x800706BA
20#define DS2_EXCEPTION_UNCAUGHT_USER 0xE06D7363
21#define DS2_EXCEPTION_UNCAUGHT_WINRT 0x40080201
22#define DS2_EXCEPTION_VC_THREAD_NAME_SET 0x406D1388
24#if !defined(HAVE_WaitForDebugEventEx)
25#define WaitForDebugEventEx WaitForDebugEvent
29#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
40#if !defined(HAVE_GetWindowsDirectoryW)
41WINBASEAPI UINT WINAPI GetWindowsDirectoryW(
42 _Out_ LPWSTR lpBuffer,
47#if !defined(HAVE_GetModuleHandleA)
48WINBASEAPI HMODULE WINAPI GetModuleHandleA(
49 _In_opt_ LPCSTR lpModuleName
53#if !defined(HAVE_GetModuleHandleW)
54WINBASEAPI HMODULE WINAPI GetModuleHandleW(
55 _In_opt_ LPCWSTR lpModuleName
59#if !defined(HAVE_struct__STARTUPINFOW)
60typedef struct _STARTUPINFOW {
71 DWORD dwFillAttribute;
79} STARTUPINFOW, *LPSTARTUPINFOW;
82#if !defined(HAVE_struct__PROCESS_INFORMATION)
83typedef struct _PROCESS_INFORMATION {
88} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
91#if !defined(HAVE_HANDLE_FLAG_INHERIT)
92#define HANDLE_FLAG_INHERIT 0x00000001
99#if !defined(HAVE_PROC_THREAD_ATTRIBUTE_HANDLE_LIST)
100#if !defined(ProcThreadAttributeValue)
101#define ProcThreadAttributeValue(Number, Thread, Input, Additive) \
102 ((Number) | ((Thread) ? 0x00010000 : 0) | ((Input) ? 0x00020000 : 0) | \
103 ((Additive) ? 0x00040000 : 0))
106#define PROC_THREAD_ATTRIBUTE_HANDLE_LIST \
107 ProcThreadAttributeValue(2, FALSE, TRUE, FALSE)
110#if !defined(HAVE_STARTUPINFOEXW)
111typedef struct _STARTUPINFOEXW {
112 STARTUPINFOW StartupInfo;
113 PPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;
114} STARTUPINFOEXW, *LPSTARTUPINFOEXW;
117#if !defined(HAVE_STARTF_USESTDHANDLES)
118#define STARTF_USESTDHANDLES 0x00000100
121#if !defined(HAVE_CreateFileW)
122WINBASEAPI HANDLE WINAPI CreateFileW(
123 _In_ LPCWSTR lpFileName,
124 _In_ DWORD dwDesiredAccess,
125 _In_ DWORD dwShareMode,
126 _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
127 _In_ DWORD dwCreationDisposition,
128 _In_ DWORD dwFlagsAndAttributes,
129 _In_opt_ HANDLE hTemplateFile
133#if !defined(HAVE_TerminateThread)
134WINBASEAPI BOOL WINAPI TerminateThread(
135 _Inout_ HANDLE hThread,
136 _In_ DWORD dwExitCode
140#if !defined(HAVE_SetThreadContext)
141WINBASEAPI BOOL WINAPI SetThreadContext(
143 _In_
const CONTEXT *lpContext
147#if !defined(HAVE_ReadProcessMemory)
148WINBASEAPI BOOL WINAPI ReadProcessMemory(
149 _In_ HANDLE hProcess,
150 _In_ LPCVOID lpBaseAddress,
151 _Out_ LPVOID lpBuffer,
153 _Out_ SIZE_T *lpNumberOfBytesRead
157#if !defined(HAVE_WriteProcessMemory)
158WINBASEAPI BOOL WINAPI WriteProcessMemory(
159 _In_ HANDLE hProcess,
160 _In_ LPVOID lpBaseAddress,
161 _In_ LPCVOID lpBuffer,
163 _Out_ SIZE_T *lpNumberOfBytesWritten
167#if !defined(HAVE_WaitForDebugEvent)
168WINBASEAPI BOOL APIENTRY WaitForDebugEvent(
169 _Out_ LPDEBUG_EVENT lpDebugEvent,
170 _In_ DWORD dwMilliseconds
174#if !defined(HAVE_ContinueDebugEvent)
175WINBASEAPI BOOL WINAPI ContinueDebugEvent(
176 _In_ DWORD dwProcessId,
177 _In_ DWORD dwThreadId,
178 _In_ DWORD dwContinueStatus
182#if !defined(HAVE_DebugActiveProcess)
183WINBASEAPI BOOL WINAPI DebugActiveProcess(
184 _In_ DWORD dwProcessId
188#if !defined(HAVE_DebugActiveProcessStop)
189WINBASEAPI BOOL WINAPI DebugActiveProcessStop(
190 _In_ DWORD dwProcessId
194#if !defined(HAVE_VirtualAllocEx)
195WINBASEAPI LPVOID WINAPI VirtualAllocEx(
196 _In_ HANDLE hProcess,
197 _In_opt_ LPVOID lpAddress,
199 _In_ DWORD flAllocationType,
204#if !defined(HAVE_VirtualFreeEx)
205WINBASEAPI BOOL WINAPI VirtualFreeEx(
206 _In_ HANDLE hProcess,
207 _In_ LPVOID lpAddress,
209 _In_ DWORD dwFreeType
213#if !defined(HAVE_VirtualQueryEx)
214WINBASEAPI SIZE_T WINAPI VirtualQueryEx(
215 _In_ HANDLE hProcess,
216 _In_opt_ LPCVOID lpAddress,
217 _Out_ PMEMORY_BASIC_INFORMATION lpBuffer,
222#if !defined(HAVE_EnumProcessModules)
227BOOL WINAPI EnumProcessModules(
228 _In_ HANDLE hProcess,
229 _Out_writes_bytes_(cb) HMODULE *lphModule,
231 _Out_ LPDWORD lpcbNeeded
235#if !defined(TH32CS_SNAPTHREAD)
236#define TH32CS_SNAPTHREAD 0x00000004
239#if !defined(HAVE_PTOP_LEVEL_EXCEPTION_FILTER)
240typedef LONG (WINAPI *PTOP_LEVEL_EXCEPTION_FILTER)(
241 _In_
struct _EXCEPTION_POINTERS *ExceptionInfo
245#if !defined(HAVE_LPTOP_LEVEL_EXCEPTION_FILTER)
246typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
252#if !defined(HAVE_SymInitialize) || !defined(HAVE_SymFromAddr) || \
253 !defined(HAVE_SymGetLineFromAddr64)
255#if !defined(MAX_SYM_NAME)
256#define MAX_SYM_NAME 2000
259typedef struct _SYMBOL_INFO {
275} SYMBOL_INFO, *PSYMBOL_INFO;
277typedef struct _IMAGEHLP_LINE64 {
283} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
287#if !defined(HAVE_SymInitialize)
288WINBASEAPI BOOL WINAPI SymInitialize(
289 _In_ HANDLE hProcess,
290 _In_opt_ PCSTR UserSearchPath,
291 _In_ BOOL fInvadeProcess
295#if !defined(HAVE_SymFromAddr)
296WINBASEAPI BOOL WINAPI SymFromAddr(
297 _In_ HANDLE hProcess,
298 _In_ DWORD64 Address,
299 _Out_opt_ PDWORD64 Displacement,
300 _Inout_ PSYMBOL_INFO Symbol
304#if !defined(HAVE_SymGetLineFromAddr64)
305WINBASEAPI BOOL WINAPI SymGetLineFromAddr64(
306 _In_ HANDLE hProcess,
308 _Out_ PDWORD pdwDisplacement,
309 _Out_ PIMAGEHLP_LINE64 Line64