[PATCH 2/4] dbgeng: Update to IDebugControl4 stub.

Nikolay Sivov nsivov at codeweavers.com
Mon Apr 4 11:40:37 CDT 2022


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/dbgeng/dbgeng.c | 828 ++++++++++++++++++++++++++++++++++++-------
 1 file changed, 707 insertions(+), 121 deletions(-)

diff --git a/dlls/dbgeng/dbgeng.c b/dlls/dbgeng/dbgeng.c
index 1439cedfeb3..e0e7c3ff98e 100644
--- a/dlls/dbgeng/dbgeng.c
+++ b/dlls/dbgeng/dbgeng.c
@@ -62,7 +62,7 @@ struct debug_client
     IDebugClient7 IDebugClient_iface;
     IDebugDataSpaces IDebugDataSpaces_iface;
     IDebugSymbols3 IDebugSymbols3_iface;
-    IDebugControl2 IDebugControl2_iface;
+    IDebugControl4 IDebugControl4_iface;
     IDebugAdvanced IDebugAdvanced_iface;
     IDebugSystemObjects IDebugSystemObjects_iface;
     LONG refcount;
@@ -252,9 +252,9 @@ static struct debug_client *impl_from_IDebugSymbols3(IDebugSymbols3 *iface)
     return CONTAINING_RECORD(iface, struct debug_client, IDebugSymbols3_iface);
 }
 
-static struct debug_client *impl_from_IDebugControl2(IDebugControl2 *iface)
+static struct debug_client *impl_from_IDebugControl4(IDebugControl4 *iface)
 {
-    return CONTAINING_RECORD(iface, struct debug_client, IDebugControl2_iface);
+    return CONTAINING_RECORD(iface, struct debug_client, IDebugControl4_iface);
 }
 
 static struct debug_client *impl_from_IDebugAdvanced(IDebugAdvanced *iface)
@@ -294,10 +294,12 @@ static HRESULT STDMETHODCALLTYPE debugclient_QueryInterface(IDebugClient7 *iface
     {
         *obj = &debug_client->IDebugSymbols3_iface;
     }
-    else if (IsEqualIID(riid, &IID_IDebugControl2)
+    else if (IsEqualIID(riid, &IID_IDebugControl4)
+            || IsEqualIID(riid, &IID_IDebugControl3)
+            || IsEqualIID(riid, &IID_IDebugControl2)
             || IsEqualIID(riid, &IID_IDebugControl))
     {
-        *obj = &debug_client->IDebugControl2_iface;
+        *obj = &debug_client->IDebugControl4_iface;
     }
     else if (IsEqualIID(riid, &IID_IDebugAdvanced))
     {
@@ -2676,56 +2678,56 @@ static const IDebugSymbols3Vtbl debugsymbolsvtbl =
     debugsymbols_GetSourceEntryBySourceEntry,
 };
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_QueryInterface(IDebugControl2 *iface, REFIID riid, void **obj)
+static HRESULT STDMETHODCALLTYPE debugcontrol_QueryInterface(IDebugControl4 *iface, REFIID riid, void **obj)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
     IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
     return IUnknown_QueryInterface(unk, riid, obj);
 }
 
-static ULONG STDMETHODCALLTYPE debugcontrol_AddRef(IDebugControl2 *iface)
+static ULONG STDMETHODCALLTYPE debugcontrol_AddRef(IDebugControl4 *iface)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
     IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
     return IUnknown_AddRef(unk);
 }
 
-static ULONG STDMETHODCALLTYPE debugcontrol_Release(IDebugControl2 *iface)
+static ULONG STDMETHODCALLTYPE debugcontrol_Release(IDebugControl4 *iface)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
     IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
     return IUnknown_Release(unk);
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetInterrupt(IDebugControl2 *iface)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetInterrupt(IDebugControl4 *iface)
 {
     FIXME("%p stub.\n", iface);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetInterrupt(IDebugControl2 *iface, ULONG flags)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetInterrupt(IDebugControl4 *iface, ULONG flags)
 {
     FIXME("%p, %#lx stub.\n", iface, flags);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetInterruptTimeout(IDebugControl2 *iface, ULONG *timeout)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetInterruptTimeout(IDebugControl4 *iface, ULONG *timeout)
 {
     FIXME("%p, %p stub.\n", iface, timeout);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetInterruptTimeout(IDebugControl2 *iface, ULONG timeout)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetInterruptTimeout(IDebugControl4 *iface, ULONG timeout)
 {
     FIXME("%p, %lu stub.\n", iface, timeout);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogFile(IDebugControl2 *iface, char *buffer, ULONG buffer_size,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogFile(IDebugControl4 *iface, char *buffer, ULONG buffer_size,
         ULONG *file_size, BOOL *append)
 {
     FIXME("%p, %p, %lu, %p, %p stub.\n", iface, buffer, buffer_size, file_size, append);
@@ -2733,33 +2735,33 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogFile(IDebugControl2 *iface,
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_OpenLogFile(IDebugControl2 *iface, const char *file, BOOL append)
+static HRESULT STDMETHODCALLTYPE debugcontrol_OpenLogFile(IDebugControl4 *iface, const char *file, BOOL append)
 {
     FIXME("%p, %s, %d stub.\n", iface, debugstr_a(file), append);
 
     return E_NOTIMPL;
 }
-static HRESULT STDMETHODCALLTYPE debugcontrol_CloseLogFile(IDebugControl2 *iface)
+static HRESULT STDMETHODCALLTYPE debugcontrol_CloseLogFile(IDebugControl4 *iface)
 {
     FIXME("%p stub.\n", iface);
 
     return E_NOTIMPL;
 }
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogMask(IDebugControl2 *iface, ULONG *mask)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogMask(IDebugControl4 *iface, ULONG *mask)
 {
     FIXME("%p, %p stub.\n", iface, mask);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetLogMask(IDebugControl2 *iface, ULONG mask)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetLogMask(IDebugControl4 *iface, ULONG mask)
 {
     FIXME("%p, %#lx stub.\n", iface, mask);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_Input(IDebugControl2 *iface, char *buffer, ULONG buffer_size,
+static HRESULT STDMETHODCALLTYPE debugcontrol_Input(IDebugControl4 *iface, char *buffer, ULONG buffer_size,
         ULONG *input_size)
 {
     FIXME("%p, %p, %lu, %p stub.\n", iface, buffer, buffer_size, input_size);
@@ -2767,21 +2769,21 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_Input(IDebugControl2 *iface, char
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_ReturnInput(IDebugControl2 *iface, const char *buffer)
+static HRESULT STDMETHODCALLTYPE debugcontrol_ReturnInput(IDebugControl4 *iface, const char *buffer)
 {
     FIXME("%p, %s stub.\n", iface, debugstr_a(buffer));
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODVCALLTYPE debugcontrol_Output(IDebugControl2 *iface, ULONG mask, const char *format, ...)
+static HRESULT STDMETHODVCALLTYPE debugcontrol_Output(IDebugControl4 *iface, ULONG mask, const char *format, ...)
 {
     FIXME("%p, %#lx, %s stub.\n", iface, mask, debugstr_a(format));
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVaList(IDebugControl2 *iface, ULONG mask, const char *format,
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVaList(IDebugControl4 *iface, ULONG mask, const char *format,
         va_list args)
 {
     FIXME("%p, %#lx, %s stub.\n", iface, mask, debugstr_a(format));
@@ -2789,7 +2791,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVaList(IDebugControl2 *iface
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODVCALLTYPE debugcontrol_ControlledOutput(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODVCALLTYPE debugcontrol_ControlledOutput(IDebugControl4 *iface, ULONG output_control,
         ULONG mask, const char *format, ...)
 {
     FIXME("%p, %lu, %#lx, %s stub.\n", iface, output_control, mask, debugstr_a(format));
@@ -2797,7 +2799,7 @@ static HRESULT STDMETHODVCALLTYPE debugcontrol_ControlledOutput(IDebugControl2 *
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_ControlledOutputVaList(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODCALLTYPE debugcontrol_ControlledOutputVaList(IDebugControl4 *iface, ULONG output_control,
         ULONG mask, const char *format, va_list args)
 {
     FIXME("%p, %lu, %#lx, %s stub.\n", iface, output_control, mask, debugstr_a(format));
@@ -2805,7 +2807,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_ControlledOutputVaList(IDebugContr
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODVCALLTYPE debugcontrol_OutputPrompt(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODVCALLTYPE debugcontrol_OutputPrompt(IDebugControl4 *iface, ULONG output_control,
         const char *format, ...)
 {
     FIXME("%p, %lu, %s stub.\n", iface, output_control, debugstr_a(format));
@@ -2813,7 +2815,7 @@ static HRESULT STDMETHODVCALLTYPE debugcontrol_OutputPrompt(IDebugControl2 *ifac
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_OutputPromptVaList(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputPromptVaList(IDebugControl4 *iface, ULONG output_control,
         const char *format, va_list args)
 {
     FIXME("%p, %lu, %s stub.\n", iface, output_control, debugstr_a(format));
@@ -2821,7 +2823,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_OutputPromptVaList(IDebugControl2
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetPromptText(IDebugControl2 *iface, char *buffer, ULONG buffer_size,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetPromptText(IDebugControl4 *iface, char *buffer, ULONG buffer_size,
         ULONG *text_size)
 {
     FIXME("%p, %p, %lu, %p stub.\n", iface, buffer, buffer_size, text_size);
@@ -2829,7 +2831,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetPromptText(IDebugControl2 *ifac
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_OutputCurrentState(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputCurrentState(IDebugControl4 *iface, ULONG output_control,
         ULONG flags)
 {
     FIXME("%p, %lu, %#lx stub.\n", iface, output_control, flags);
@@ -2837,28 +2839,28 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_OutputCurrentState(IDebugControl2
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVersionInformation(IDebugControl2 *iface, ULONG output_control)
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVersionInformation(IDebugControl4 *iface, ULONG output_control)
 {
     FIXME("%p, %lu stub.\n", iface, output_control);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetNotifyEventHandle(IDebugControl2 *iface, ULONG64 *handle)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNotifyEventHandle(IDebugControl4 *iface, ULONG64 *handle)
 {
     FIXME("%p, %p stub.\n", iface, handle);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetNotifyEventHandle(IDebugControl2 *iface, ULONG64 handle)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetNotifyEventHandle(IDebugControl4 *iface, ULONG64 handle)
 {
     FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(handle));
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_Assemble(IDebugControl2 *iface, ULONG64 offset, const char *code,
+static HRESULT STDMETHODCALLTYPE debugcontrol_Assemble(IDebugControl4 *iface, ULONG64 offset, const char *code,
         ULONG64 *end_offset)
 {
     FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), debugstr_a(code), end_offset);
@@ -2866,7 +2868,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_Assemble(IDebugControl2 *iface, UL
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_Disassemble(IDebugControl2 *iface, ULONG64 offset, ULONG flags,
+static HRESULT STDMETHODCALLTYPE debugcontrol_Disassemble(IDebugControl4 *iface, ULONG64 offset, ULONG flags,
         char *buffer, ULONG buffer_size, ULONG *disassm_size, ULONG64 *end_offset)
 {
     FIXME("%p, %s, %#lx, %p, %lu, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, buffer, buffer_size,
@@ -2875,14 +2877,14 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_Disassemble(IDebugControl2 *iface,
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetDisassembleEffectiveOffset(IDebugControl2 *iface, ULONG64 *offset)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetDisassembleEffectiveOffset(IDebugControl4 *iface, ULONG64 *offset)
 {
     FIXME("%p, %p stub.\n", iface, offset);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassembly(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassembly(IDebugControl4 *iface, ULONG output_control,
         ULONG64 offset, ULONG flags, ULONG64 *end_offset)
 {
     FIXME("%p, %lu, %s, %#lx, %p stub.\n", iface, output_control, wine_dbgstr_longlong(offset), flags, end_offset);
@@ -2890,7 +2892,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassembly(IDebugControl2 *
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassemblyLines(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassemblyLines(IDebugControl4 *iface, ULONG output_control,
         ULONG prev_lines, ULONG total_lines, ULONG64 offset, ULONG flags, ULONG *offset_line, ULONG64 *start_offset,
         ULONG64 *end_offset, ULONG64 *line_offsets)
 {
@@ -2900,7 +2902,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassemblyLines(IDebugContr
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetNearInstruction(IDebugControl2 *iface, ULONG64 offset, LONG delta,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNearInstruction(IDebugControl4 *iface, ULONG64 offset, LONG delta,
         ULONG64 *instr_offset)
 {
     FIXME("%p, %s, %ld, %p stub.\n", iface, wine_dbgstr_longlong(offset), delta, instr_offset);
@@ -2908,7 +2910,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetNearInstruction(IDebugControl2
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetStackTrace(IDebugControl2 *iface, ULONG64 frame_offset,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetStackTrace(IDebugControl4 *iface, ULONG64 frame_offset,
         ULONG64 stack_offset, ULONG64 instr_offset, DEBUG_STACK_FRAME *frames, ULONG frames_size, ULONG *frames_filled)
 {
     FIXME("%p, %s, %s, %s, %p, %lu, %p stub.\n", iface, wine_dbgstr_longlong(frame_offset),
@@ -2917,14 +2919,14 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetStackTrace(IDebugControl2 *ifac
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetReturnOffset(IDebugControl2 *iface, ULONG64 *offset)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetReturnOffset(IDebugControl4 *iface, ULONG64 *offset)
 {
     FIXME("%p, %p stub.\n", iface, offset);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_OutputStackTrace(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputStackTrace(IDebugControl4 *iface, ULONG output_control,
         DEBUG_STACK_FRAME *frames, ULONG frames_size, ULONG flags)
 {
     FIXME("%p, %lu, %p, %lu, %#lx stub.\n", iface, output_control, frames, frames_size, flags);
@@ -2932,10 +2934,10 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_OutputStackTrace(IDebugControl2 *i
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetDebuggeeType(IDebugControl2 *iface, ULONG *debug_class,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetDebuggeeType(IDebugControl4 *iface, ULONG *debug_class,
         ULONG *qualifier)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
     static struct target_process *target;
 
     FIXME("%p, %p, %p stub.\n", iface, debug_class, qualifier);
@@ -2952,16 +2954,16 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetDebuggeeType(IDebugControl2 *if
     return S_OK;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetActualProcessorType(IDebugControl2 *iface, ULONG *type)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetActualProcessorType(IDebugControl4 *iface, ULONG *type)
 {
     FIXME("%p, %p stub.\n", iface, type);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetExecutingProcessorType(IDebugControl2 *iface, ULONG *type)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExecutingProcessorType(IDebugControl4 *iface, ULONG *type)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
     static struct target_process *target;
     HRESULT hr;
 
@@ -2978,7 +2980,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetExecutingProcessorType(IDebugCo
     return S_OK;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberPossibleExecutingProcessorTypes(IDebugControl2 *iface,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberPossibleExecutingProcessorTypes(IDebugControl4 *iface,
         ULONG *count)
 {
     FIXME("%p, %p stub.\n", iface, count);
@@ -2986,7 +2988,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberPossibleExecutingProcesso
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetPossibleExecutingProcessorTypes(IDebugControl2 *iface, ULONG start,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetPossibleExecutingProcessorTypes(IDebugControl4 *iface, ULONG start,
         ULONG count, ULONG *types)
 {
     FIXME("%p, %lu, %lu, %p stub.\n", iface, start, count, types);
@@ -2994,14 +2996,14 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetPossibleExecutingProcessorTypes
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberProcessors(IDebugControl2 *iface, ULONG *count)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberProcessors(IDebugControl4 *iface, ULONG *count)
 {
     FIXME("%p, %p stub.\n", iface, count);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemVersion(IDebugControl2 *iface, ULONG *platform_id, ULONG *major,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemVersion(IDebugControl4 *iface, ULONG *platform_id, ULONG *major,
         ULONG *minor, char *sp_string, ULONG sp_string_size, ULONG *sp_string_used, ULONG *sp_number,
         char *build_string, ULONG build_string_size, ULONG *build_string_used)
 {
@@ -3011,16 +3013,16 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemVersion(IDebugControl2 *i
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetPageSize(IDebugControl2 *iface, ULONG *size)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetPageSize(IDebugControl4 *iface, ULONG *size)
 {
     FIXME("%p, %p stub.\n", iface, size);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_IsPointer64Bit(IDebugControl2 *iface)
+static HRESULT STDMETHODCALLTYPE debugcontrol_IsPointer64Bit(IDebugControl4 *iface)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
     static struct target_process *target;
     HRESULT hr;
 
@@ -3051,7 +3053,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_IsPointer64Bit(IDebugControl2 *ifa
     return hr;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_ReadBugCheckData(IDebugControl2 *iface, ULONG *code, ULONG64 *arg1,
+static HRESULT STDMETHODCALLTYPE debugcontrol_ReadBugCheckData(IDebugControl4 *iface, ULONG *code, ULONG64 *arg1,
         ULONG64 *arg2, ULONG64 *arg3, ULONG64 *arg4)
 {
     FIXME("%p, %p, %p, %p, %p, %p stub.\n", iface, code, arg1, arg2, arg3, arg4);
@@ -3059,14 +3061,14 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_ReadBugCheckData(IDebugControl2 *i
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberSupportedProcessorTypes(IDebugControl2 *iface, ULONG *count)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberSupportedProcessorTypes(IDebugControl4 *iface, ULONG *count)
 {
     FIXME("%p, %p stub.\n", iface, count);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetSupportedProcessorTypes(IDebugControl2 *iface, ULONG start,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSupportedProcessorTypes(IDebugControl4 *iface, ULONG start,
         ULONG count, ULONG *types)
 {
     FIXME("%p, %lu, %lu, %p stub.\n", iface, start, count, types);
@@ -3074,7 +3076,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetSupportedProcessorTypes(IDebugC
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetProcessorTypeNames(IDebugControl2 *iface, ULONG type, char *full_name,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetProcessorTypeNames(IDebugControl4 *iface, ULONG type, char *full_name,
         ULONG full_name_buffer_size, ULONG *full_name_size, char *abbrev_name, ULONG abbrev_name_buffer_size,
         ULONG *abbrev_name_size)
 {
@@ -3084,51 +3086,51 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetProcessorTypeNames(IDebugContro
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetEffectiveProcessorType(IDebugControl2 *iface, ULONG *type)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetEffectiveProcessorType(IDebugControl4 *iface, ULONG *type)
 {
     FIXME("%p, %p stub.\n", iface, type);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetEffectiveProcessorType(IDebugControl2 *iface, ULONG type)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetEffectiveProcessorType(IDebugControl4 *iface, ULONG type)
 {
     FIXME("%p, %lu stub.\n", iface, type);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetExecutionStatus(IDebugControl2 *iface, ULONG *status)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExecutionStatus(IDebugControl4 *iface, ULONG *status)
 {
     FIXME("%p, %p stub.\n", iface, status);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetExecutionStatus(IDebugControl2 *iface, ULONG status)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetExecutionStatus(IDebugControl4 *iface, ULONG status)
 {
     FIXME("%p, %lu stub.\n", iface, status);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetCodeLevel(IDebugControl2 *iface, ULONG *level)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetCodeLevel(IDebugControl4 *iface, ULONG *level)
 {
     FIXME("%p, %p stub.\n", iface, level);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetCodeLevel(IDebugControl2 *iface, ULONG level)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetCodeLevel(IDebugControl4 *iface, ULONG level)
 {
     FIXME("%p, %lu stub.\n", iface, level);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetEngineOptions(IDebugControl2 *iface, ULONG *options)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetEngineOptions(IDebugControl4 *iface, ULONG *options)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
 
     TRACE("%p, %p.\n", iface, options);
 
@@ -3137,9 +3139,9 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetEngineOptions(IDebugControl2 *i
     return S_OK;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_AddEngineOptions(IDebugControl2 *iface, ULONG options)
+static HRESULT STDMETHODCALLTYPE debugcontrol_AddEngineOptions(IDebugControl4 *iface, ULONG options)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
 
     TRACE("%p, %#lx.\n", iface, options);
 
@@ -3151,9 +3153,9 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_AddEngineOptions(IDebugControl2 *i
     return S_OK;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveEngineOptions(IDebugControl2 *iface, ULONG options)
+static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveEngineOptions(IDebugControl4 *iface, ULONG options)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
 
     TRACE("%p, %#lx.\n", iface, options);
 
@@ -3162,9 +3164,9 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveEngineOptions(IDebugControl2
     return S_OK;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetEngineOptions(IDebugControl2 *iface, ULONG options)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetEngineOptions(IDebugControl4 *iface, ULONG options)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
 
     TRACE("%p, %#lx.\n", iface, options);
 
@@ -3176,7 +3178,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_SetEngineOptions(IDebugControl2 *i
     return S_OK;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemErrorControl(IDebugControl2 *iface, ULONG *output_level,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemErrorControl(IDebugControl4 *iface, ULONG *output_level,
         ULONG *break_level)
 {
     FIXME("%p, %p, %p stub.\n", iface, output_level, break_level);
@@ -3184,7 +3186,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemErrorControl(IDebugContro
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetSystemErrorControl(IDebugControl2 *iface, ULONG output_level,
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetSystemErrorControl(IDebugControl4 *iface, ULONG output_level,
         ULONG break_level)
 {
     FIXME("%p, %lu, %lu stub.\n", iface, output_level, break_level);
@@ -3192,7 +3194,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_SetSystemErrorControl(IDebugContro
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetTextMacro(IDebugControl2 *iface, ULONG slot, char *buffer,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetTextMacro(IDebugControl4 *iface, ULONG slot, char *buffer,
         ULONG buffer_size, ULONG *macro_size)
 {
     FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, slot, buffer, buffer_size, macro_size);
@@ -3200,28 +3202,28 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetTextMacro(IDebugControl2 *iface
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextMacro(IDebugControl2 *iface, ULONG slot, const char *macro)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextMacro(IDebugControl4 *iface, ULONG slot, const char *macro)
 {
     FIXME("%p, %lu, %s stub.\n", iface, slot, debugstr_a(macro));
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetRadix(IDebugControl2 *iface, ULONG *radix)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetRadix(IDebugControl4 *iface, ULONG *radix)
 {
     FIXME("%p, %p stub.\n", iface, radix);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetRadix(IDebugControl2 *iface, ULONG radix)
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetRadix(IDebugControl4 *iface, ULONG radix)
 {
     FIXME("%p, %lu stub.\n", iface, radix);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_Evaluate(IDebugControl2 *iface, const char *expression,
+static HRESULT STDMETHODCALLTYPE debugcontrol_Evaluate(IDebugControl4 *iface, const char *expression,
         ULONG desired_type, DEBUG_VALUE *value, ULONG *remainder_index)
 {
     FIXME("%p, %s, %lu, %p, %p stub.\n", iface, debugstr_a(expression), desired_type, value, remainder_index);
@@ -3229,7 +3231,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_Evaluate(IDebugControl2 *iface, co
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValue(IDebugControl2 *iface, DEBUG_VALUE input, ULONG output_type,
+static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValue(IDebugControl4 *iface, DEBUG_VALUE input, ULONG output_type,
         DEBUG_VALUE *output)
 {
     FIXME("%p, %lu, %p stub.\n", iface, output_type, output);
@@ -3237,7 +3239,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValue(IDebugControl2 *iface,
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValues(IDebugControl2 *iface, ULONG count, DEBUG_VALUE *input,
+static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValues(IDebugControl4 *iface, ULONG count, DEBUG_VALUE *input,
         ULONG *output_types, DEBUG_VALUE *output)
 {
     FIXME("%p, %lu, %p, %p, %p stub.\n", iface, count, input, output_types, output);
@@ -3245,7 +3247,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValues(IDebugControl2 *iface
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_Execute(IDebugControl2 *iface, ULONG output_control, const char *command,
+static HRESULT STDMETHODCALLTYPE debugcontrol_Execute(IDebugControl4 *iface, ULONG output_control, const char *command,
         ULONG flags)
 {
     FIXME("%p, %lu, %s, %#lx stub.\n", iface, output_control, debugstr_a(command), flags);
@@ -3253,7 +3255,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_Execute(IDebugControl2 *iface, ULO
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_ExecuteCommandFile(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODCALLTYPE debugcontrol_ExecuteCommandFile(IDebugControl4 *iface, ULONG output_control,
         const char *command_file, ULONG flags)
 {
     FIXME("%p, %lu, %s, %#lx stub.\n", iface, output_control, debugstr_a(command_file), flags);
@@ -3261,14 +3263,14 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_ExecuteCommandFile(IDebugControl2
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberBreakpoints(IDebugControl2 *iface, ULONG *count)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberBreakpoints(IDebugControl4 *iface, ULONG *count)
 {
     FIXME("%p, %p stub.\n", iface, count);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointByIndex(IDebugControl2 *iface, ULONG index,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointByIndex(IDebugControl4 *iface, ULONG index,
         IDebugBreakpoint **bp)
 {
     FIXME("%p, %lu, %p stub.\n", iface, index, bp);
@@ -3276,14 +3278,14 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointByIndex(IDebugControl
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointById(IDebugControl2 *iface, ULONG id, IDebugBreakpoint **bp)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointById(IDebugControl4 *iface, ULONG id, IDebugBreakpoint **bp)
 {
     FIXME("%p, %lu, %p stub.\n", iface, id, bp);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointParameters(IDebugControl2 *iface, ULONG count, ULONG *ids,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointParameters(IDebugControl4 *iface, ULONG count, ULONG *ids,
         ULONG start, DEBUG_BREAKPOINT_PARAMETERS *parameters)
 {
     FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, count, ids, start, parameters);
@@ -3291,7 +3293,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointParameters(IDebugCont
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_AddBreakpoint(IDebugControl2 *iface, ULONG type, ULONG desired_id,
+static HRESULT STDMETHODCALLTYPE debugcontrol_AddBreakpoint(IDebugControl4 *iface, ULONG type, ULONG desired_id,
         IDebugBreakpoint **bp)
 {
     FIXME("%p, %lu, %lu, %p stub.\n", iface, type, desired_id, bp);
@@ -3299,14 +3301,14 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_AddBreakpoint(IDebugControl2 *ifac
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveBreakpoint(IDebugControl2 *iface, IDebugBreakpoint *bp)
+static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveBreakpoint(IDebugControl4 *iface, IDebugBreakpoint *bp)
 {
     FIXME("%p, %p stub.\n", iface, bp);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_AddExtension(IDebugControl2 *iface, const char *path, ULONG flags,
+static HRESULT STDMETHODCALLTYPE debugcontrol_AddExtension(IDebugControl4 *iface, const char *path, ULONG flags,
         ULONG64 *handle)
 {
     FIXME("%p, %s, %#lx, %p stub.\n", iface, debugstr_a(path), flags, handle);
@@ -3314,14 +3316,14 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_AddExtension(IDebugControl2 *iface
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveExtension(IDebugControl2 *iface, ULONG64 handle)
+static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveExtension(IDebugControl4 *iface, ULONG64 handle)
 {
     FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(handle));
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionByPath(IDebugControl2 *iface, const char *path,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionByPath(IDebugControl4 *iface, const char *path,
         ULONG64 *handle)
 {
     FIXME("%p, %s, %p stub.\n", iface, debugstr_a(path), handle);
@@ -3329,7 +3331,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionByPath(IDebugControl2
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_CallExtension(IDebugControl2 *iface, ULONG64 handle,
+static HRESULT STDMETHODCALLTYPE debugcontrol_CallExtension(IDebugControl4 *iface, ULONG64 handle,
         const char *function, const char *args)
 {
     FIXME("%p, %s, %s, %s stub.\n", iface, wine_dbgstr_longlong(handle), debugstr_a(function), debugstr_a(args));
@@ -3337,7 +3339,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_CallExtension(IDebugControl2 *ifac
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionFunction(IDebugControl2 *iface, ULONG64 handle,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionFunction(IDebugControl4 *iface, ULONG64 handle,
         const char *name, void *function)
 {
     FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(handle), debugstr_a(name), function);
@@ -3345,7 +3347,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionFunction(IDebugControl
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis32(IDebugControl2 *iface,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis32(IDebugControl4 *iface,
         PWINDBG_EXTENSION_APIS32 api)
 {
     FIXME("%p, %p stub.\n", iface, api);
@@ -3353,7 +3355,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis32(IDebugCon
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis64(IDebugControl2 *iface,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis64(IDebugControl4 *iface,
         PWINDBG_EXTENSION_APIS64 api)
 {
     FIXME("%p, %p stub.\n", iface, api);
@@ -3361,7 +3363,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis64(IDebugCon
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberEventFilters(IDebugControl2 *iface, ULONG *specific_events,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberEventFilters(IDebugControl4 *iface, ULONG *specific_events,
         ULONG *specific_exceptions, ULONG *arbitrary_exceptions)
 {
     FIXME("%p, %p, %p, %p stub.\n", iface, specific_events, specific_exceptions, arbitrary_exceptions);
@@ -3369,7 +3371,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberEventFilters(IDebugContro
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterText(IDebugControl2 *iface, ULONG index, char *buffer,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterText(IDebugControl4 *iface, ULONG index, char *buffer,
         ULONG buffer_size, ULONG *text_size)
 {
     FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, index, buffer, buffer_size, text_size);
@@ -3377,7 +3379,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterText(IDebugControl2
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterCommand(IDebugControl2 *iface, ULONG index, char *buffer,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterCommand(IDebugControl4 *iface, ULONG index, char *buffer,
         ULONG buffer_size, ULONG *command_size)
 {
     FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, index, buffer, buffer_size, command_size);
@@ -3385,7 +3387,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterCommand(IDebugContro
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetEventFilterCommand(IDebugControl2 *iface, ULONG index,
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetEventFilterCommand(IDebugControl4 *iface, ULONG index,
         const char *command)
 {
     FIXME("%p, %lu, %s stub.\n", iface, index, debugstr_a(command));
@@ -3393,7 +3395,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_SetEventFilterCommand(IDebugContro
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterParameters(IDebugControl2 *iface, ULONG start,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterParameters(IDebugControl4 *iface, ULONG start,
         ULONG count, DEBUG_SPECIFIC_FILTER_PARAMETERS *parameters)
 {
     FIXME("%p, %lu, %lu, %p stub.\n", iface, start, count, parameters);
@@ -3401,7 +3403,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterParameters(IDebug
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterParameters(IDebugControl2 *iface, ULONG start,
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterParameters(IDebugControl4 *iface, ULONG start,
         ULONG count, DEBUG_SPECIFIC_FILTER_PARAMETERS *parameters)
 {
     FIXME("%p, %lu, %lu, %p stub.\n", iface, start, count, parameters);
@@ -3409,7 +3411,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterParameters(IDebug
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterArgument(IDebugControl2 *iface, ULONG index,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterArgument(IDebugControl4 *iface, ULONG index,
         char *buffer, ULONG buffer_size, ULONG *argument_size)
 {
     FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, index, buffer, buffer_size, argument_size);
@@ -3417,7 +3419,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterArgument(IDebugCo
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterArgument(IDebugControl2 *iface, ULONG index,
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterArgument(IDebugControl4 *iface, ULONG index,
         const char *argument)
 {
     FIXME("%p, %lu, %s stub.\n", iface, index, debugstr_a(argument));
@@ -3425,7 +3427,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterArgument(IDebugCo
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterParameters(IDebugControl2 *iface, ULONG count,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterParameters(IDebugControl4 *iface, ULONG count,
         ULONG *codes, ULONG start, DEBUG_EXCEPTION_FILTER_PARAMETERS *parameters)
 {
     FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, count, codes, start, parameters);
@@ -3433,7 +3435,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterParameters(IDebu
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterParameters(IDebugControl2 *iface, ULONG count,
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterParameters(IDebugControl4 *iface, ULONG count,
         DEBUG_EXCEPTION_FILTER_PARAMETERS *parameters)
 {
     FIXME("%p, %lu, %p stub.\n", iface, count, parameters);
@@ -3441,7 +3443,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterParameters(IDebu
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterSecondCommand(IDebugControl2 *iface, ULONG index,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterSecondCommand(IDebugControl4 *iface, ULONG index,
         char *buffer, ULONG buffer_size, ULONG *command_size)
 {
     FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, index, buffer, buffer_size, command_size);
@@ -3449,7 +3451,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterSecondCommand(ID
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterSecondCommand(IDebugControl2 *iface, ULONG index,
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterSecondCommand(IDebugControl4 *iface, ULONG index,
         const char *command)
 {
     FIXME("%p, %lu, %s stub.\n", iface, index, debugstr_a(command));
@@ -3457,9 +3459,9 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterSecondCommand(ID
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_WaitForEvent(IDebugControl2 *iface, ULONG flags, ULONG timeout)
+static HRESULT STDMETHODCALLTYPE debugcontrol_WaitForEvent(IDebugControl4 *iface, ULONG flags, ULONG timeout)
 {
-    struct debug_client *debug_client = impl_from_IDebugControl2(iface);
+    struct debug_client *debug_client = impl_from_IDebugControl4(iface);
     struct target_process *target;
 
     TRACE("%p, %#lx, %lu.\n", iface, flags, timeout);
@@ -3502,7 +3504,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_WaitForEvent(IDebugControl2 *iface
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetLastEventInformation(IDebugControl2 *iface, ULONG *type, ULONG *pid,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetLastEventInformation(IDebugControl4 *iface, ULONG *type, ULONG *pid,
         ULONG *tid, void *extra_info, ULONG extra_info_size, ULONG *extra_info_used, char *description,
         ULONG desc_size, ULONG *desc_used)
 {
@@ -3512,35 +3514,35 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetLastEventInformation(IDebugCont
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetCurrentTimeDate(IDebugControl2 *iface, ULONG timedate)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetCurrentTimeDate(IDebugControl4 *iface, ULONG timedate)
 {
     FIXME("%p, %lu stub.\n", iface, timedate);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetCurrentSystemUpTime(IDebugControl2 *iface, ULONG uptime)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetCurrentSystemUpTime(IDebugControl4 *iface, ULONG uptime)
 {
     FIXME("%p, %lu stub.\n", iface, uptime);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetDumpFormatFlags(IDebugControl2 *iface, ULONG *flags)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetDumpFormatFlags(IDebugControl4 *iface, ULONG *flags)
 {
     FIXME("%p, %p stub.\n", iface, flags);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberTextPlacements(IDebugControl2 *iface, ULONG *count)
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberTextPlacements(IDebugControl4 *iface, ULONG *count)
 {
     FIXME("%p, %p stub.\n", iface, count);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberTextReplacement(IDebugControl2 *iface, const char *src_text,
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberTextReplacement(IDebugControl4 *iface, const char *src_text,
         ULONG index, char *src_buffer, ULONG src_buffer_size, ULONG *src_size, char *dst_buffer,
         ULONG dst_buffer_size, ULONG *dst_size)
 {
@@ -3550,7 +3552,7 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberTextReplacement(IDebugCon
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextReplacement(IDebugControl2 *iface, const char *src_text,
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextReplacement(IDebugControl4 *iface, const char *src_text,
         const char *dst_text)
 {
     FIXME("%p, %s, %s stub.\n", iface, debugstr_a(src_text), debugstr_a(dst_text));
@@ -3558,14 +3560,14 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextReplacement(IDebugControl2
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveTextReplacements(IDebugControl2 *iface)
+static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveTextReplacements(IDebugControl4 *iface)
 {
     FIXME("%p stub.\n", iface);
 
     return E_NOTIMPL;
 }
 
-static HRESULT STDMETHODCALLTYPE debugcontrol_OutputTextReplacements(IDebugControl2 *iface, ULONG output_control,
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputTextReplacements(IDebugControl4 *iface, ULONG output_control,
         ULONG flags)
 {
     FIXME("%p, %lu, %#lx stub.\n", iface, output_control, flags);
@@ -3573,7 +3575,525 @@ static HRESULT STDMETHODCALLTYPE debugcontrol_OutputTextReplacements(IDebugContr
     return E_NOTIMPL;
 }
 
-static const IDebugControl2Vtbl debugcontrolvtbl =
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetAssemblyOptions(IDebugControl4 *iface, ULONG *options)
+{
+    FIXME("%p, %p stub.\n", iface, options);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_AddAssemblyOptions(IDebugControl4 *iface, ULONG options)
+{
+    FIXME("%p, %#lx stub.\n", iface, options);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveAssemblyOptions(IDebugControl4 *iface, ULONG options)
+{
+    FIXME("%p, %#lx stub.\n", iface, options);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetAssemblyOptions(IDebugControl4 *iface, ULONG options)
+{
+    FIXME("%p, %#lx stub.\n", iface, options);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExpressionSyntax(IDebugControl4 *iface, ULONG *flags)
+{
+    FIXME("%p, %p stub.\n", iface, flags);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetExpressionSyntax(IDebugControl4 *iface, ULONG flags)
+{
+    FIXME("%p, %#lx stub.\n", iface, flags);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetExpressionSyntaxByName(IDebugControl4 *iface, const char *name)
+{
+    FIXME("%p, %s stub.\n", iface, debugstr_a(name));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberExpressionSyntaxes(IDebugControl4 *iface, ULONG *number)
+{
+    FIXME("%p, %p stub.\n", iface, number);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExpressionSyntaxNames(IDebugControl4 *iface, ULONG index, char *fullname,
+        ULONG fullname_buffer_size, ULONG *fullname_size, char *abbrevname, ULONG abbrevname_buffer_size, ULONG *abbrevname_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p, %p, %lu, %p stub.\n", iface, index, fullname, fullname_buffer_size, fullname_size, abbrevname,
+            abbrevname_buffer_size, abbrevname_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberEvents(IDebugControl4 *iface, ULONG *events)
+{
+    FIXME("%p, %p stub.\n", iface, events);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventIndexDescription(IDebugControl4 *iface, ULONG index, ULONG which,
+        char *buffer, ULONG buffer_size, ULONG *desc_size)
+{
+    FIXME("%p, %lu, %lu, %p, %lu, %p stub.\n", iface, index, which, buffer, buffer_size, desc_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetCurrentEventIndex(IDebugControl4 *iface, ULONG *index)
+{
+    FIXME("%p, %p stub.\n", iface, index);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetNextEventIndex(IDebugControl4 *iface, ULONG relation, ULONG value,
+        ULONG *next_index)
+{
+    FIXME("%p, %lu, %lu, %p stub.\n", iface, relation, value, next_index);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogFileWide(IDebugControl4 *iface, WCHAR *buffer, ULONG buffer_size,
+        ULONG *file_size, BOOL *append)
+{
+    FIXME("%p, %p, %lu, %p, %p stub.\n", iface, buffer, buffer_size, file_size, append);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_OpenLogFileWide(IDebugControl4 *iface, const WCHAR *filename, BOOL append)
+{
+    FIXME("%p, %s, %d stub.\n", iface, debugstr_w(filename), append);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_InputWide(IDebugControl4 *iface, WCHAR *buffer, ULONG buffer_size,
+       ULONG *input_size)
+{
+    FIXME("%p, %p, %lu, %p stub.\n", iface, buffer, buffer_size, input_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_ReturnInputWide(IDebugControl4 *iface, const WCHAR *buffer)
+{
+    FIXME("%p, %p stub.\n", iface, buffer);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODVCALLTYPE debugcontrol_OutputWide(IDebugControl4 *iface, ULONG mask, const WCHAR *format, ...)
+{
+    FIXME("%p, %lx, %s stub.\n", iface, mask, debugstr_w(format));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVaListWide(IDebugControl4 *iface, ULONG mask, const WCHAR *format,
+        va_list args)
+{
+    FIXME("%p, %lx, %s stub.\n", iface, mask, debugstr_w(format));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODVCALLTYPE debugcontrol_ControlledOutputWide(IDebugControl4 *iface, ULONG output_control, ULONG mask,
+        const WCHAR *format, ...)
+{
+    FIXME("%p, %lx, %lx, %s stub.\n", iface, output_control, mask, debugstr_w(format));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_ControlledOutputVaListWide(IDebugControl4 *iface, ULONG output_control,
+        ULONG mask, const WCHAR *format, va_list args)
+{
+    FIXME("%p, %lx, %lx, %s stub.\n", iface, output_control, mask, debugstr_w(format));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODVCALLTYPE debugcontrol_OutputPromptWide(IDebugControl4 *iface, ULONG output_control,
+        const WCHAR *format, ...)
+{
+    FIXME("%p, %lx, %s stub.\n", iface, output_control, debugstr_w(format));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputPromptVaListWide(IDebugControl4 *iface, ULONG output_control,
+        const WCHAR *format, va_list args)
+{
+    FIXME("%p, %lx, %s stub.\n", iface, output_control, debugstr_w(format));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetPromptTextWide(IDebugControl4 *iface, WCHAR *buffer, ULONG buffer_size,
+        ULONG *text_size)
+{
+    FIXME("%p, %p, %lu, %p stub.\n", iface, buffer, buffer_size, text_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_AssembleWide(IDebugControl4 *iface, ULONG64 offset, const WCHAR *instr,
+        ULONG64 *end_offset)
+{
+    FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), debugstr_w(instr), end_offset);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_DisassembleWide(IDebugControl4 *iface, ULONG64 offset, ULONG flags, WCHAR *buffer,
+        ULONG buffer_size, ULONG *size, ULONG64 *end_offset)
+{
+    FIXME("%p, %s, %#lx, %p, %lu, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, buffer, buffer_size, size, end_offset);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetProcessorTypeNamesWide(IDebugControl4 *iface, ULONG type, WCHAR *fullname,
+        ULONG fullname_buffer_size, ULONG *fullname_size, WCHAR *abbrevname, ULONG abbrevname_buffer_size, ULONG *abbrevname_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p, %p, %lu, %p stub.\n", iface, type, fullname, fullname_buffer_size, fullname_size, abbrevname,
+            abbrevname_buffer_size, abbrevname_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetTextMacroWide(IDebugControl4 *iface, ULONG slot, WCHAR *buffer,
+        ULONG buffer_size, ULONG *macro_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, slot, buffer, buffer_size, macro_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextMacroWide(IDebugControl4 *iface, ULONG slot, const WCHAR *macro)
+{
+    FIXME("%p, %lu, %s stub.\n", iface, slot, debugstr_w(macro));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_EvaluateWide(IDebugControl4 *iface, const WCHAR *expression, ULONG desired_type,
+        DEBUG_VALUE *value, ULONG *remainder_index)
+{
+    FIXME("%p, %s, %lu, %p, %p stub.\n", iface, debugstr_w(expression), desired_type, value, remainder_index);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_ExecuteWide(IDebugControl4 *iface, ULONG output_control, const WCHAR *command,
+        ULONG flags)
+{
+    FIXME("%p, %lx, %s, %lx stub.\n", iface, output_control, debugstr_w(command), flags);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_ExecuteCommandFileWide(IDebugControl4 *iface, ULONG output_control,
+        const WCHAR *commandfile, ULONG flags)
+{
+    FIXME("%p, %lx, %s, %lx stub.\n", iface, output_control, debugstr_w(commandfile), flags);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointByIndex2(IDebugControl4 *iface, ULONG index, PDEBUG_BREAKPOINT2 *bp)
+{
+    FIXME("%p, %lu, %p stub.\n", iface, index, bp);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointById2(IDebugControl4 *iface, ULONG id, PDEBUG_BREAKPOINT2 *bp)
+{
+    FIXME("%p, %lu, %p stub.\n", iface, id, bp);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_AddBreakpoint2(IDebugControl4 *iface, ULONG type, ULONG desired_id,
+        PDEBUG_BREAKPOINT2 *bp)
+{
+    FIXME("%p, %lu, %lu, %p stub.\n", iface, type, desired_id, bp);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveBreakpoint2(IDebugControl4 *iface, PDEBUG_BREAKPOINT2 bp)
+{
+    FIXME("%p, %p stub.\n", iface, bp);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_AddExtensionWide(IDebugControl4 *iface, const WCHAR *path, ULONG flags,
+        ULONG64 *handle)
+{
+    FIXME("%p, %s, %#lx, %p stub.\n", iface, debugstr_w(path), flags, handle);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionByPathWide(IDebugControl4 *iface, const WCHAR *path, ULONG64 *handle)
+{
+    FIXME("%p, %s, %p stub.\n", iface, debugstr_w(path), handle);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_CallExtensionWide(IDebugControl4 *iface, ULONG64 handle, const WCHAR *function,
+        const WCHAR *arguments)
+{
+    FIXME("%p, %s, %s, %s stub.\n", iface, wine_dbgstr_longlong(handle), debugstr_w(function), debugstr_w(arguments));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionFunctionWide(IDebugControl4 *iface, ULONG64 handle,
+        const WCHAR *function, FARPROC *func)
+{
+    FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(handle), debugstr_w(function), func);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterTextWide(IDebugControl4 *iface, ULONG index, WCHAR *buffer,
+        ULONG buffer_size, ULONG *text_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, index, buffer, buffer_size, text_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterCommandWide(IDebugControl4 *iface, ULONG index, WCHAR *buffer,
+        ULONG buffer_size, ULONG *command_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, index, buffer, buffer_size, command_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetEventFilterCommandWide(IDebugControl4 *iface, ULONG index, const WCHAR *command)
+{
+    FIXME("%p, %lu, %s stub.\n", iface, index, debugstr_w(command));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterArgumentWide(IDebugControl4 *iface, ULONG index, WCHAR *buffer,
+        ULONG buffer_size, ULONG *argument_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, index, buffer, buffer_size, argument_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterArgumentWide(IDebugControl4 *iface, ULONG index,
+        const WCHAR *argument)
+{
+    FIXME("%p, %lu, %s stub.\n", iface, index, debugstr_w(argument));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterSecondCommandWide(IDebugControl4 *iface, ULONG index,
+        WCHAR *buffer, ULONG buffer_size, ULONG *command_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, index, buffer, buffer_size, command_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterSecondCommandWide(IDebugControl4 *iface, ULONG index,
+        const WCHAR *command)
+{
+    FIXME("%p, %lu, %s stub.\n", iface, index, debugstr_w(command));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetLastEventInformationWide(IDebugControl4 *iface, ULONG *type, ULONG *processid,
+        ULONG *threadid, void *extra_info, ULONG extra_info_size, ULONG *extra_info_used, WCHAR *desc, ULONG desc_size,
+        ULONG *desc_used)
+{
+    FIXME("%p, %p, %p, %p, %p, %lu, %p, %p, %lu, %p stub.\n", iface, type, processid, threadid, extra_info, extra_info_size,
+            extra_info_used, desc, desc_size, desc_used);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetTextReplacementWide(IDebugControl4 *iface, const WCHAR *src_text, ULONG index,
+        WCHAR *src_buffer, ULONG src_buffer_size, ULONG *src_size, WCHAR *dst_buffer, ULONG dest_buffer_size, ULONG *dst_size)
+{
+    FIXME("%p, %s, %lu, %p, %lu, %p, %p, %lu, %p stub.\n", iface, debugstr_w(src_text), index, src_buffer, src_buffer_size,
+            src_size, dst_buffer, dest_buffer_size, dst_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextReplacementWide(IDebugControl4 *iface, const WCHAR *src_text,
+        const WCHAR *dst_text)
+{
+    FIXME("%p, %s, %s stub.\n", iface, debugstr_w(src_text), debugstr_w(dst_text));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_SetExpressionSyntaxByNameWide(IDebugControl4 *iface, const WCHAR *abbrevname)
+{
+    FIXME("%p, %s stub.\n", iface, debugstr_w(abbrevname));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetExpressionSyntaxNamesWide(IDebugControl4 *iface, ULONG index,
+        WCHAR *fullname_buffer, ULONG fullname_buffer_size, ULONG *fullname_size, WCHAR *abbrevname_buffer,
+        ULONG abbrevname_buffer_size, ULONG *abbrev_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p, %p, %lu, %p stub.\n", iface, index, fullname_buffer, fullname_buffer_size, fullname_size,
+            abbrevname_buffer, abbrevname_buffer_size, abbrev_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventIndexDescriptionWide(IDebugControl4 *iface, ULONG index, ULONG which,
+        WCHAR *buffer, ULONG buffer_size, ULONG *desc_size)
+{
+    FIXME("%p, %lu, %lu, %p, %lu, %p stub.\n", iface, index, which, buffer, buffer_size, desc_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogFile2(IDebugControl4 *iface, char *buffer, ULONG buffer_size,
+        ULONG *file_size, ULONG *flags)
+{
+    FIXME("%p, %p, %lu, %p, %p stub.\n", iface, buffer, buffer_size, file_size, flags);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_OpenLogFile2(IDebugControl4 *iface, const char *filename, ULONG flags)
+{
+    FIXME("%p, %s, %#lx stub.\n", iface, debugstr_a(filename), flags);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogFile2Wide(IDebugControl4 *iface, WCHAR *buffer, ULONG buffer_size,
+        ULONG *file_size, ULONG *flags)
+{
+    FIXME("%p, %p, %lu, %p, %p stub.\n", iface, buffer, buffer_size, file_size, flags);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_OpenLogFile2Wide(IDebugControl4 *iface, const WCHAR *filename, ULONG flags)
+{
+    FIXME("%p, %s, %#lx stub.\n", iface, debugstr_w(filename), flags);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemVersionValues(IDebugControl4 *iface, ULONG *platformid,
+        ULONG *win32major, ULONG *win32minor, ULONG *kdmajor, ULONG *kdminor)
+{
+    FIXME("%p, %p, %p, %p, %p, %p stub.\n", iface, platformid, win32major, win32minor, kdmajor, kdminor);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemVersionString(IDebugControl4 *iface, ULONG which, char *buffer,
+        ULONG buffer_size, ULONG *string_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, which, buffer, buffer_size, string_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemVersionStringWide(IDebugControl4 *iface, ULONG which, WCHAR *buffer,
+        ULONG buffer_size, ULONG *string_size)
+{
+    FIXME("%p, %lu, %p, %lu, %p stub.\n", iface, which, buffer, buffer_size, string_size);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetContextStackTrace(IDebugControl4 *iface, void *start_context,
+        ULONG start_context_size, PDEBUG_STACK_FRAME frames, ULONG frames_size, void *frame_contexts, ULONG frame_contexts_size,
+        ULONG frame_contexts_entry_size, ULONG *frames_filled)
+{
+    FIXME("%p, %p, %lu, %p, %lu, %p, %lu, %lu, %p stub.\n", iface, start_context, start_context_size, frames, frames_size,
+            frame_contexts, frame_contexts_size, frame_contexts_entry_size, frames_filled);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_OutputContextStackTrace(IDebugControl4 *iface, ULONG output_control,
+        PDEBUG_STACK_FRAME frames, ULONG frames_size, void *frame_contexts, ULONG frame_contexts_size,
+        ULONG frame_contexts_entry_size, ULONG flags)
+{
+    FIXME("%p, %#lx, %p, %lu, %p, %lu, %lu, %#lx stub.\n", iface, output_control, frames, frames_size, frame_contexts,
+            frame_contexts_size, frame_contexts_entry_size, flags);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetStoredEventInformation(IDebugControl4 *iface, ULONG *type, ULONG *processid,
+        ULONG *threadid, void *context, ULONG context_size, ULONG *context_used, void *extra_info, ULONG extra_info_size,
+        ULONG *extra_info_used)
+{
+    FIXME("%p, %p, %p, %p, %p, %lu, %p, %p, %lu, %p stub.\n", iface, type, processid, threadid, context, context_size,
+            context_used, extra_info, extra_info_size, extra_info_used);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetManagedStatus(IDebugControl4 *iface, ULONG *flags, ULONG which_string,
+        char *string, ULONG string_size, ULONG string_needed)
+{
+    FIXME("%p, %p, %lu, %p, %lu, %lu stub.\n", iface, flags, which_string, string, string_size, string_needed);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_GetManagedStatusWide(IDebugControl4 *iface, ULONG *flags, ULONG which_string,
+        WCHAR *string, ULONG string_size, ULONG string_needed)
+{
+    FIXME("%p, %p, %lu, %p, %lu, %lu stub.\n", iface, flags, which_string, string, string_size, string_needed);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugcontrol_ResetManagedStatus(IDebugControl4 *iface, ULONG flags)
+{
+    FIXME("%p, %#lx stub.\n", iface, flags);
+
+    return E_NOTIMPL;
+}
+
+static const IDebugControl4Vtbl debugcontrolvtbl =
 {
     debugcontrol_QueryInterface,
     debugcontrol_AddRef,
@@ -3678,6 +4198,72 @@ static const IDebugControl2Vtbl debugcontrolvtbl =
     debugcontrol_SetTextReplacement,
     debugcontrol_RemoveTextReplacements,
     debugcontrol_OutputTextReplacements,
+    debugcontrol_GetAssemblyOptions,
+    debugcontrol_AddAssemblyOptions,
+    debugcontrol_RemoveAssemblyOptions,
+    debugcontrol_SetAssemblyOptions,
+    debugcontrol_GetExpressionSyntax,
+    debugcontrol_SetExpressionSyntax,
+    debugcontrol_SetExpressionSyntaxByName,
+    debugcontrol_GetNumberExpressionSyntaxes,
+    debugcontrol_GetExpressionSyntaxNames,
+    debugcontrol_GetNumberEvents,
+    debugcontrol_GetEventIndexDescription,
+    debugcontrol_GetCurrentEventIndex,
+    debugcontrol_SetNextEventIndex,
+    debugcontrol_GetLogFileWide,
+    debugcontrol_OpenLogFileWide,
+    debugcontrol_InputWide,
+    debugcontrol_ReturnInputWide,
+    debugcontrol_OutputWide,
+    debugcontrol_OutputVaListWide,
+    debugcontrol_ControlledOutputWide,
+    debugcontrol_ControlledOutputVaListWide,
+    debugcontrol_OutputPromptWide,
+    debugcontrol_OutputPromptVaListWide,
+    debugcontrol_GetPromptTextWide,
+    debugcontrol_AssembleWide,
+    debugcontrol_DisassembleWide,
+    debugcontrol_GetProcessorTypeNamesWide,
+    debugcontrol_GetTextMacroWide,
+    debugcontrol_SetTextMacroWide,
+    debugcontrol_EvaluateWide,
+    debugcontrol_ExecuteWide,
+    debugcontrol_ExecuteCommandFileWide,
+    debugcontrol_GetBreakpointByIndex2,
+    debugcontrol_GetBreakpointById2,
+    debugcontrol_AddBreakpoint2,
+    debugcontrol_RemoveBreakpoint2,
+    debugcontrol_AddExtensionWide,
+    debugcontrol_GetExtensionByPathWide,
+    debugcontrol_CallExtensionWide,
+    debugcontrol_GetExtensionFunctionWide,
+    debugcontrol_GetEventFilterTextWide,
+    debugcontrol_GetEventFilterCommandWide,
+    debugcontrol_SetEventFilterCommandWide,
+    debugcontrol_GetSpecificFilterArgumentWide,
+    debugcontrol_SetSpecificFilterArgumentWide,
+    debugcontrol_GetSpecificFilterSecondCommandWide,
+    debugcontrol_SetSpecificFilterSecondCommandWide,
+    debugcontrol_GetLastEventInformationWide,
+    debugcontrol_GetTextReplacementWide,
+    debugcontrol_SetTextReplacementWide,
+    debugcontrol_SetExpressionSyntaxByNameWide,
+    debugcontrol_GetExpressionSyntaxNamesWide,
+    debugcontrol_GetEventIndexDescriptionWide,
+    debugcontrol_GetLogFile2,
+    debugcontrol_OpenLogFile2,
+    debugcontrol_GetLogFile2Wide,
+    debugcontrol_OpenLogFile2Wide,
+    debugcontrol_GetSystemVersionValues,
+    debugcontrol_GetSystemVersionString,
+    debugcontrol_GetSystemVersionStringWide,
+    debugcontrol_GetContextStackTrace,
+    debugcontrol_OutputContextStackTrace,
+    debugcontrol_GetStoredEventInformation,
+    debugcontrol_GetManagedStatus,
+    debugcontrol_GetManagedStatusWide,
+    debugcontrol_ResetManagedStatus,
 };
 
 static HRESULT STDMETHODCALLTYPE debugadvanced_QueryInterface(IDebugAdvanced *iface, REFIID riid, void **obj)
@@ -4038,7 +4624,7 @@ HRESULT WINAPI DebugCreate(REFIID riid, void **obj)
     debug_client->IDebugClient_iface.lpVtbl = &debugclientvtbl;
     debug_client->IDebugDataSpaces_iface.lpVtbl = &debugdataspacesvtbl;
     debug_client->IDebugSymbols3_iface.lpVtbl = &debugsymbolsvtbl;
-    debug_client->IDebugControl2_iface.lpVtbl = &debugcontrolvtbl;
+    debug_client->IDebugControl4_iface.lpVtbl = &debugcontrolvtbl;
     debug_client->IDebugAdvanced_iface.lpVtbl = &debugadvancedvtbl;
     debug_client->IDebugSystemObjects_iface.lpVtbl = &debugsystemobjectsvtbl;
     debug_client->refcount = 1;
-- 
2.35.1




More information about the wine-devel mailing list