user32/tests: Fix test_listbox_messages() message sequences to support WinEvents.
[wine.git] / dlls / dbgeng / dbgeng.c
blobc857456b51c9dbb9e04204a4e9c8fa4a01f8b71d
1 /*
2 * Support for Microsoft Debugging Extension API
4 * Copyright (C) 2010 Volodymyr Shcherbyna
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include <stdarg.h>
23 #define COBJMACROS
25 #include "windef.h"
26 #include "winbase.h"
27 #include "winternl.h"
28 #include "psapi.h"
30 #include "initguid.h"
31 #include "dbgeng.h"
33 #include "wine/debug.h"
34 #include "wine/heap.h"
35 #include "wine/list.h"
37 WINE_DEFAULT_DEBUG_CHANNEL(dbgeng);
39 struct module_info
41 DEBUG_MODULE_PARAMETERS params;
42 char image_name[MAX_PATH];
45 struct target_process
47 struct list entry;
48 unsigned int pid;
49 unsigned int attach_flags;
50 HANDLE handle;
51 struct
53 struct module_info *info;
54 unsigned int loaded;
55 unsigned int unloaded;
56 BOOL initialized;
57 } modules;
58 ULONG cpu_type;
61 struct debug_client
63 IDebugClient7 IDebugClient_iface;
64 IDebugDataSpaces IDebugDataSpaces_iface;
65 IDebugSymbols3 IDebugSymbols3_iface;
66 IDebugControl2 IDebugControl2_iface;
67 IDebugAdvanced IDebugAdvanced_iface;
68 IDebugSystemObjects IDebugSystemObjects_iface;
69 LONG refcount;
70 ULONG engine_options;
71 struct list targets;
72 IDebugEventCallbacks *event_callbacks;
75 static struct target_process *debug_client_get_target(struct debug_client *debug_client)
77 if (list_empty(&debug_client->targets))
78 return NULL;
80 return LIST_ENTRY(list_head(&debug_client->targets), struct target_process, entry);
83 static HRESULT debug_target_return_string(const char *str, char *buffer, unsigned int buffer_size,
84 unsigned int *size)
86 unsigned int len = strlen(str), dst_len;
88 if (size)
89 *size = len + 1;
91 if (buffer && buffer_size)
93 dst_len = min(len, buffer_size - 1);
94 if (dst_len)
95 memcpy(buffer, str, dst_len);
96 buffer[dst_len] = 0;
99 return len < buffer_size ? S_OK : S_FALSE;
102 static WORD debug_target_get_module_machine(struct target_process *target, HMODULE module)
104 IMAGE_DOS_HEADER dos = { 0 };
105 WORD machine = 0;
107 ReadProcessMemory(target->handle, module, &dos, sizeof(dos), NULL);
108 if (dos.e_magic == IMAGE_DOS_SIGNATURE)
110 ReadProcessMemory(target->handle, (const char *)module + dos.e_lfanew + 4 /* PE signature */, &machine,
111 sizeof(machine), NULL);
114 return machine;
117 static DWORD debug_target_get_module_timestamp(struct target_process *target, HMODULE module)
119 IMAGE_DOS_HEADER dos = { 0 };
120 DWORD timestamp = 0;
122 ReadProcessMemory(target->handle, module, &dos, sizeof(dos), NULL);
123 if (dos.e_magic == IMAGE_DOS_SIGNATURE)
125 ReadProcessMemory(target->handle, (const char *)module + dos.e_lfanew + 4 /* PE signature */ +
126 FIELD_OFFSET(IMAGE_FILE_HEADER, TimeDateStamp), &timestamp, sizeof(timestamp), NULL);
129 return timestamp;
132 static HRESULT debug_target_init_modules_info(struct target_process *target)
134 unsigned int i, count;
135 HMODULE *modules;
136 MODULEINFO info;
137 DWORD needed;
139 if (target->modules.initialized)
140 return S_OK;
142 if (!target->handle)
143 return E_UNEXPECTED;
145 needed = 0;
146 EnumProcessModules(target->handle, NULL, 0, &needed);
147 if (!needed)
148 return E_FAIL;
150 count = needed / sizeof(HMODULE);
152 if (!(modules = heap_alloc(count * sizeof(*modules))))
153 return E_OUTOFMEMORY;
155 if (!(target->modules.info = heap_alloc_zero(count * sizeof(*target->modules.info))))
157 heap_free(modules);
158 return E_OUTOFMEMORY;
161 if (EnumProcessModules(target->handle, modules, count * sizeof(*modules), &needed))
163 for (i = 0; i < count; ++i)
165 if (!GetModuleInformation(target->handle, modules[i], &info, sizeof(info)))
167 WARN("Failed to get module information, error %d.\n", GetLastError());
168 continue;
171 target->modules.info[i].params.Base = (ULONG_PTR)info.lpBaseOfDll;
172 target->modules.info[i].params.Size = info.SizeOfImage;
173 target->modules.info[i].params.TimeDateStamp = debug_target_get_module_timestamp(target, modules[i]);
175 GetModuleFileNameExA(target->handle, modules[i], target->modules.info[i].image_name,
176 ARRAY_SIZE(target->modules.info[i].image_name));
180 target->cpu_type = debug_target_get_module_machine(target, modules[0]);
182 heap_free(modules);
184 target->modules.loaded = count;
185 target->modules.unloaded = 0; /* FIXME */
187 target->modules.initialized = TRUE;
189 return S_OK;
192 static const struct module_info *debug_target_get_module_info(struct target_process *target, unsigned int i)
194 if (FAILED(debug_target_init_modules_info(target)))
195 return NULL;
197 if (i >= target->modules.loaded)
198 return NULL;
200 return &target->modules.info[i];
203 static const struct module_info *debug_target_get_module_info_by_base(struct target_process *target, ULONG64 base)
205 unsigned int i;
207 if (FAILED(debug_target_init_modules_info(target)))
208 return NULL;
210 for (i = 0; i < target->modules.loaded; ++i)
212 if (target->modules.info[i].params.Base == base)
213 return &target->modules.info[i];
216 return NULL;
219 static void debug_client_detach_target(struct target_process *target)
221 NTSTATUS status;
223 if (!target->handle)
224 return;
226 if (target->attach_flags & DEBUG_ATTACH_NONINVASIVE)
228 BOOL resume = !(target->attach_flags & DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND);
230 if (resume)
232 if ((status = NtResumeProcess(target->handle)))
233 WARN("Failed to resume process, status %#x.\n", status);
237 CloseHandle(target->handle);
238 target->handle = NULL;
241 static struct debug_client *impl_from_IDebugClient(IDebugClient7 *iface)
243 return CONTAINING_RECORD(iface, struct debug_client, IDebugClient_iface);
246 static struct debug_client *impl_from_IDebugDataSpaces(IDebugDataSpaces *iface)
248 return CONTAINING_RECORD(iface, struct debug_client, IDebugDataSpaces_iface);
251 static struct debug_client *impl_from_IDebugSymbols3(IDebugSymbols3 *iface)
253 return CONTAINING_RECORD(iface, struct debug_client, IDebugSymbols3_iface);
256 static struct debug_client *impl_from_IDebugControl2(IDebugControl2 *iface)
258 return CONTAINING_RECORD(iface, struct debug_client, IDebugControl2_iface);
261 static struct debug_client *impl_from_IDebugAdvanced(IDebugAdvanced *iface)
263 return CONTAINING_RECORD(iface, struct debug_client, IDebugAdvanced_iface);
266 static struct debug_client *impl_from_IDebugSystemObjects(IDebugSystemObjects *iface)
268 return CONTAINING_RECORD(iface, struct debug_client, IDebugSystemObjects_iface);
271 static HRESULT STDMETHODCALLTYPE debugclient_QueryInterface(IDebugClient7 *iface, REFIID riid, void **obj)
273 struct debug_client *debug_client = impl_from_IDebugClient(iface);
275 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
277 if (IsEqualIID(riid, &IID_IDebugClient) ||
278 IsEqualIID(riid, &IID_IDebugClient2) ||
279 IsEqualIID(riid, &IID_IDebugClient3) ||
280 IsEqualIID(riid, &IID_IDebugClient4) ||
281 IsEqualIID(riid, &IID_IDebugClient5) ||
282 IsEqualIID(riid, &IID_IDebugClient6) ||
283 IsEqualIID(riid, &IID_IDebugClient7) ||
284 IsEqualIID(riid, &IID_IUnknown))
286 *obj = iface;
288 else if (IsEqualIID(riid, &IID_IDebugDataSpaces))
290 *obj = &debug_client->IDebugDataSpaces_iface;
292 else if (IsEqualIID(riid, &IID_IDebugSymbols)
293 || IsEqualIID(riid, &IID_IDebugSymbols2)
294 || IsEqualIID(riid, &IID_IDebugSymbols3))
296 *obj = &debug_client->IDebugSymbols3_iface;
298 else if (IsEqualIID(riid, &IID_IDebugControl2)
299 || IsEqualIID(riid, &IID_IDebugControl))
301 *obj = &debug_client->IDebugControl2_iface;
303 else if (IsEqualIID(riid, &IID_IDebugAdvanced))
305 *obj = &debug_client->IDebugAdvanced_iface;
307 else if (IsEqualIID(riid, &IID_IDebugSystemObjects))
309 *obj = &debug_client->IDebugSystemObjects_iface;
311 else
313 WARN("Unsupported interface %s.\n", debugstr_guid(riid));
314 *obj = NULL;
315 return E_NOINTERFACE;
318 IUnknown_AddRef((IUnknown *)*obj);
319 return S_OK;
322 static ULONG STDMETHODCALLTYPE debugclient_AddRef(IDebugClient7 *iface)
324 struct debug_client *debug_client = impl_from_IDebugClient(iface);
325 ULONG refcount = InterlockedIncrement(&debug_client->refcount);
327 TRACE("%p, %d.\n", iface, refcount);
329 return refcount;
332 static void debug_target_free(struct target_process *target)
334 heap_free(target->modules.info);
335 heap_free(target);
338 static ULONG STDMETHODCALLTYPE debugclient_Release(IDebugClient7 *iface)
340 struct debug_client *debug_client = impl_from_IDebugClient(iface);
341 ULONG refcount = InterlockedDecrement(&debug_client->refcount);
342 struct target_process *cur, *cur2;
344 TRACE("%p, %d.\n", debug_client, refcount);
346 if (!refcount)
348 LIST_FOR_EACH_ENTRY_SAFE(cur, cur2, &debug_client->targets, struct target_process, entry)
350 debug_client_detach_target(cur);
351 list_remove(&cur->entry);
352 debug_target_free(cur);
354 if (debug_client->event_callbacks)
355 debug_client->event_callbacks->lpVtbl->Release(debug_client->event_callbacks);
356 heap_free(debug_client);
359 return refcount;
362 static HRESULT STDMETHODCALLTYPE debugclient_AttachKernel(IDebugClient7 *iface, ULONG flags, const char *options)
364 FIXME("%p, %#x, %s stub.\n", iface, flags, debugstr_a(options));
366 return E_NOTIMPL;
369 static HRESULT STDMETHODCALLTYPE debugclient_GetKernelConnectionOptions(IDebugClient7 *iface, char *buffer,
370 ULONG buffer_size, ULONG *options_size)
372 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, options_size);
374 return E_NOTIMPL;
377 static HRESULT STDMETHODCALLTYPE debugclient_SetKernelConnectionOptions(IDebugClient7 *iface, const char *options)
379 FIXME("%p, %s stub.\n", iface, debugstr_a(options));
381 return E_NOTIMPL;
384 static HRESULT STDMETHODCALLTYPE debugclient_StartProcessServer(IDebugClient7 *iface, ULONG flags, const char *options,
385 void *reserved)
387 FIXME("%p, %#x, %s, %p stub.\n", iface, flags, debugstr_a(options), reserved);
389 return E_NOTIMPL;
392 static HRESULT STDMETHODCALLTYPE debugclient_ConnectProcessServer(IDebugClient7 *iface, const char *remote_options,
393 ULONG64 *server)
395 FIXME("%p, %s, %p stub.\n", iface, debugstr_a(remote_options), server);
397 return E_NOTIMPL;
400 static HRESULT STDMETHODCALLTYPE debugclient_DisconnectProcessServer(IDebugClient7 *iface, ULONG64 server)
402 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(server));
404 return E_NOTIMPL;
407 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessSystemIds(IDebugClient7 *iface, ULONG64 server,
408 ULONG *ids, ULONG count, ULONG *actual_count)
410 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(server), ids, count, actual_count);
412 return E_NOTIMPL;
415 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessSystemIdByExecutableName(IDebugClient7 *iface,
416 ULONG64 server, const char *exe_name, ULONG flags, ULONG *id)
418 FIXME("%p, %s, %s, %#x, %p stub.\n", iface, wine_dbgstr_longlong(server), debugstr_a(exe_name), flags, id);
420 return E_NOTIMPL;
423 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessDescription(IDebugClient7 *iface, ULONG64 server,
424 ULONG systemid, ULONG flags, char *exe_name, ULONG exe_name_size, ULONG *actual_exe_name_size,
425 char *description, ULONG description_size, ULONG *actual_description_size)
427 FIXME("%p, %s, %u, %#x, %p, %u, %p, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(server), systemid, flags,
428 exe_name, exe_name_size, actual_exe_name_size, description, description_size, actual_description_size);
430 return E_NOTIMPL;
433 static HRESULT STDMETHODCALLTYPE debugclient_AttachProcess(IDebugClient7 *iface, ULONG64 server, ULONG pid, ULONG flags)
435 struct debug_client *debug_client = impl_from_IDebugClient(iface);
436 struct target_process *process;
438 TRACE("%p, %s, %u, %#x.\n", iface, wine_dbgstr_longlong(server), pid, flags);
440 if (server)
442 FIXME("Remote debugging is not supported.\n");
443 return E_NOTIMPL;
446 if (!(process = heap_alloc_zero(sizeof(*process))))
447 return E_OUTOFMEMORY;
449 process->pid = pid;
450 process->attach_flags = flags;
452 list_add_head(&debug_client->targets, &process->entry);
454 return S_OK;
457 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcess(IDebugClient7 *iface, ULONG64 server, char *cmdline,
458 ULONG flags)
460 FIXME("%p, %s, %s, %#x stub.\n", iface, wine_dbgstr_longlong(server), debugstr_a(cmdline), flags);
462 return E_NOTIMPL;
465 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessAndAttach(IDebugClient7 *iface, ULONG64 server, char *cmdline,
466 ULONG create_flags, ULONG pid, ULONG attach_flags)
468 FIXME("%p, %s, %s, %#x, %u, %#x stub.\n", iface, wine_dbgstr_longlong(server), debugstr_a(cmdline), create_flags,
469 pid, attach_flags);
471 return E_NOTIMPL;
474 static HRESULT STDMETHODCALLTYPE debugclient_GetProcessOptions(IDebugClient7 *iface, ULONG *options)
476 FIXME("%p, %p stub.\n", iface, options);
478 return E_NOTIMPL;
481 static HRESULT STDMETHODCALLTYPE debugclient_AddProcessOptions(IDebugClient7 *iface, ULONG options)
483 FIXME("%p, %#x stub.\n", iface, options);
485 return E_NOTIMPL;
488 static HRESULT STDMETHODCALLTYPE debugclient_RemoveProcessOptions(IDebugClient7 *iface, ULONG options)
490 FIXME("%p, %#x stub.\n", iface, options);
492 return E_NOTIMPL;
495 static HRESULT STDMETHODCALLTYPE debugclient_SetProcessOptions(IDebugClient7 *iface, ULONG options)
497 FIXME("%p, %#x stub.\n", iface, options);
499 return E_NOTIMPL;
502 static HRESULT STDMETHODCALLTYPE debugclient_OpenDumpFile(IDebugClient7 *iface, const char *filename)
504 FIXME("%p, %s stub.\n", iface, debugstr_a(filename));
506 return E_NOTIMPL;
509 static HRESULT STDMETHODCALLTYPE debugclient_WriteDumpFile(IDebugClient7 *iface, const char *filename, ULONG qualifier)
511 FIXME("%p, %s, %u stub.\n", iface, debugstr_a(filename), qualifier);
513 return E_NOTIMPL;
516 static HRESULT STDMETHODCALLTYPE debugclient_ConnectSession(IDebugClient7 *iface, ULONG flags, ULONG history_limit)
518 FIXME("%p, %#x, %u stub.\n", iface, flags, history_limit);
520 return E_NOTIMPL;
523 static HRESULT STDMETHODCALLTYPE debugclient_StartServer(IDebugClient7 *iface, const char *options)
525 FIXME("%p, %s stub.\n", iface, debugstr_a(options));
527 return E_NOTIMPL;
530 static HRESULT STDMETHODCALLTYPE debugclient_OutputServers(IDebugClient7 *iface, ULONG output_control,
531 const char *machine, ULONG flags)
533 FIXME("%p, %u, %s, %#x stub.\n", iface, output_control, debugstr_a(machine), flags);
535 return E_NOTIMPL;
538 static HRESULT STDMETHODCALLTYPE debugclient_TerminateProcesses(IDebugClient7 *iface)
540 FIXME("%p stub.\n", iface);
542 return E_NOTIMPL;
545 static HRESULT STDMETHODCALLTYPE debugclient_DetachProcesses(IDebugClient7 *iface)
547 struct debug_client *debug_client = impl_from_IDebugClient(iface);
548 struct target_process *target;
550 TRACE("%p.\n", iface);
552 LIST_FOR_EACH_ENTRY(target, &debug_client->targets, struct target_process, entry)
554 debug_client_detach_target(target);
557 return S_OK;
560 static HRESULT STDMETHODCALLTYPE debugclient_EndSession(IDebugClient7 *iface, ULONG flags)
562 FIXME("%p, %#x stub.\n", iface, flags);
564 return E_NOTIMPL;
567 static HRESULT STDMETHODCALLTYPE debugclient_GetExitCode(IDebugClient7 *iface, ULONG *code)
569 FIXME("%p, %p stub.\n", iface, code);
571 return E_NOTIMPL;
574 static HRESULT STDMETHODCALLTYPE debugclient_DispatchCallbacks(IDebugClient7 *iface, ULONG timeout)
576 FIXME("%p, %u stub.\n", iface, timeout);
578 return E_NOTIMPL;
581 static HRESULT STDMETHODCALLTYPE debugclient_ExitDispatch(IDebugClient7 *iface, IDebugClient *client)
583 FIXME("%p, %p stub.\n", iface, client);
585 return E_NOTIMPL;
588 static HRESULT STDMETHODCALLTYPE debugclient_CreateClient(IDebugClient7 *iface, IDebugClient **client)
590 FIXME("%p, %p stub.\n", iface, client);
592 return E_NOTIMPL;
595 static HRESULT STDMETHODCALLTYPE debugclient_GetInputCallbacks(IDebugClient7 *iface, IDebugInputCallbacks **callbacks)
597 FIXME("%p, %p stub.\n", iface, callbacks);
599 return E_NOTIMPL;
602 static HRESULT STDMETHODCALLTYPE debugclient_SetInputCallbacks(IDebugClient7 *iface, IDebugInputCallbacks *callbacks)
604 FIXME("%p, %p stub.\n", iface, callbacks);
606 return E_NOTIMPL;
609 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputCallbacks(IDebugClient7 *iface, IDebugOutputCallbacks **callbacks)
611 FIXME("%p, %p stub.\n", iface, callbacks);
613 return E_NOTIMPL;
616 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputCallbacks(IDebugClient7 *iface, IDebugOutputCallbacks *callbacks)
618 FIXME("%p, %p stub.\n", iface, callbacks);
620 return E_NOTIMPL;
623 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputMask(IDebugClient7 *iface, ULONG *mask)
625 FIXME("%p, %p stub.\n", iface, mask);
627 return E_NOTIMPL;
630 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputMask(IDebugClient7 *iface, ULONG mask)
632 FIXME("%p, %#x stub.\n", iface, mask);
634 return E_NOTIMPL;
637 static HRESULT STDMETHODCALLTYPE debugclient_GetOtherOutputMask(IDebugClient7 *iface, IDebugClient *client, ULONG *mask)
639 FIXME("%p, %p, %p stub.\n", iface, client, mask);
641 return E_NOTIMPL;
644 static HRESULT STDMETHODCALLTYPE debugclient_SetOtherOutputMask(IDebugClient7 *iface, IDebugClient *client, ULONG mask)
646 FIXME("%p, %p, %#x stub.\n", iface, client, mask);
648 return E_NOTIMPL;
651 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputWidth(IDebugClient7 *iface, ULONG *columns)
653 FIXME("%p, %p stub.\n", iface, columns);
655 return E_NOTIMPL;
658 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputWidth(IDebugClient7 *iface, ULONG columns)
660 FIXME("%p, %u stub.\n", iface, columns);
662 return E_NOTIMPL;
665 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputLinePrefix(IDebugClient7 *iface, char *buffer, ULONG buffer_size,
666 ULONG *prefix_size)
668 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, prefix_size);
670 return E_NOTIMPL;
673 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputLinePrefix(IDebugClient7 *iface, const char *prefix)
675 FIXME("%p, %s stub.\n", iface, debugstr_a(prefix));
677 return E_NOTIMPL;
680 static HRESULT STDMETHODCALLTYPE debugclient_GetIdentity(IDebugClient7 *iface, char *buffer, ULONG buffer_size,
681 ULONG *identity_size)
683 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, identity_size);
685 return E_NOTIMPL;
688 static HRESULT STDMETHODCALLTYPE debugclient_OutputIdentity(IDebugClient7 *iface, ULONG output_control, ULONG flags,
689 const char *format)
691 FIXME("%p, %u, %#x, %s stub.\n", iface, output_control, flags, debugstr_a(format));
693 return E_NOTIMPL;
696 static HRESULT STDMETHODCALLTYPE debugclient_GetEventCallbacks(IDebugClient7 *iface, IDebugEventCallbacks **callbacks)
698 struct debug_client *debug_client = impl_from_IDebugClient(iface);
700 TRACE("%p, %p.\n", iface, callbacks);
702 if (debug_client->event_callbacks)
704 *callbacks = debug_client->event_callbacks;
705 (*callbacks)->lpVtbl->AddRef(*callbacks);
708 return S_OK;
711 static HRESULT STDMETHODCALLTYPE debugclient_SetEventCallbacks(IDebugClient7 *iface, IDebugEventCallbacks *callbacks)
713 struct debug_client *debug_client = impl_from_IDebugClient(iface);
715 TRACE("%p, %p.\n", iface, callbacks);
717 if (debug_client->event_callbacks)
718 debug_client->event_callbacks->lpVtbl->Release(debug_client->event_callbacks);
719 if ((debug_client->event_callbacks = callbacks))
720 debug_client->event_callbacks->lpVtbl->AddRef(debug_client->event_callbacks);
722 return S_OK;
725 static HRESULT STDMETHODCALLTYPE debugclient_FlushCallbacks(IDebugClient7 *iface)
727 FIXME("%p stub.\n", iface);
729 return E_NOTIMPL;
732 static HRESULT STDMETHODCALLTYPE debugclient_WriteDumpFile2(IDebugClient7 *iface, const char *dumpfile, ULONG qualifier,
733 ULONG flags, const char *comment)
735 FIXME("%p, %s, %d, 0x%08x, %s.\n", iface, debugstr_a(dumpfile), qualifier, flags, debugstr_a(comment));
736 return E_NOTIMPL;
739 static HRESULT STDMETHODCALLTYPE debugclient_AddDumpInformationFile(IDebugClient7 *iface, const char *infofile, ULONG type)
741 FIXME("%p, %s, %d.\n", iface, debugstr_a(infofile), type);
742 return E_NOTIMPL;
745 static HRESULT STDMETHODCALLTYPE debugclient_EndProcessServer(IDebugClient7 *iface, ULONG64 server)
747 FIXME("%p, %s.\n", iface, wine_dbgstr_longlong(server));
748 return E_NOTIMPL;
751 static HRESULT STDMETHODCALLTYPE debugclient_WaitForProcessServerEnd(IDebugClient7 *iface, ULONG timeout)
753 FIXME("%p, %d.\n", iface, timeout);
754 return E_NOTIMPL;
757 static HRESULT STDMETHODCALLTYPE debugclient_IsKernelDebuggerEnabled(IDebugClient7 *iface)
759 FIXME("%p.\n", iface);
760 return E_NOTIMPL;
763 static HRESULT STDMETHODCALLTYPE debugclient_TerminateCurrentProcess(IDebugClient7 *iface)
765 FIXME("%p.\n", iface);
766 return E_NOTIMPL;
769 static HRESULT STDMETHODCALLTYPE debugclient_DetachCurrentProcess(IDebugClient7 *iface)
771 FIXME("%p.\n", iface);
772 return E_NOTIMPL;
775 static HRESULT STDMETHODCALLTYPE debugclient_AbandonCurrentProcess(IDebugClient7 *iface)
777 FIXME("%p.\n", iface);
778 return E_NOTIMPL;
781 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessSystemIdByExecutableNameWide(IDebugClient7 *iface, ULONG64 server,
782 const WCHAR *exename, ULONG flags, ULONG *id)
784 FIXME("%p, %s, %s, 0x%08x, %p.\n", iface, wine_dbgstr_longlong(server), debugstr_w(exename), flags, id);
785 return E_NOTIMPL;
788 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessDescriptionWide(IDebugClient7 *iface, ULONG64 server, ULONG id,
789 ULONG flags, WCHAR *exename, ULONG size, ULONG *actualsize, WCHAR *description, ULONG desc_size, ULONG *actual_desc_size)
791 FIXME("%p, %s, %d, 0x%08x, %s, %d, %p, %s, %d, %p.\n", iface, wine_dbgstr_longlong(server), id, flags, debugstr_w(exename), size,
792 actualsize, debugstr_w(description), desc_size, actual_desc_size );
793 return E_NOTIMPL;
796 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessWide(IDebugClient7 *iface, ULONG64 server, WCHAR *commandline, ULONG flags)
798 FIXME("%p, %s, %s, 0x%08x.\n", iface, wine_dbgstr_longlong(server), debugstr_w(commandline), flags);
799 return E_NOTIMPL;
802 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessAndAttachWide(IDebugClient7 *iface, ULONG64 server, WCHAR *commandline,
803 ULONG flags, ULONG processid, ULONG attachflags)
805 FIXME("%p, %s, %s, 0x%08x, %d, 0x%08x.\n", iface, wine_dbgstr_longlong(server), debugstr_w(commandline), flags, processid, attachflags);
806 return E_NOTIMPL;
809 static HRESULT STDMETHODCALLTYPE debugclient_OpenDumpFileWide(IDebugClient7 *iface, const WCHAR *filename, ULONG64 handle)
811 FIXME("%p, %s, %s.\n", iface, debugstr_w(filename), wine_dbgstr_longlong(handle));
812 return E_NOTIMPL;
815 static HRESULT STDMETHODCALLTYPE debugclient_WriteDumpFileWide(IDebugClient7 *iface, const WCHAR *filename, ULONG64 handle,
816 ULONG qualifier, ULONG flags, const WCHAR *comment)
818 FIXME("%p, %s, %s, %d, 0x%08x, %s.\n", iface, debugstr_w(filename), wine_dbgstr_longlong(handle),
819 qualifier, flags, debugstr_w(comment));
820 return E_NOTIMPL;
823 static HRESULT STDMETHODCALLTYPE debugclient_AddDumpInformationFileWide(IDebugClient7 *iface, const WCHAR *filename,
824 ULONG64 handle, ULONG type)
826 FIXME("%p, %s, %s, %d.\n", iface, debugstr_w(filename), wine_dbgstr_longlong(handle), type);
827 return E_NOTIMPL;
830 static HRESULT STDMETHODCALLTYPE debugclient_GetNumberDumpFiles(IDebugClient7 *iface, ULONG *count)
832 FIXME("%p, %p.\n", iface, count);
833 return E_NOTIMPL;
836 static HRESULT STDMETHODCALLTYPE debugclient_GetDumpFile(IDebugClient7 *iface, ULONG index, char *buffer, ULONG buf_size,
837 ULONG *name_size, ULONG64 *handle, ULONG *type)
839 FIXME("%p, %d, %p, %d, %p, %p, %p.\n", iface, index, buffer, buf_size, name_size, handle, type);
840 return E_NOTIMPL;
843 static HRESULT STDMETHODCALLTYPE debugclient_GetDumpFileWide(IDebugClient7 *iface, ULONG index, WCHAR *buffer, ULONG buf_size,
844 ULONG *name_size, ULONG64 *handle, ULONG *type)
846 FIXME("%p, %d, %p, %d, %p, %p, %p.\n", iface, index, buffer, buf_size, name_size, handle, type);
847 return E_NOTIMPL;
850 static HRESULT STDMETHODCALLTYPE debugclient_AttachKernelWide(IDebugClient7 *iface, ULONG flags, const WCHAR *options)
852 FIXME("%p, 0x%08x, %s.\n", iface, flags, debugstr_w(options));
853 return E_NOTIMPL;
856 static HRESULT STDMETHODCALLTYPE debugclient_GetKernelConnectionOptionsWide(IDebugClient7 *iface, WCHAR *buffer,
857 ULONG buf_size, ULONG *size)
859 FIXME("%p, %p, %d, %p.\n", iface, buffer, buf_size, size);
860 return E_NOTIMPL;
863 static HRESULT STDMETHODCALLTYPE debugclient_SetKernelConnectionOptionsWide(IDebugClient7 *iface, const WCHAR *options)
865 FIXME("%p, %p.\n", iface, options);
866 return E_NOTIMPL;
869 static HRESULT STDMETHODCALLTYPE debugclient_StartProcessServerWide(IDebugClient7 *iface, ULONG flags, const WCHAR *options, void *reserved)
871 FIXME("%p, 0x%08x, %s, %p.\n", iface, flags, debugstr_w(options), reserved);
872 return E_NOTIMPL;
875 static HRESULT STDMETHODCALLTYPE debugclient_ConnectProcessServerWide(IDebugClient7 *iface, const WCHAR *options, ULONG64 *server)
877 FIXME("%p, %s, %p.\n", iface, debugstr_w(options), server);
878 return E_NOTIMPL;
881 static HRESULT STDMETHODCALLTYPE debugclient_StartServerWide(IDebugClient7 *iface, const WCHAR *options)
883 FIXME("%p, %s.\n", iface, debugstr_w(options));
884 return E_NOTIMPL;
887 static HRESULT STDMETHODCALLTYPE debugclient_OutputServersWide(IDebugClient7 *iface, ULONG control, const WCHAR *machine, ULONG flags)
889 FIXME("%p, %d, %s, 0x%08x.\n", iface, control, debugstr_w(machine), flags);
890 return E_NOTIMPL;
893 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputCallbacksWide(IDebugClient7 *iface, IDebugOutputCallbacksWide **callbacks)
895 FIXME("%p, %p.\n", iface, callbacks);
896 return E_NOTIMPL;
899 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputCallbacksWide(IDebugClient7 *iface, IDebugOutputCallbacksWide *callbacks)
901 FIXME("%p, %p.\n", iface, callbacks);
902 return E_NOTIMPL;
905 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputLinePrefixWide(IDebugClient7 *iface, WCHAR *buffer, ULONG buf_size, ULONG *size)
907 FIXME("%p, %p, %d, %p.\n", iface, buffer, buf_size, size);
908 return E_NOTIMPL;
911 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputLinePrefixWide(IDebugClient7 *iface, const WCHAR *prefix)
913 FIXME("%p, %s.\n", iface, debugstr_w(prefix));
914 return E_NOTIMPL;
917 static HRESULT STDMETHODCALLTYPE debugclient_GetIdentityWide(IDebugClient7 *iface, WCHAR *buffer, ULONG buf_size, ULONG *identity)
919 FIXME("%p, %p, %d, %p.\n", iface, buffer, buf_size, identity);
920 return E_NOTIMPL;
923 static HRESULT STDMETHODCALLTYPE debugclient_OutputIdentityWide(IDebugClient7 *iface, ULONG control, ULONG flags, const WCHAR *format)
925 FIXME("%p, %d, 0x%08x, %s.\n", iface, control, flags, debugstr_w(format));
926 return E_NOTIMPL;
929 static HRESULT STDMETHODCALLTYPE debugclient_GetEventCallbacksWide(IDebugClient7 *iface, IDebugEventCallbacksWide **callbacks)
931 FIXME("%p, %p .\n", iface, callbacks);
932 return E_NOTIMPL;
935 static HRESULT STDMETHODCALLTYPE debugclient_SetEventCallbacksWide(IDebugClient7 *iface, IDebugEventCallbacksWide *callbacks)
937 FIXME("%p .\n", iface);
938 return E_NOTIMPL;
941 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcess2(IDebugClient7 *iface, ULONG64 server, char *command, void *options,
942 ULONG buf_size, const char *initial, const char *environment)
944 FIXME("%p %s, %s, %p, %d, %s, %s.\n", iface, wine_dbgstr_longlong(server), debugstr_a(command), options,
945 buf_size, debugstr_a(initial), debugstr_a(environment));
946 return E_NOTIMPL;
949 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcess2Wide(IDebugClient7 *iface, ULONG64 server, WCHAR *command, void *options,
950 ULONG size, const WCHAR *initial, const WCHAR *environment)
952 FIXME("%p %s, %s, %p, %d, %s, %s.\n", iface, wine_dbgstr_longlong(server), debugstr_w(command), options,
953 size, debugstr_w(initial), debugstr_w(environment));
954 return E_NOTIMPL;
957 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessAndAttach2(IDebugClient7 *iface, ULONG64 server, char *command,
958 void *options, ULONG buf_size, const char *initial, const char *environment, ULONG processid, ULONG flags)
960 FIXME("%p %s, %s, %p, %d, %s, %s, %d, 0x%08x.\n", iface, wine_dbgstr_longlong(server), debugstr_a(command), options,
961 buf_size, debugstr_a(initial), debugstr_a(environment), processid, flags);
962 return E_NOTIMPL;
965 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessAndAttach2Wide(IDebugClient7 *iface, ULONG64 server, WCHAR *command,
966 void *buffer, ULONG buf_size, const WCHAR *initial, const WCHAR *environment, ULONG processid, ULONG flags)
968 FIXME("%p %s, %s, %p, %d, %s, %s, %d, 0x%08x.\n", iface, wine_dbgstr_longlong(server), debugstr_w(command), buffer,
969 buf_size, debugstr_w(initial), debugstr_w(environment), processid, flags);
970 return E_NOTIMPL;
973 static HRESULT STDMETHODCALLTYPE debugclient_PushOutputLinePrefix(IDebugClient7 *iface, const char *prefix, ULONG64 *handle)
975 FIXME("%p, %p.\n", iface, handle);
976 return E_NOTIMPL;
979 static HRESULT STDMETHODCALLTYPE debugclient_PushOutputLinePrefixWide(IDebugClient7 *iface, const WCHAR *prefix, ULONG64 *handle)
981 FIXME("%p, %p.\n", iface, handle);
982 return E_NOTIMPL;
985 static HRESULT STDMETHODCALLTYPE debugclient_PopOutputLinePrefix(IDebugClient7 *iface, ULONG64 handle)
987 FIXME("%p, %s.\n", iface, wine_dbgstr_longlong(handle));
988 return E_NOTIMPL;
991 static HRESULT STDMETHODCALLTYPE debugclient_GetNumberInputCallbacks(IDebugClient7 *iface, ULONG *count)
993 FIXME("%p, %p.\n", iface, count);
994 return E_NOTIMPL;
997 static HRESULT STDMETHODCALLTYPE debugclient_GetNumberOutputCallbacks(IDebugClient7 *iface, ULONG *count)
999 FIXME("%p, %p.\n", iface, count);
1000 return E_NOTIMPL;
1003 static HRESULT STDMETHODCALLTYPE debugclient_GetNumberEventCallbacks(IDebugClient7 *iface, ULONG flags, ULONG *count)
1005 FIXME("%p, 0x%08x, %p.\n", iface, flags, count);
1006 return E_NOTIMPL;
1009 static HRESULT STDMETHODCALLTYPE debugclient_GetQuitLockString(IDebugClient7 *iface, char *buffer, ULONG buf_size, ULONG *size)
1011 FIXME("%p, %s, %d, %p.\n", iface, debugstr_a(buffer), buf_size, size);
1012 return E_NOTIMPL;
1015 static HRESULT STDMETHODCALLTYPE debugclient_SetQuitLockString(IDebugClient7 *iface, char *string)
1017 FIXME("%p, %s.\n", iface, debugstr_a(string));
1018 return E_NOTIMPL;
1021 static HRESULT STDMETHODCALLTYPE debugclient_GetQuitLockStringWide(IDebugClient7 *iface, WCHAR *buffer, ULONG buf_size, ULONG *size)
1023 FIXME("%p, %s, %d, %p.\n", iface, debugstr_w(buffer), buf_size, size);
1024 return E_NOTIMPL;
1027 static HRESULT STDMETHODCALLTYPE debugclient_SetQuitLockStringWide(IDebugClient7 *iface, const WCHAR *string)
1029 FIXME("%p, %s.\n", iface, debugstr_w(string));
1030 return E_NOTIMPL;
1033 static HRESULT STDMETHODCALLTYPE debugclient_SetEventContextCallbacks(IDebugClient7 *iface, IDebugEventContextCallbacks *callbacks)
1035 FIXME("%p, %p.\n", iface, callbacks);
1036 return E_NOTIMPL;
1039 static HRESULT STDMETHODCALLTYPE debugclient_SetClientContext(IDebugClient7 *iface, void *context, ULONG size)
1041 FIXME("%p, %p, %d.\n", iface, context, size);
1042 return E_NOTIMPL;
1045 static const IDebugClient7Vtbl debugclientvtbl =
1047 debugclient_QueryInterface,
1048 debugclient_AddRef,
1049 debugclient_Release,
1050 debugclient_AttachKernel,
1051 debugclient_GetKernelConnectionOptions,
1052 debugclient_SetKernelConnectionOptions,
1053 debugclient_StartProcessServer,
1054 debugclient_ConnectProcessServer,
1055 debugclient_DisconnectProcessServer,
1056 debugclient_GetRunningProcessSystemIds,
1057 debugclient_GetRunningProcessSystemIdByExecutableName,
1058 debugclient_GetRunningProcessDescription,
1059 debugclient_AttachProcess,
1060 debugclient_CreateProcess,
1061 debugclient_CreateProcessAndAttach,
1062 debugclient_GetProcessOptions,
1063 debugclient_AddProcessOptions,
1064 debugclient_RemoveProcessOptions,
1065 debugclient_SetProcessOptions,
1066 debugclient_OpenDumpFile,
1067 debugclient_WriteDumpFile,
1068 debugclient_ConnectSession,
1069 debugclient_StartServer,
1070 debugclient_OutputServers,
1071 debugclient_TerminateProcesses,
1072 debugclient_DetachProcesses,
1073 debugclient_EndSession,
1074 debugclient_GetExitCode,
1075 debugclient_DispatchCallbacks,
1076 debugclient_ExitDispatch,
1077 debugclient_CreateClient,
1078 debugclient_GetInputCallbacks,
1079 debugclient_SetInputCallbacks,
1080 debugclient_GetOutputCallbacks,
1081 debugclient_SetOutputCallbacks,
1082 debugclient_GetOutputMask,
1083 debugclient_SetOutputMask,
1084 debugclient_GetOtherOutputMask,
1085 debugclient_SetOtherOutputMask,
1086 debugclient_GetOutputWidth,
1087 debugclient_SetOutputWidth,
1088 debugclient_GetOutputLinePrefix,
1089 debugclient_SetOutputLinePrefix,
1090 debugclient_GetIdentity,
1091 debugclient_OutputIdentity,
1092 debugclient_GetEventCallbacks,
1093 debugclient_SetEventCallbacks,
1094 debugclient_FlushCallbacks,
1095 /* IDebugClient2 */
1096 debugclient_WriteDumpFile2,
1097 debugclient_AddDumpInformationFile,
1098 debugclient_EndProcessServer,
1099 debugclient_WaitForProcessServerEnd,
1100 debugclient_IsKernelDebuggerEnabled,
1101 debugclient_TerminateCurrentProcess,
1102 debugclient_DetachCurrentProcess,
1103 debugclient_AbandonCurrentProcess,
1104 /* IDebugClient3 */
1105 debugclient_GetRunningProcessSystemIdByExecutableNameWide,
1106 debugclient_GetRunningProcessDescriptionWide,
1107 debugclient_CreateProcessWide,
1108 debugclient_CreateProcessAndAttachWide,
1109 /* IDebugClient4 */
1110 debugclient_OpenDumpFileWide,
1111 debugclient_WriteDumpFileWide,
1112 debugclient_AddDumpInformationFileWide,
1113 debugclient_GetNumberDumpFiles,
1114 debugclient_GetDumpFile,
1115 debugclient_GetDumpFileWide,
1116 /* IDebugClient5 */
1117 debugclient_AttachKernelWide,
1118 debugclient_GetKernelConnectionOptionsWide,
1119 debugclient_SetKernelConnectionOptionsWide,
1120 debugclient_StartProcessServerWide,
1121 debugclient_ConnectProcessServerWide,
1122 debugclient_StartServerWide,
1123 debugclient_OutputServersWide,
1124 debugclient_GetOutputCallbacksWide,
1125 debugclient_SetOutputCallbacksWide,
1126 debugclient_GetOutputLinePrefixWide,
1127 debugclient_SetOutputLinePrefixWide,
1128 debugclient_GetIdentityWide,
1129 debugclient_OutputIdentityWide,
1130 debugclient_GetEventCallbacksWide,
1131 debugclient_SetEventCallbacksWide,
1132 debugclient_CreateProcess2,
1133 debugclient_CreateProcess2Wide,
1134 debugclient_CreateProcessAndAttach2,
1135 debugclient_CreateProcessAndAttach2Wide,
1136 debugclient_PushOutputLinePrefix,
1137 debugclient_PushOutputLinePrefixWide,
1138 debugclient_PopOutputLinePrefix,
1139 debugclient_GetNumberInputCallbacks,
1140 debugclient_GetNumberOutputCallbacks,
1141 debugclient_GetNumberEventCallbacks,
1142 debugclient_GetQuitLockString,
1143 debugclient_SetQuitLockString,
1144 debugclient_GetQuitLockStringWide,
1145 debugclient_SetQuitLockStringWide,
1146 /* IDebugClient6 */
1147 debugclient_SetEventContextCallbacks,
1148 /* IDebugClient7 */
1149 debugclient_SetClientContext,
1152 static HRESULT STDMETHODCALLTYPE debugdataspaces_QueryInterface(IDebugDataSpaces *iface, REFIID riid, void **obj)
1154 struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
1155 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1156 return IUnknown_QueryInterface(unk, riid, obj);
1159 static ULONG STDMETHODCALLTYPE debugdataspaces_AddRef(IDebugDataSpaces *iface)
1161 struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
1162 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1163 return IUnknown_AddRef(unk);
1166 static ULONG STDMETHODCALLTYPE debugdataspaces_Release(IDebugDataSpaces *iface)
1168 struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
1169 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1170 return IUnknown_Release(unk);
1173 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadVirtual(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
1174 ULONG buffer_size, ULONG *read_len)
1176 struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
1177 static struct target_process *target;
1178 HRESULT hr = S_OK;
1179 SIZE_T length;
1181 TRACE("%p, %s, %p, %u, %p.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
1183 if (!(target = debug_client_get_target(debug_client)))
1184 return E_UNEXPECTED;
1186 if (ReadProcessMemory(target->handle, (const void *)(ULONG_PTR)offset, buffer, buffer_size, &length))
1188 if (read_len)
1189 *read_len = length;
1191 else
1193 hr = HRESULT_FROM_WIN32(GetLastError());
1194 WARN("Failed to read process memory %#x.\n", hr);
1197 return hr;
1200 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteVirtual(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
1201 ULONG buffer_size, ULONG *written)
1203 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
1205 return E_NOTIMPL;
1208 static HRESULT STDMETHODCALLTYPE debugdataspaces_SearchVirtual(IDebugDataSpaces *iface, ULONG64 offset, ULONG64 length,
1209 void *pattern, ULONG pattern_size, ULONG pattern_granularity, ULONG64 *ret_offset)
1211 FIXME("%p, %s, %s, %p, %u, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(length),
1212 pattern, pattern_size, pattern_granularity, ret_offset);
1214 return E_NOTIMPL;
1217 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadVirtualUncached(IDebugDataSpaces *iface, ULONG64 offset,
1218 void *buffer, ULONG buffer_size, ULONG *read_len)
1220 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
1222 return E_NOTIMPL;
1225 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteVirtualUncached(IDebugDataSpaces *iface, ULONG64 offset,
1226 void *buffer, ULONG buffer_size, ULONG *written)
1228 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
1230 return E_NOTIMPL;
1233 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadPointersVirtual(IDebugDataSpaces *iface, ULONG count,
1234 ULONG64 offset, ULONG64 *pointers)
1236 FIXME("%p, %u, %s, %p stub.\n", iface, count, wine_dbgstr_longlong(offset), pointers);
1238 return E_NOTIMPL;
1241 static HRESULT STDMETHODCALLTYPE debugdataspaces_WritePointersVirtual(IDebugDataSpaces *iface, ULONG count,
1242 ULONG64 offset, ULONG64 *pointers)
1244 FIXME("%p, %u, %s, %p stub.\n", iface, count, wine_dbgstr_longlong(offset), pointers);
1246 return E_NOTIMPL;
1249 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadPhysical(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
1250 ULONG buffer_size, ULONG *read_len)
1252 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
1254 return E_NOTIMPL;
1257 static HRESULT STDMETHODCALLTYPE debugdataspaces_WritePhysical(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
1258 ULONG buffer_size, ULONG *written)
1260 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
1262 return E_NOTIMPL;
1265 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadControl(IDebugDataSpaces *iface, ULONG processor, ULONG64 offset,
1266 void *buffer, ULONG buffer_size, ULONG *read_len)
1268 FIXME("%p, %u, %s, %p, %u, %p stub.\n", iface, processor, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
1270 return E_NOTIMPL;
1273 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteControl(IDebugDataSpaces *iface, ULONG processor, ULONG64 offset,
1274 void *buffer, ULONG buffer_size, ULONG *written)
1276 FIXME("%p, %u, %s, %p, %u, %p stub.\n", iface, processor, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
1278 return E_NOTIMPL;
1281 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadIo(IDebugDataSpaces *iface, ULONG type, ULONG bus_number,
1282 ULONG address_space, ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *read_len)
1284 FIXME("%p, %u, %u, %u, %s, %p, %u, %p stub.\n", iface, type, bus_number, address_space, wine_dbgstr_longlong(offset),
1285 buffer, buffer_size, read_len);
1287 return E_NOTIMPL;
1290 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteIo(IDebugDataSpaces *iface, ULONG type, ULONG bus_number,
1291 ULONG address_space, ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *written)
1293 FIXME("%p, %u, %u, %u, %s, %p, %u, %p stub.\n", iface, type, bus_number, address_space, wine_dbgstr_longlong(offset),
1294 buffer, buffer_size, written);
1296 return E_NOTIMPL;
1299 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadMsr(IDebugDataSpaces *iface, ULONG msr, ULONG64 *value)
1301 FIXME("%p, %u, %p stub.\n", iface, msr, value);
1303 return E_NOTIMPL;
1306 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteMsr(IDebugDataSpaces *iface, ULONG msr, ULONG64 value)
1308 FIXME("%p, %u, %s stub.\n", iface, msr, wine_dbgstr_longlong(value));
1310 return E_NOTIMPL;
1313 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadBusData(IDebugDataSpaces *iface, ULONG data_type,
1314 ULONG bus_number, ULONG slot_number, ULONG offset, void *buffer, ULONG buffer_size, ULONG *read_len)
1316 FIXME("%p, %u, %u, %u, %u, %p, %u, %p stub.\n", iface, data_type, bus_number, slot_number, offset, buffer,
1317 buffer_size, read_len);
1319 return E_NOTIMPL;
1322 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteBusData(IDebugDataSpaces *iface, ULONG data_type,
1323 ULONG bus_number, ULONG slot_number, ULONG offset, void *buffer, ULONG buffer_size, ULONG *written)
1325 FIXME("%p, %u, %u, %u, %u, %p, %u, %p stub.\n", iface, data_type, bus_number, slot_number, offset, buffer,
1326 buffer_size, written);
1328 return E_NOTIMPL;
1331 static HRESULT STDMETHODCALLTYPE debugdataspaces_CheckLowMemory(IDebugDataSpaces *iface)
1333 FIXME("%p stub.\n", iface);
1335 return E_NOTIMPL;
1338 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadDebuggerData(IDebugDataSpaces *iface, ULONG index, void *buffer,
1339 ULONG buffer_size, ULONG *data_size)
1341 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, data_size);
1343 return E_NOTIMPL;
1346 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadProcessorSystemData(IDebugDataSpaces *iface, ULONG processor,
1347 ULONG index, void *buffer, ULONG buffer_size, ULONG *data_size)
1349 FIXME("%p, %u, %u, %p, %u, %p stub.\n", iface, processor, index, buffer, buffer_size, data_size);
1351 return E_NOTIMPL;
1354 static const IDebugDataSpacesVtbl debugdataspacesvtbl =
1356 debugdataspaces_QueryInterface,
1357 debugdataspaces_AddRef,
1358 debugdataspaces_Release,
1359 debugdataspaces_ReadVirtual,
1360 debugdataspaces_WriteVirtual,
1361 debugdataspaces_SearchVirtual,
1362 debugdataspaces_ReadVirtualUncached,
1363 debugdataspaces_WriteVirtualUncached,
1364 debugdataspaces_ReadPointersVirtual,
1365 debugdataspaces_WritePointersVirtual,
1366 debugdataspaces_ReadPhysical,
1367 debugdataspaces_WritePhysical,
1368 debugdataspaces_ReadControl,
1369 debugdataspaces_WriteControl,
1370 debugdataspaces_ReadIo,
1371 debugdataspaces_WriteIo,
1372 debugdataspaces_ReadMsr,
1373 debugdataspaces_WriteMsr,
1374 debugdataspaces_ReadBusData,
1375 debugdataspaces_WriteBusData,
1376 debugdataspaces_CheckLowMemory,
1377 debugdataspaces_ReadDebuggerData,
1378 debugdataspaces_ReadProcessorSystemData,
1381 static HRESULT STDMETHODCALLTYPE debugsymbols_QueryInterface(IDebugSymbols3 *iface, REFIID riid, void **obj)
1383 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1384 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1385 return IUnknown_QueryInterface(unk, riid, obj);
1388 static ULONG STDMETHODCALLTYPE debugsymbols_AddRef(IDebugSymbols3 *iface)
1390 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1391 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1392 return IUnknown_AddRef(unk);
1395 static ULONG STDMETHODCALLTYPE debugsymbols_Release(IDebugSymbols3 *iface)
1397 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1398 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1399 return IUnknown_Release(unk);
1402 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolOptions(IDebugSymbols3 *iface, ULONG *options)
1404 FIXME("%p, %p stub.\n", iface, options);
1406 return E_NOTIMPL;
1409 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSymbolOptions(IDebugSymbols3 *iface, ULONG options)
1411 FIXME("%p, %#x stub.\n", iface, options);
1413 return E_NOTIMPL;
1416 static HRESULT STDMETHODCALLTYPE debugsymbols_RemoveSymbolOptions(IDebugSymbols3 *iface, ULONG options)
1418 FIXME("%p, %#x stub.\n", iface, options);
1420 return E_NOTIMPL;
1423 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSymbolOptions(IDebugSymbols3 *iface, ULONG options)
1425 FIXME("%p, %#x stub.\n", iface, options);
1427 return E_NOTIMPL;
1430 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNameByOffset(IDebugSymbols3 *iface, ULONG64 offset, char *buffer,
1431 ULONG buffer_size, ULONG *name_size, ULONG64 *displacement)
1433 FIXME("%p, %s, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size,
1434 name_size, displacement);
1436 return E_NOTIMPL;
1439 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetByName(IDebugSymbols3 *iface, const char *symbol,
1440 ULONG64 *offset)
1442 FIXME("%p, %s, %p stub.\n", iface, debugstr_a(symbol), offset);
1444 return E_NOTIMPL;
1447 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNearNameByOffset(IDebugSymbols3 *iface, ULONG64 offset, LONG delta,
1448 char *buffer, ULONG buffer_size, ULONG *name_size, ULONG64 *displacement)
1450 FIXME("%p, %s, %d, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), delta, buffer, buffer_size,
1451 name_size, displacement);
1453 return E_NOTIMPL;
1456 static HRESULT STDMETHODCALLTYPE debugsymbols_GetLineByOffset(IDebugSymbols3 *iface, ULONG64 offset, ULONG *line,
1457 char *buffer, ULONG buffer_size, ULONG *file_size, ULONG64 *displacement)
1459 FIXME("%p, %s, %p, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), line, buffer, buffer_size,
1460 file_size, displacement);
1462 return E_NOTIMPL;
1465 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetByLine(IDebugSymbols3 *iface, ULONG line, const char *file,
1466 ULONG64 *offset)
1468 FIXME("%p, %u, %s, %p stub.\n", iface, line, debugstr_a(file), offset);
1470 return E_NOTIMPL;
1473 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNumberModules(IDebugSymbols3 *iface, ULONG *loaded, ULONG *unloaded)
1475 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1476 static struct target_process *target;
1477 HRESULT hr;
1479 TRACE("%p, %p, %p.\n", iface, loaded, unloaded);
1481 if (!(target = debug_client_get_target(debug_client)))
1482 return E_UNEXPECTED;
1484 if (FAILED(hr = debug_target_init_modules_info(target)))
1485 return hr;
1487 *loaded = target->modules.loaded;
1488 *unloaded = target->modules.unloaded;
1490 return S_OK;
1493 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByIndex(IDebugSymbols3 *iface, ULONG index, ULONG64 *base)
1495 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1496 const struct module_info *info;
1497 struct target_process *target;
1499 TRACE("%p, %u, %p.\n", iface, index, base);
1501 if (!(target = debug_client_get_target(debug_client)))
1502 return E_UNEXPECTED;
1504 if (!(info = debug_target_get_module_info(target, index)))
1505 return E_INVALIDARG;
1507 *base = info->params.Base;
1509 return S_OK;
1512 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByModuleName(IDebugSymbols3 *iface, const char *name,
1513 ULONG start_index, ULONG *index, ULONG64 *base)
1515 FIXME("%p, %s, %u, %p, %p stub.\n", iface, debugstr_a(name), start_index, index, base);
1517 return E_NOTIMPL;
1520 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByOffset(IDebugSymbols3 *iface, ULONG64 offset,
1521 ULONG start_index, ULONG *index, ULONG64 *base)
1523 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1524 static struct target_process *target;
1525 const struct module_info *info;
1527 TRACE("%p, %s, %u, %p, %p.\n", iface, wine_dbgstr_longlong(offset), start_index, index, base);
1529 if (!(target = debug_client_get_target(debug_client)))
1530 return E_UNEXPECTED;
1532 while ((info = debug_target_get_module_info(target, start_index)))
1534 if (offset >= info->params.Base && offset < info->params.Base + info->params.Size)
1536 if (index)
1537 *index = start_index;
1538 if (base)
1539 *base = info->params.Base;
1540 return S_OK;
1543 start_index++;
1546 return E_INVALIDARG;
1549 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleNames(IDebugSymbols3 *iface, ULONG index, ULONG64 base,
1550 char *image_name, ULONG image_name_buffer_size, ULONG *image_name_size, char *module_name,
1551 ULONG module_name_buffer_size, ULONG *module_name_size, char *loaded_image_name,
1552 ULONG loaded_image_name_buffer_size, ULONG *loaded_image_size)
1554 FIXME("%p, %u, %s, %p, %u, %p, %p, %u, %p, %p, %u, %p stub.\n", iface, index, wine_dbgstr_longlong(base),
1555 image_name, image_name_buffer_size, image_name_size, module_name, module_name_buffer_size,
1556 module_name_size, loaded_image_name, loaded_image_name_buffer_size, loaded_image_size);
1558 return E_NOTIMPL;
1561 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleParameters(IDebugSymbols3 *iface, ULONG count, ULONG64 *bases,
1562 ULONG start, DEBUG_MODULE_PARAMETERS *params)
1564 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1565 const struct module_info *info;
1566 struct target_process *target;
1567 unsigned int i;
1569 TRACE("%p, %u, %p, %u, %p.\n", iface, count, bases, start, params);
1571 if (!(target = debug_client_get_target(debug_client)))
1572 return E_UNEXPECTED;
1574 if (bases)
1576 for (i = 0; i < count; ++i)
1578 if ((info = debug_target_get_module_info_by_base(target, bases[i])))
1580 params[i] = info->params;
1582 else
1584 memset(&params[i], 0, sizeof(*params));
1585 params[i].Base = DEBUG_INVALID_OFFSET;
1589 else
1591 for (i = start; i < start + count; ++i)
1593 if (!(info = debug_target_get_module_info(target, i)))
1594 return E_INVALIDARG;
1595 params[i] = info->params;
1599 return S_OK;
1602 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolModule(IDebugSymbols3 *iface, const char *symbol, ULONG64 *base)
1604 FIXME("%p, %s, %p stub.\n", iface, debugstr_a(symbol), base);
1606 return E_NOTIMPL;
1609 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeName(IDebugSymbols3 *iface, ULONG64 base, ULONG type_id,
1610 char *buffer, ULONG buffer_size, ULONG *name_size)
1612 FIXME("%p, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(base), type_id, buffer,
1613 buffer_size, name_size);
1615 return E_NOTIMPL;
1618 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeId(IDebugSymbols3 *iface, ULONG64 base, const char *name,
1619 ULONG *type_id)
1621 FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(base), debugstr_a(name), type_id);
1623 return E_NOTIMPL;
1626 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeSize(IDebugSymbols3 *iface, ULONG64 base, ULONG type_id,
1627 ULONG *size)
1629 FIXME("%p, %s, %u, %p stub.\n", iface, wine_dbgstr_longlong(base), type_id, size);
1631 return E_NOTIMPL;
1634 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldOffset(IDebugSymbols3 *iface, ULONG64 base, ULONG type_id,
1635 const char *field, ULONG *offset)
1637 FIXME("%p, %s, %u, %s, %p stub.\n", iface, wine_dbgstr_longlong(base), type_id, debugstr_a(field), offset);
1639 return E_NOTIMPL;
1642 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolTypeId(IDebugSymbols3 *iface, const char *symbol, ULONG *type_id,
1643 ULONG64 *base)
1645 FIXME("%p, %s, %p, %p stub.\n", iface, debugstr_a(symbol), type_id, base);
1647 return E_NOTIMPL;
1650 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetTypeId(IDebugSymbols3 *iface, ULONG64 offset, ULONG *type_id,
1651 ULONG64 *base)
1653 FIXME("%p, %s, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), type_id, base);
1655 return E_NOTIMPL;
1658 static HRESULT STDMETHODCALLTYPE debugsymbols_ReadTypedDataVirtual(IDebugSymbols3 *iface, ULONG64 offset, ULONG64 base,
1659 ULONG type_id, void *buffer, ULONG buffer_size, ULONG *read_len)
1661 FIXME("%p, %s, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(base),
1662 type_id, buffer, buffer_size, read_len);
1664 return E_NOTIMPL;
1667 static HRESULT STDMETHODCALLTYPE debugsymbols_WriteTypedDataVirtual(IDebugSymbols3 *iface, ULONG64 offset, ULONG64 base,
1668 ULONG type_id, void *buffer, ULONG buffer_size, ULONG *written)
1670 FIXME("%p, %s, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(base),
1671 type_id, buffer, buffer_size, written);
1673 return E_NOTIMPL;
1676 static HRESULT STDMETHODCALLTYPE debugsymbols_OutputTypedDataVirtual(IDebugSymbols3 *iface, ULONG output_control,
1677 ULONG64 offset, ULONG64 base, ULONG type_id, ULONG flags)
1679 FIXME("%p, %#x, %s, %s, %u, %#x stub.\n", iface, output_control, wine_dbgstr_longlong(offset),
1680 wine_dbgstr_longlong(base), type_id, flags);
1682 return E_NOTIMPL;
1685 static HRESULT STDMETHODCALLTYPE debugsymbols_ReadTypedDataPhysical(IDebugSymbols3 *iface, ULONG64 offset, ULONG64 base,
1686 ULONG type_id, void *buffer, ULONG buffer_size, ULONG *read_len)
1688 FIXME("%p, %s, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(base),
1689 type_id, buffer, buffer_size, read_len);
1691 return E_NOTIMPL;
1694 static HRESULT STDMETHODCALLTYPE debugsymbols_WriteTypedDataPhysical(IDebugSymbols3 *iface, ULONG64 offset,
1695 ULONG64 base, ULONG type_id, void *buffer, ULONG buffer_size, ULONG *written)
1697 FIXME("%p, %s, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(base),
1698 type_id, buffer, buffer_size, written);
1700 return E_NOTIMPL;
1703 static HRESULT STDMETHODCALLTYPE debugsymbols_OutputTypedDataPhysical(IDebugSymbols3 *iface, ULONG output_control,
1704 ULONG64 offset, ULONG64 base, ULONG type_id, ULONG flags)
1706 FIXME("%p, %#x, %s, %s, %u, %#x stub.\n", iface, output_control, wine_dbgstr_longlong(offset),
1707 wine_dbgstr_longlong(base), type_id, flags);
1709 return E_NOTIMPL;
1712 static HRESULT STDMETHODCALLTYPE debugsymbols_GetScope(IDebugSymbols3 *iface, ULONG64 *instr_offset,
1713 DEBUG_STACK_FRAME *frame, void *scope_context, ULONG scope_context_size)
1715 FIXME("%p, %p, %p, %p, %u stub.\n", iface, instr_offset, frame, scope_context, scope_context_size);
1717 return E_NOTIMPL;
1720 static HRESULT STDMETHODCALLTYPE debugsymbols_SetScope(IDebugSymbols3 *iface, ULONG64 instr_offset,
1721 DEBUG_STACK_FRAME *frame, void *scope_context, ULONG scope_context_size)
1723 FIXME("%p, %s, %p, %p, %u stub.\n", iface, wine_dbgstr_longlong(instr_offset), frame, scope_context,
1724 scope_context_size);
1726 return E_NOTIMPL;
1729 static HRESULT STDMETHODCALLTYPE debugsymbols_ResetScope(IDebugSymbols3 *iface)
1731 FIXME("%p stub.\n", iface);
1733 return E_NOTIMPL;
1736 static HRESULT STDMETHODCALLTYPE debugsymbols_GetScopeSymbolGroup(IDebugSymbols3 *iface, ULONG flags,
1737 IDebugSymbolGroup *update, IDebugSymbolGroup **symbols)
1739 FIXME("%p, %#x, %p, %p stub.\n", iface, flags, update, symbols);
1741 return E_NOTIMPL;
1744 static HRESULT STDMETHODCALLTYPE debugsymbols_CreateSymbolGroup(IDebugSymbols3 *iface, IDebugSymbolGroup **group)
1746 FIXME("%p, %p stub.\n", iface, group);
1748 return E_NOTIMPL;
1751 static HRESULT STDMETHODCALLTYPE debugsymbols_StartSymbolMatch(IDebugSymbols3 *iface, const char *pattern,
1752 ULONG64 *handle)
1754 FIXME("%p, %s, %p stub.\n", iface, pattern, handle);
1756 return E_NOTIMPL;
1759 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNextSymbolMatch(IDebugSymbols3 *iface, ULONG64 handle, char *buffer,
1760 ULONG buffer_size, ULONG *match_size, ULONG64 *offset)
1762 FIXME("%p, %s, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(handle), buffer, buffer_size, match_size, offset);
1764 return E_NOTIMPL;
1767 static HRESULT STDMETHODCALLTYPE debugsymbols_EndSymbolMatch(IDebugSymbols3 *iface, ULONG64 handle)
1769 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(handle));
1771 return E_NOTIMPL;
1774 static HRESULT STDMETHODCALLTYPE debugsymbols_Reload(IDebugSymbols3 *iface, const char *path)
1776 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1778 return E_NOTIMPL;
1781 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolPath(IDebugSymbols3 *iface, char *buffer, ULONG buffer_size,
1782 ULONG *path_size)
1784 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
1786 return E_NOTIMPL;
1789 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSymbolPath(IDebugSymbols3 *iface, const char *path)
1791 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1793 return E_NOTIMPL;
1796 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendSymbolPath(IDebugSymbols3 *iface, const char *path)
1798 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1800 return E_NOTIMPL;
1803 static HRESULT STDMETHODCALLTYPE debugsymbols_GetImagePath(IDebugSymbols3 *iface, char *buffer, ULONG buffer_size,
1804 ULONG *path_size)
1806 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
1808 return E_NOTIMPL;
1811 static HRESULT STDMETHODCALLTYPE debugsymbols_SetImagePath(IDebugSymbols3 *iface, const char *path)
1813 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1815 return E_NOTIMPL;
1818 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendImagePath(IDebugSymbols3 *iface, const char *path)
1820 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1822 return E_NOTIMPL;
1825 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourcePath(IDebugSymbols3 *iface, char *buffer, ULONG buffer_size,
1826 ULONG *path_size)
1828 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
1830 return E_NOTIMPL;
1833 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourcePathElement(IDebugSymbols3 *iface, ULONG index, char *buffer,
1834 ULONG buffer_size, ULONG *element_size)
1836 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, element_size);
1838 return E_NOTIMPL;
1841 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSourcePath(IDebugSymbols3 *iface, const char *path)
1843 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1845 return E_NOTIMPL;
1848 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendSourcePath(IDebugSymbols3 *iface, const char *path)
1850 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1852 return E_NOTIMPL;
1855 static HRESULT STDMETHODCALLTYPE debugsymbols_FindSourceFile(IDebugSymbols3 *iface, ULONG start, const char *file,
1856 ULONG flags, ULONG *found_element, char *buffer, ULONG buffer_size, ULONG *found_size)
1858 FIXME("%p, %u, %s, %#x, %p, %p, %u, %p stub.\n", iface, start, debugstr_a(file), flags, found_element, buffer,
1859 buffer_size, found_size);
1861 return E_NOTIMPL;
1864 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceFileLineOffsets(IDebugSymbols3 *iface, const char *file,
1865 ULONG64 *buffer, ULONG buffer_lines, ULONG *file_lines)
1867 FIXME("%p, %s, %p, %u, %p stub.\n", iface, debugstr_a(file), buffer, buffer_lines, file_lines);
1869 return E_NOTIMPL;
1872 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleVersionInformation(IDebugSymbols3 *iface, ULONG index,
1873 ULONG64 base, const char *item, void *buffer, ULONG buffer_size, ULONG *info_size)
1875 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1876 const struct module_info *info;
1877 struct target_process *target;
1878 void *version_info, *ptr;
1879 HRESULT hr = E_FAIL;
1880 DWORD handle, size;
1882 TRACE("%p, %u, %s, %s, %p, %u, %p.\n", iface, index, wine_dbgstr_longlong(base), debugstr_a(item), buffer,
1883 buffer_size, info_size);
1885 if (!(target = debug_client_get_target(debug_client)))
1886 return E_UNEXPECTED;
1888 if (index == DEBUG_ANY_ID)
1889 info = debug_target_get_module_info_by_base(target, base);
1890 else
1891 info = debug_target_get_module_info(target, index);
1893 if (!info)
1895 WARN("Was unable to locate module.\n");
1896 return E_INVALIDARG;
1899 if (!(size = GetFileVersionInfoSizeA(info->image_name, &handle)))
1900 return E_FAIL;
1902 if (!(version_info = heap_alloc(size)))
1903 return E_OUTOFMEMORY;
1905 if (GetFileVersionInfoA(info->image_name, handle, size, version_info))
1907 if (VerQueryValueA(version_info, item, &ptr, &size))
1909 if (info_size)
1910 *info_size = size;
1912 if (buffer && buffer_size)
1914 unsigned int dst_len = min(size, buffer_size);
1915 if (dst_len)
1916 memcpy(buffer, ptr, dst_len);
1919 hr = buffer && buffer_size < size ? S_FALSE : S_OK;
1923 heap_free(version_info);
1925 return hr;
1928 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleNameString(IDebugSymbols3 *iface, ULONG which, ULONG index,
1929 ULONG64 base, char *buffer, ULONG buffer_size, ULONG *name_size)
1931 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1932 const struct module_info *info;
1933 struct target_process *target;
1934 HRESULT hr;
1936 TRACE("%p, %u, %u, %s, %p, %u, %p.\n", iface, which, index, wine_dbgstr_longlong(base), buffer, buffer_size,
1937 name_size);
1939 if (!(target = debug_client_get_target(debug_client)))
1940 return E_UNEXPECTED;
1942 if (index == DEBUG_ANY_ID)
1943 info = debug_target_get_module_info_by_base(target, base);
1944 else
1945 info = debug_target_get_module_info(target, index);
1947 if (!info)
1949 WARN("Was unable to locate module.\n");
1950 return E_INVALIDARG;
1953 switch (which)
1955 case DEBUG_MODNAME_IMAGE:
1956 hr = debug_target_return_string(info->image_name, buffer, buffer_size, name_size);
1957 break;
1958 case DEBUG_MODNAME_MODULE:
1959 case DEBUG_MODNAME_LOADED_IMAGE:
1960 case DEBUG_MODNAME_SYMBOL_FILE:
1961 case DEBUG_MODNAME_MAPPED_IMAGE:
1962 FIXME("Unsupported name info %d.\n", which);
1963 return E_NOTIMPL;
1964 default:
1965 WARN("Unknown name info %d.\n", which);
1966 return E_INVALIDARG;
1969 return hr;
1972 static HRESULT STDMETHODCALLTYPE debugsymbols_GetConstantName(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
1973 ULONG64 value, char *buffer, ULONG buffer_size, ULONG *name_size)
1975 FIXME("%p, %s, %u, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id,
1976 wine_dbgstr_longlong(value), buffer, buffer_size, name_size);
1978 return E_NOTIMPL;
1981 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldName(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
1982 ULONG field_index, char *buffer, ULONG buffer_size, ULONG *name_size)
1984 FIXME("%p, %s, %u, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id, field_index, buffer,
1985 buffer_size, name_size);
1987 return E_NOTIMPL;
1990 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeOptions(IDebugSymbols3 *iface, ULONG *options)
1992 FIXME("%p, %p stub.\n", iface, options);
1994 return E_NOTIMPL;
1997 static HRESULT STDMETHODCALLTYPE debugsymbols_AddTypeOptions(IDebugSymbols3 *iface, ULONG options)
1999 FIXME("%p, %#x stub.\n", iface, options);
2001 return E_NOTIMPL;
2004 static HRESULT STDMETHODCALLTYPE debugsymbols_RemoveTypeOptions(IDebugSymbols3 *iface, ULONG options)
2006 FIXME("%p, %#x stub.\n", iface, options);
2008 return E_NOTIMPL;
2011 static HRESULT STDMETHODCALLTYPE debugsymbols_SetTypeOptions(IDebugSymbols3 *iface, ULONG options)
2013 FIXME("%p, %#x stub.\n", iface, options);
2015 return E_NOTIMPL;
2018 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNameByOffsetWide(IDebugSymbols3 *iface, ULONG64 offset, WCHAR *buffer,
2019 ULONG buffer_size, ULONG *name_size, ULONG64 *displacement)
2021 FIXME("%p, %s, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, name_size,
2022 displacement);
2024 return E_NOTIMPL;
2027 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetByNameWide(IDebugSymbols3 *iface, const WCHAR *symbol,
2028 ULONG64 *offset)
2030 FIXME("%p, %s, %p stub.\n", iface, debugstr_w(symbol), offset);
2032 return E_NOTIMPL;
2035 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNearNameByOffsetWide(IDebugSymbols3 *iface, ULONG64 offset,
2036 LONG delta, WCHAR *buffer, ULONG buffer_size, ULONG *name_size, ULONG64 *displacement)
2038 FIXME("%p, %s, %d, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), delta, buffer, buffer_size,
2039 name_size, displacement);
2041 return E_NOTIMPL;
2044 static HRESULT STDMETHODCALLTYPE debugsymbols_GetLineByOffsetWide(IDebugSymbols3 *iface, ULONG64 offset, ULONG *line,
2045 WCHAR *buffer, ULONG buffer_size, ULONG *file_size, ULONG64 *displacement)
2047 FIXME("%p, %s, %p, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), line, buffer, buffer_size,
2048 file_size, displacement);
2050 return E_NOTIMPL;
2053 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetByLineWide(IDebugSymbols3 *iface, ULONG line, const WCHAR *file,
2054 ULONG64 *offset)
2056 FIXME("%p, %u, %s, %p stub.\n", iface, line, debugstr_w(file), offset);
2058 return E_NOTIMPL;
2061 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByModuleNameWide(IDebugSymbols3 *iface, const WCHAR *name,
2062 ULONG start_index, ULONG *index, ULONG64 *base)
2064 FIXME("%p, %s, %u, %p, %p stub.\n", iface, debugstr_w(name), start_index, index, base);
2066 return E_NOTIMPL;
2069 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolModuleWide(IDebugSymbols3 *iface, const WCHAR *symbol,
2070 ULONG64 *base)
2072 FIXME("%p, %s, %p stub.\n", iface, debugstr_w(symbol), base);
2074 return E_NOTIMPL;
2077 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeNameWide(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
2078 WCHAR *buffer, ULONG buffer_size, ULONG *name_size)
2080 FIXME("%p, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id, buffer, buffer_size,
2081 name_size);
2083 return E_NOTIMPL;
2086 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeIdWide(IDebugSymbols3 *iface, ULONG64 module, const WCHAR *name,
2087 ULONG *type_id)
2089 FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(module), debugstr_w(name), type_id);
2091 return E_NOTIMPL;
2094 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldOffsetWide(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
2095 const WCHAR *field, ULONG *offset)
2097 FIXME("%p, %s, %u, %s, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id, debugstr_w(field), offset);
2099 return E_NOTIMPL;
2102 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolTypeIdWide(IDebugSymbols3 *iface, const WCHAR *symbol,
2103 ULONG *type_id, ULONG64 *module)
2105 FIXME("%p, %s, %p, %p stub.\n", iface, debugstr_w(symbol), type_id, module);
2107 return E_NOTIMPL;
2110 static HRESULT STDMETHODCALLTYPE debugsymbols_GetScopeSymbolGroup2(IDebugSymbols3 *iface, ULONG flags,
2111 PDEBUG_SYMBOL_GROUP2 update, PDEBUG_SYMBOL_GROUP2 *symbols)
2113 FIXME("%p, %#x, %p, %p stub.\n", iface, flags, update, symbols);
2115 return E_NOTIMPL;
2118 static HRESULT STDMETHODCALLTYPE debugsymbols_CreateSymbolGroup2(IDebugSymbols3 *iface, PDEBUG_SYMBOL_GROUP2 *group)
2120 FIXME("%p, %p stub.\n", iface, group);
2122 return E_NOTIMPL;
2125 static HRESULT STDMETHODCALLTYPE debugsymbols_StartSymbolMatchWide(IDebugSymbols3 *iface, const WCHAR *pattern,
2126 ULONG64 *handle)
2128 FIXME("%p, %s, %p stub.\n", iface, debugstr_w(pattern), handle);
2130 return E_NOTIMPL;
2133 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNextSymbolMatchWide(IDebugSymbols3 *iface, ULONG64 handle,
2134 WCHAR *buffer, ULONG buffer_size, ULONG *match_size, ULONG64 *offset)
2136 FIXME("%p, %s, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(handle), buffer, buffer_size, match_size, offset);
2138 return E_NOTIMPL;
2141 static HRESULT STDMETHODCALLTYPE debugsymbols_ReloadWide(IDebugSymbols3 *iface, const WCHAR *module)
2143 FIXME("%p, %s stub.\n", iface, debugstr_w(module));
2145 return E_NOTIMPL;
2148 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolPathWide(IDebugSymbols3 *iface, WCHAR *buffer, ULONG buffer_size,
2149 ULONG *path_size)
2151 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
2153 return E_NOTIMPL;
2156 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSymbolPathWide(IDebugSymbols3 *iface, const WCHAR *path)
2158 FIXME("%p, %s stub.\n", iface, debugstr_w(path));
2160 return E_NOTIMPL;
2163 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendSymbolPathWide(IDebugSymbols3 *iface, const WCHAR *addition)
2165 FIXME("%p, %s stub.\n", iface, debugstr_w(addition));
2167 return E_NOTIMPL;
2170 static HRESULT STDMETHODCALLTYPE debugsymbols_GetImagePathWide(IDebugSymbols3 *iface, WCHAR *buffer, ULONG buffer_size,
2171 ULONG *path_size)
2173 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
2175 return E_NOTIMPL;
2178 static HRESULT STDMETHODCALLTYPE debugsymbols_SetImagePathWide(IDebugSymbols3 *iface, const WCHAR *path)
2180 FIXME("%p, %s stub.\n", iface, debugstr_w(path));
2182 return E_NOTIMPL;
2185 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendImagePathWide(IDebugSymbols3 *iface, const WCHAR *addition)
2187 FIXME("%p, %s stub.\n", iface, debugstr_w(addition));
2189 return E_NOTIMPL;
2192 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourcePathWide(IDebugSymbols3 *iface, WCHAR *buffer, ULONG buffer_size,
2193 ULONG *path_size)
2195 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
2197 return E_NOTIMPL;
2200 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourcePathElementWide(IDebugSymbols3 *iface, ULONG index,
2201 WCHAR *buffer, ULONG buffer_size, ULONG *element_size)
2203 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, element_size);
2205 return E_NOTIMPL;
2208 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSourcePathWide(IDebugSymbols3 *iface, const WCHAR *path)
2210 FIXME("%p, %s stub.\n", iface, debugstr_w(path));
2212 return E_NOTIMPL;
2215 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendSourcePathWide(IDebugSymbols3 *iface, const WCHAR *addition)
2217 FIXME("%p, %s stub.\n", iface, debugstr_w(addition));
2219 return E_NOTIMPL;
2222 static HRESULT STDMETHODCALLTYPE debugsymbols_FindSourceFileWide(IDebugSymbols3 *iface, ULONG start_element,
2223 const WCHAR *file, ULONG flags, ULONG *found_element, WCHAR *buffer, ULONG buffer_size, ULONG *found_size)
2225 FIXME("%p, %u, %s, %#x, %p, %p, %u, %p stub.\n", iface, start_element, debugstr_w(file), flags, found_element,
2226 buffer, buffer_size, found_size);
2228 return E_NOTIMPL;
2231 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceFileLineOffsetsWide(IDebugSymbols3 *iface, const WCHAR *file,
2232 ULONG64 *buffer, ULONG buffer_lines, ULONG *file_lines)
2234 FIXME("%p, %s, %p, %u, %p stub.\n", iface, debugstr_w(file), buffer, buffer_lines, file_lines);
2236 return E_NOTIMPL;
2239 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleVersionInformationWide(IDebugSymbols3 *iface, ULONG index,
2240 ULONG64 base, const WCHAR *item, void *buffer, ULONG buffer_size, ULONG *version_info_size)
2242 FIXME("%p, %u, %s, %s, %p, %u, %p stub.\n", iface, index, wine_dbgstr_longlong(base), debugstr_w(item), buffer,
2243 buffer_size, version_info_size);
2245 return E_NOTIMPL;
2248 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleNameStringWide(IDebugSymbols3 *iface, ULONG which, ULONG index,
2249 ULONG64 base, WCHAR *buffer, ULONG buffer_size, ULONG *name_size)
2251 FIXME("%p, %u, %u, %s, %p, %u, %p stub.\n", iface, which, index, wine_dbgstr_longlong(base), buffer, buffer_size,
2252 name_size);
2254 return E_NOTIMPL;
2257 static HRESULT STDMETHODCALLTYPE debugsymbols_GetConstantNameWide(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
2258 ULONG64 value, WCHAR *buffer, ULONG buffer_size, ULONG *name_size)
2260 FIXME("%p, %s, %u, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id,
2261 wine_dbgstr_longlong(value), buffer, buffer_size, name_size);
2263 return E_NOTIMPL;
2266 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldNameWide(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
2267 ULONG field_index, WCHAR *buffer, ULONG buffer_size, ULONG *name_size)
2269 FIXME("%p, %s, %u, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id, field_index, buffer,
2270 buffer_size, name_size);
2272 return E_NOTIMPL;
2275 static HRESULT STDMETHODCALLTYPE debugsymbols_IsManagedModule(IDebugSymbols3 *iface, ULONG index, ULONG64 base)
2277 FIXME("%p, %u, %s stub.\n", iface, index, wine_dbgstr_longlong(base));
2279 return E_NOTIMPL;
2282 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByModuleName2(IDebugSymbols3 *iface, const char *name,
2283 ULONG start_index, ULONG flags, ULONG *index, ULONG64 *base)
2285 FIXME("%p, %s, %u, %#x, %p, %p stub.\n", iface, debugstr_a(name), start_index, flags, index, base);
2287 return E_NOTIMPL;
2290 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByModuleName2Wide(IDebugSymbols3 *iface, const WCHAR *name,
2291 ULONG start_index, ULONG flags, ULONG *index, ULONG64 *base)
2293 FIXME("%p, %s, %u, %#x, %p, %p stub.\n", iface, debugstr_w(name), start_index, flags, index, base);
2295 return E_NOTIMPL;
2298 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByOffset2(IDebugSymbols3 *iface, ULONG64 offset,
2299 ULONG start_index, ULONG flags, ULONG *index, ULONG64 *base)
2301 FIXME("%p, %s, %u, %#x, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), start_index, flags, index, base);
2303 return E_NOTIMPL;
2306 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSyntheticModule(IDebugSymbols3 *iface, ULONG64 base, ULONG size,
2307 const char *image_path, const char *module_name, ULONG flags)
2309 FIXME("%p, %s, %u, %s, %s, %#x stub.\n", iface, wine_dbgstr_longlong(base), size, debugstr_a(image_path),
2310 debugstr_a(module_name), flags);
2312 return E_NOTIMPL;
2315 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSyntheticModuleWide(IDebugSymbols3 *iface, ULONG64 base, ULONG size,
2316 const WCHAR *image_path, const WCHAR *module_name, ULONG flags)
2318 FIXME("%p, %s, %u, %s, %s, %#x stub.\n", iface, wine_dbgstr_longlong(base), size, debugstr_w(image_path),
2319 debugstr_w(module_name), flags);
2321 return E_NOTIMPL;
2324 static HRESULT STDMETHODCALLTYPE debugsymbols_RemoveSyntheticModule(IDebugSymbols3 *iface, ULONG64 base)
2326 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(base));
2328 return E_NOTIMPL;
2331 static HRESULT STDMETHODCALLTYPE debugsymbols_GetCurrentScopeFrameIndex(IDebugSymbols3 *iface, ULONG *index)
2333 FIXME("%p, %p stub.\n", iface, index);
2335 return E_NOTIMPL;
2338 static HRESULT STDMETHODCALLTYPE debugsymbols_SetScopeFrameByIndex(IDebugSymbols3 *iface, ULONG index)
2340 FIXME("%p, %u stub.\n", iface, index);
2342 return E_NOTIMPL;
2345 static HRESULT STDMETHODCALLTYPE debugsymbols_SetScopeFromJitDebugInfo(IDebugSymbols3 *iface, ULONG output_control,
2346 ULONG64 info_offset)
2348 FIXME("%p, %u, %s stub.\n", iface, output_control, wine_dbgstr_longlong(info_offset));
2350 return E_NOTIMPL;
2353 static HRESULT STDMETHODCALLTYPE debugsymbols_SetScopeFromStoredEvent(IDebugSymbols3 *iface)
2355 FIXME("%p stub.\n", iface);
2357 return E_NOTIMPL;
2360 static HRESULT STDMETHODCALLTYPE debugsymbols_OutputSymbolByOffset(IDebugSymbols3 *iface, ULONG output_control,
2361 ULONG flags, ULONG64 offset)
2363 FIXME("%p, %u, %#x, %s stub.\n", iface, output_control, flags, wine_dbgstr_longlong(offset));
2365 return E_NOTIMPL;
2368 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFunctionEntryByOffset(IDebugSymbols3 *iface, ULONG64 offset,
2369 ULONG flags, void *buffer, ULONG buffer_size, ULONG *needed_size)
2371 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, buffer, buffer_size,
2372 needed_size);
2374 return E_NOTIMPL;
2377 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldTypeAndOffset(IDebugSymbols3 *iface, ULONG64 module,
2378 ULONG container_type_id, const char *field, ULONG *field_type_id, ULONG *offset)
2380 FIXME("%p, %s, %u, %s, %p, %p stub.\n", iface, wine_dbgstr_longlong(module), container_type_id, debugstr_a(field),
2381 field_type_id, offset);
2383 return E_NOTIMPL;
2386 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldTypeAndOffsetWide(IDebugSymbols3 *iface, ULONG64 module,
2387 ULONG container_type_id, const WCHAR *field, ULONG *field_type_id, ULONG *offset)
2389 FIXME("%p, %s, %u, %s, %p, %p stub.\n", iface, wine_dbgstr_longlong(module), container_type_id, debugstr_w(field),
2390 field_type_id, offset);
2392 return E_NOTIMPL;
2395 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSyntheticSymbol(IDebugSymbols3 *iface, ULONG64 offset, ULONG size,
2396 const char *name, ULONG flags, DEBUG_MODULE_AND_ID *id)
2398 FIXME("%p, %s, %u, %s, %#x, %p stub.\n", iface, wine_dbgstr_longlong(offset), size, debugstr_a(name), flags, id);
2400 return E_NOTIMPL;
2403 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSyntheticSymbolWide(IDebugSymbols3 *iface, ULONG64 offset, ULONG size,
2404 const WCHAR *name, ULONG flags, DEBUG_MODULE_AND_ID *id)
2406 FIXME("%p, %s, %u, %s, %#x, %p stub.\n", iface, wine_dbgstr_longlong(offset), size, debugstr_w(name), flags, id);
2408 return E_NOTIMPL;
2411 static HRESULT STDMETHODCALLTYPE debugsymbols_RemoveSyntheticSymbol(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id)
2413 FIXME("%p, %p stub.\n", iface, id);
2415 return E_NOTIMPL;
2418 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntriesByOffset(IDebugSymbols3 *iface, ULONG64 offset,
2419 ULONG flags, DEBUG_MODULE_AND_ID *ids, LONG64 *displacements, ULONG count, ULONG *entries)
2421 FIXME("%p, %s, %#x, %p, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, ids, displacements, count,
2422 entries);
2424 return E_NOTIMPL;
2427 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntriesByName(IDebugSymbols3 *iface, const char *symbol,
2428 ULONG flags, DEBUG_MODULE_AND_ID *ids, ULONG count, ULONG *entries)
2430 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, debugstr_a(symbol), flags, ids, count, entries);
2432 return E_NOTIMPL;
2435 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntriesByNameWide(IDebugSymbols3 *iface, const WCHAR *symbol,
2436 ULONG flags, DEBUG_MODULE_AND_ID *ids, ULONG count, ULONG *entries)
2438 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, debugstr_w(symbol), flags, ids, count, entries);
2440 return E_NOTIMPL;
2443 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryByToken(IDebugSymbols3 *iface, ULONG64 base, ULONG token,
2444 DEBUG_MODULE_AND_ID *id)
2446 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(base), id);
2448 return E_NOTIMPL;
2451 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryInformation(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id,
2452 DEBUG_SYMBOL_ENTRY *info)
2454 FIXME("%p, %p, %p stub.\n", iface, id, info);
2456 return E_NOTIMPL;
2459 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryString(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id,
2460 ULONG which, char *buffer, ULONG buffer_size, ULONG *string_size)
2462 FIXME("%p, %p, %u, %p, %u, %p stub.\n", iface, id, which, buffer, buffer_size, string_size);
2464 return E_NOTIMPL;
2467 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryStringWide(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id,
2468 ULONG which, WCHAR *buffer, ULONG buffer_size, ULONG *string_size)
2470 FIXME("%p, %p, %u, %p, %u, %p stub.\n", iface, id, which, buffer, buffer_size, string_size);
2472 return E_NOTIMPL;
2475 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryOffsetRegions(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id,
2476 ULONG flags, DEBUG_OFFSET_REGION *regions, ULONG regions_count, ULONG *regions_avail)
2478 FIXME("%p, %p, %#x, %p, %u, %p stub.\n", iface, id, flags, regions, regions_count, regions_avail);
2480 return E_NOTIMPL;
2483 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryBySymbolEntry(IDebugSymbols3 *iface,
2484 DEBUG_MODULE_AND_ID *from_id, ULONG flags, DEBUG_MODULE_AND_ID *to_id)
2486 FIXME("%p, %p, %#x, %p stub.\n", iface, from_id, flags, to_id);
2488 return E_NOTIMPL;
2491 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntriesByOffset(IDebugSymbols3 *iface, ULONG64 offset,
2492 ULONG flags, DEBUG_SYMBOL_SOURCE_ENTRY *entries, ULONG count, ULONG *entries_avail)
2494 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, entries, count, entries_avail);
2496 return E_NOTIMPL;
2499 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntriesByLine(IDebugSymbols3 *iface, ULONG line,
2500 const char *file, ULONG flags, DEBUG_SYMBOL_SOURCE_ENTRY *entries, ULONG count, ULONG *entries_avail)
2502 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, debugstr_a(file), flags, entries, count, entries_avail);
2504 return E_NOTIMPL;
2507 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntriesByLineWide(IDebugSymbols3 *iface, ULONG line,
2508 const WCHAR *file, ULONG flags, DEBUG_SYMBOL_SOURCE_ENTRY *entries, ULONG count, ULONG *entries_avail)
2510 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, debugstr_w(file), flags, entries, count, entries_avail);
2512 return E_NOTIMPL;
2515 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntryString(IDebugSymbols3 *iface,
2516 DEBUG_SYMBOL_SOURCE_ENTRY *entry, ULONG which, char *buffer, ULONG buffer_size, ULONG *string_size)
2518 FIXME("%p, %p, %u, %p, %u, %p stub.\n", iface, entry, which, buffer, buffer_size, string_size);
2520 return E_NOTIMPL;
2523 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntryStringWide(IDebugSymbols3 *iface,
2524 DEBUG_SYMBOL_SOURCE_ENTRY *entry, ULONG which, WCHAR *buffer, ULONG buffer_size, ULONG *string_size)
2526 FIXME("%p, %p, %u, %p, %u, %p stub.\n", iface, entry, which, buffer, buffer_size, string_size);
2528 return E_NOTIMPL;
2531 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntryOffsetRegions(IDebugSymbols3 *iface,
2532 DEBUG_SYMBOL_SOURCE_ENTRY *entry, ULONG flags, DEBUG_OFFSET_REGION *regions, ULONG count, ULONG *regions_avail)
2534 FIXME("%p, %p, %#x, %p, %u, %p stub.\n", iface, entry, flags, regions, count, regions_avail);
2536 return E_NOTIMPL;
2539 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntryBySourceEntry(IDebugSymbols3 *iface,
2540 DEBUG_SYMBOL_SOURCE_ENTRY *from_entry, ULONG flags, DEBUG_SYMBOL_SOURCE_ENTRY *to_entry)
2542 FIXME("%p, %p, %#x, %p stub.\n", iface, from_entry, flags, to_entry);
2544 return E_NOTIMPL;
2547 static const IDebugSymbols3Vtbl debugsymbolsvtbl =
2549 debugsymbols_QueryInterface,
2550 debugsymbols_AddRef,
2551 debugsymbols_Release,
2552 debugsymbols_GetSymbolOptions,
2553 debugsymbols_AddSymbolOptions,
2554 debugsymbols_RemoveSymbolOptions,
2555 debugsymbols_SetSymbolOptions,
2556 debugsymbols_GetNameByOffset,
2557 debugsymbols_GetOffsetByName,
2558 debugsymbols_GetNearNameByOffset,
2559 debugsymbols_GetLineByOffset,
2560 debugsymbols_GetOffsetByLine,
2561 debugsymbols_GetNumberModules,
2562 debugsymbols_GetModuleByIndex,
2563 debugsymbols_GetModuleByModuleName,
2564 debugsymbols_GetModuleByOffset,
2565 debugsymbols_GetModuleNames,
2566 debugsymbols_GetModuleParameters,
2567 debugsymbols_GetSymbolModule,
2568 debugsymbols_GetTypeName,
2569 debugsymbols_GetTypeId,
2570 debugsymbols_GetTypeSize,
2571 debugsymbols_GetFieldOffset,
2572 debugsymbols_GetSymbolTypeId,
2573 debugsymbols_GetOffsetTypeId,
2574 debugsymbols_ReadTypedDataVirtual,
2575 debugsymbols_WriteTypedDataVirtual,
2576 debugsymbols_OutputTypedDataVirtual,
2577 debugsymbols_ReadTypedDataPhysical,
2578 debugsymbols_WriteTypedDataPhysical,
2579 debugsymbols_OutputTypedDataPhysical,
2580 debugsymbols_GetScope,
2581 debugsymbols_SetScope,
2582 debugsymbols_ResetScope,
2583 debugsymbols_GetScopeSymbolGroup,
2584 debugsymbols_CreateSymbolGroup,
2585 debugsymbols_StartSymbolMatch,
2586 debugsymbols_GetNextSymbolMatch,
2587 debugsymbols_EndSymbolMatch,
2588 debugsymbols_Reload,
2589 debugsymbols_GetSymbolPath,
2590 debugsymbols_SetSymbolPath,
2591 debugsymbols_AppendSymbolPath,
2592 debugsymbols_GetImagePath,
2593 debugsymbols_SetImagePath,
2594 debugsymbols_AppendImagePath,
2595 debugsymbols_GetSourcePath,
2596 debugsymbols_GetSourcePathElement,
2597 debugsymbols_SetSourcePath,
2598 debugsymbols_AppendSourcePath,
2599 debugsymbols_FindSourceFile,
2600 debugsymbols_GetSourceFileLineOffsets,
2601 /* IDebugSymbols2 */
2602 debugsymbols_GetModuleVersionInformation,
2603 debugsymbols_GetModuleNameString,
2604 debugsymbols_GetConstantName,
2605 debugsymbols_GetFieldName,
2606 debugsymbols_GetTypeOptions,
2607 debugsymbols_AddTypeOptions,
2608 debugsymbols_RemoveTypeOptions,
2609 debugsymbols_SetTypeOptions,
2610 /* IDebugSymbols3 */
2611 debugsymbols_GetNameByOffsetWide,
2612 debugsymbols_GetOffsetByNameWide,
2613 debugsymbols_GetNearNameByOffsetWide,
2614 debugsymbols_GetLineByOffsetWide,
2615 debugsymbols_GetOffsetByLineWide,
2616 debugsymbols_GetModuleByModuleNameWide,
2617 debugsymbols_GetSymbolModuleWide,
2618 debugsymbols_GetTypeNameWide,
2619 debugsymbols_GetTypeIdWide,
2620 debugsymbols_GetFieldOffsetWide,
2621 debugsymbols_GetSymbolTypeIdWide,
2622 debugsymbols_GetScopeSymbolGroup2,
2623 debugsymbols_CreateSymbolGroup2,
2624 debugsymbols_StartSymbolMatchWide,
2625 debugsymbols_GetNextSymbolMatchWide,
2626 debugsymbols_ReloadWide,
2627 debugsymbols_GetSymbolPathWide,
2628 debugsymbols_SetSymbolPathWide,
2629 debugsymbols_AppendSymbolPathWide,
2630 debugsymbols_GetImagePathWide,
2631 debugsymbols_SetImagePathWide,
2632 debugsymbols_AppendImagePathWide,
2633 debugsymbols_GetSourcePathWide,
2634 debugsymbols_GetSourcePathElementWide,
2635 debugsymbols_SetSourcePathWide,
2636 debugsymbols_AppendSourcePathWide,
2637 debugsymbols_FindSourceFileWide,
2638 debugsymbols_GetSourceFileLineOffsetsWide,
2639 debugsymbols_GetModuleVersionInformationWide,
2640 debugsymbols_GetModuleNameStringWide,
2641 debugsymbols_GetConstantNameWide,
2642 debugsymbols_GetFieldNameWide,
2643 debugsymbols_IsManagedModule,
2644 debugsymbols_GetModuleByModuleName2,
2645 debugsymbols_GetModuleByModuleName2Wide,
2646 debugsymbols_GetModuleByOffset2,
2647 debugsymbols_AddSyntheticModule,
2648 debugsymbols_AddSyntheticModuleWide,
2649 debugsymbols_RemoveSyntheticModule,
2650 debugsymbols_GetCurrentScopeFrameIndex,
2651 debugsymbols_SetScopeFrameByIndex,
2652 debugsymbols_SetScopeFromJitDebugInfo,
2653 debugsymbols_SetScopeFromStoredEvent,
2654 debugsymbols_OutputSymbolByOffset,
2655 debugsymbols_GetFunctionEntryByOffset,
2656 debugsymbols_GetFieldTypeAndOffset,
2657 debugsymbols_GetFieldTypeAndOffsetWide,
2658 debugsymbols_AddSyntheticSymbol,
2659 debugsymbols_AddSyntheticSymbolWide,
2660 debugsymbols_RemoveSyntheticSymbol,
2661 debugsymbols_GetSymbolEntriesByOffset,
2662 debugsymbols_GetSymbolEntriesByName,
2663 debugsymbols_GetSymbolEntriesByNameWide,
2664 debugsymbols_GetSymbolEntryByToken,
2665 debugsymbols_GetSymbolEntryInformation,
2666 debugsymbols_GetSymbolEntryString,
2667 debugsymbols_GetSymbolEntryStringWide,
2668 debugsymbols_GetSymbolEntryOffsetRegions,
2669 debugsymbols_GetSymbolEntryBySymbolEntry,
2670 debugsymbols_GetSourceEntriesByOffset,
2671 debugsymbols_GetSourceEntriesByLine,
2672 debugsymbols_GetSourceEntriesByLineWide,
2673 debugsymbols_GetSourceEntryString,
2674 debugsymbols_GetSourceEntryStringWide,
2675 debugsymbols_GetSourceEntryOffsetRegions,
2676 debugsymbols_GetSourceEntryBySourceEntry,
2679 static HRESULT STDMETHODCALLTYPE debugcontrol_QueryInterface(IDebugControl2 *iface, REFIID riid, void **obj)
2681 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2682 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
2683 return IUnknown_QueryInterface(unk, riid, obj);
2686 static ULONG STDMETHODCALLTYPE debugcontrol_AddRef(IDebugControl2 *iface)
2688 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2689 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
2690 return IUnknown_AddRef(unk);
2693 static ULONG STDMETHODCALLTYPE debugcontrol_Release(IDebugControl2 *iface)
2695 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2696 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
2697 return IUnknown_Release(unk);
2700 static HRESULT STDMETHODCALLTYPE debugcontrol_GetInterrupt(IDebugControl2 *iface)
2702 FIXME("%p stub.\n", iface);
2704 return E_NOTIMPL;
2707 static HRESULT STDMETHODCALLTYPE debugcontrol_SetInterrupt(IDebugControl2 *iface, ULONG flags)
2709 FIXME("%p, %#x stub.\n", iface, flags);
2711 return E_NOTIMPL;
2714 static HRESULT STDMETHODCALLTYPE debugcontrol_GetInterruptTimeout(IDebugControl2 *iface, ULONG *timeout)
2716 FIXME("%p, %p stub.\n", iface, timeout);
2718 return E_NOTIMPL;
2721 static HRESULT STDMETHODCALLTYPE debugcontrol_SetInterruptTimeout(IDebugControl2 *iface, ULONG timeout)
2723 FIXME("%p, %u stub.\n", iface, timeout);
2725 return E_NOTIMPL;
2728 static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogFile(IDebugControl2 *iface, char *buffer, ULONG buffer_size,
2729 ULONG *file_size, BOOL *append)
2731 FIXME("%p, %p, %u, %p, %p stub.\n", iface, buffer, buffer_size, file_size, append);
2733 return E_NOTIMPL;
2736 static HRESULT STDMETHODCALLTYPE debugcontrol_OpenLogFile(IDebugControl2 *iface, const char *file, BOOL append)
2738 FIXME("%p, %s, %d stub.\n", iface, debugstr_a(file), append);
2740 return E_NOTIMPL;
2742 static HRESULT STDMETHODCALLTYPE debugcontrol_CloseLogFile(IDebugControl2 *iface)
2744 FIXME("%p stub.\n", iface);
2746 return E_NOTIMPL;
2748 static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogMask(IDebugControl2 *iface, ULONG *mask)
2750 FIXME("%p, %p stub.\n", iface, mask);
2752 return E_NOTIMPL;
2755 static HRESULT STDMETHODCALLTYPE debugcontrol_SetLogMask(IDebugControl2 *iface, ULONG mask)
2757 FIXME("%p, %#x stub.\n", iface, mask);
2759 return E_NOTIMPL;
2762 static HRESULT STDMETHODCALLTYPE debugcontrol_Input(IDebugControl2 *iface, char *buffer, ULONG buffer_size,
2763 ULONG *input_size)
2765 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, input_size);
2767 return E_NOTIMPL;
2770 static HRESULT STDMETHODCALLTYPE debugcontrol_ReturnInput(IDebugControl2 *iface, const char *buffer)
2772 FIXME("%p, %s stub.\n", iface, debugstr_a(buffer));
2774 return E_NOTIMPL;
2777 static HRESULT STDMETHODVCALLTYPE debugcontrol_Output(IDebugControl2 *iface, ULONG mask, const char *format, ...)
2779 FIXME("%p, %#x, %s stub.\n", iface, mask, debugstr_a(format));
2781 return E_NOTIMPL;
2784 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVaList(IDebugControl2 *iface, ULONG mask, const char *format,
2785 __ms_va_list args)
2787 FIXME("%p, %#x, %s stub.\n", iface, mask, debugstr_a(format));
2789 return E_NOTIMPL;
2792 static HRESULT STDMETHODVCALLTYPE debugcontrol_ControlledOutput(IDebugControl2 *iface, ULONG output_control,
2793 ULONG mask, const char *format, ...)
2795 FIXME("%p, %u, %#x, %s stub.\n", iface, output_control, mask, debugstr_a(format));
2797 return E_NOTIMPL;
2800 static HRESULT STDMETHODCALLTYPE debugcontrol_ControlledOutputVaList(IDebugControl2 *iface, ULONG output_control,
2801 ULONG mask, const char *format, __ms_va_list args)
2803 FIXME("%p, %u, %#x, %s stub.\n", iface, output_control, mask, debugstr_a(format));
2805 return E_NOTIMPL;
2808 static HRESULT STDMETHODVCALLTYPE debugcontrol_OutputPrompt(IDebugControl2 *iface, ULONG output_control,
2809 const char *format, ...)
2811 FIXME("%p, %u, %s stub.\n", iface, output_control, debugstr_a(format));
2813 return E_NOTIMPL;
2816 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputPromptVaList(IDebugControl2 *iface, ULONG output_control,
2817 const char *format, __ms_va_list args)
2819 FIXME("%p, %u, %s stub.\n", iface, output_control, debugstr_a(format));
2821 return E_NOTIMPL;
2824 static HRESULT STDMETHODCALLTYPE debugcontrol_GetPromptText(IDebugControl2 *iface, char *buffer, ULONG buffer_size,
2825 ULONG *text_size)
2827 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, text_size);
2829 return E_NOTIMPL;
2832 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputCurrentState(IDebugControl2 *iface, ULONG output_control,
2833 ULONG flags)
2835 FIXME("%p, %u, %#x stub.\n", iface, output_control, flags);
2837 return E_NOTIMPL;
2840 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVersionInformation(IDebugControl2 *iface, ULONG output_control)
2842 FIXME("%p, %u stub.\n", iface, output_control);
2844 return E_NOTIMPL;
2847 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNotifyEventHandle(IDebugControl2 *iface, ULONG64 *handle)
2849 FIXME("%p, %p stub.\n", iface, handle);
2851 return E_NOTIMPL;
2854 static HRESULT STDMETHODCALLTYPE debugcontrol_SetNotifyEventHandle(IDebugControl2 *iface, ULONG64 handle)
2856 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(handle));
2858 return E_NOTIMPL;
2861 static HRESULT STDMETHODCALLTYPE debugcontrol_Assemble(IDebugControl2 *iface, ULONG64 offset, const char *code,
2862 ULONG64 *end_offset)
2864 FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), debugstr_a(code), end_offset);
2866 return E_NOTIMPL;
2869 static HRESULT STDMETHODCALLTYPE debugcontrol_Disassemble(IDebugControl2 *iface, ULONG64 offset, ULONG flags,
2870 char *buffer, ULONG buffer_size, ULONG *disassm_size, ULONG64 *end_offset)
2872 FIXME("%p, %s, %#x, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, buffer, buffer_size,
2873 disassm_size, end_offset);
2875 return E_NOTIMPL;
2878 static HRESULT STDMETHODCALLTYPE debugcontrol_GetDisassembleEffectiveOffset(IDebugControl2 *iface, ULONG64 *offset)
2880 FIXME("%p, %p stub.\n", iface, offset);
2882 return E_NOTIMPL;
2885 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassembly(IDebugControl2 *iface, ULONG output_control,
2886 ULONG64 offset, ULONG flags, ULONG64 *end_offset)
2888 FIXME("%p, %u, %s, %#x, %p stub.\n", iface, output_control, wine_dbgstr_longlong(offset), flags, end_offset);
2890 return E_NOTIMPL;
2893 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassemblyLines(IDebugControl2 *iface, ULONG output_control,
2894 ULONG prev_lines, ULONG total_lines, ULONG64 offset, ULONG flags, ULONG *offset_line, ULONG64 *start_offset,
2895 ULONG64 *end_offset, ULONG64 *line_offsets)
2897 FIXME("%p, %u, %u, %u, %s, %#x, %p, %p, %p, %p stub.\n", iface, output_control, prev_lines, total_lines,
2898 wine_dbgstr_longlong(offset), flags, offset_line, start_offset, end_offset, line_offsets);
2900 return E_NOTIMPL;
2903 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNearInstruction(IDebugControl2 *iface, ULONG64 offset, LONG delta,
2904 ULONG64 *instr_offset)
2906 FIXME("%p, %s, %d, %p stub.\n", iface, wine_dbgstr_longlong(offset), delta, instr_offset);
2908 return E_NOTIMPL;
2911 static HRESULT STDMETHODCALLTYPE debugcontrol_GetStackTrace(IDebugControl2 *iface, ULONG64 frame_offset,
2912 ULONG64 stack_offset, ULONG64 instr_offset, DEBUG_STACK_FRAME *frames, ULONG frames_size, ULONG *frames_filled)
2914 FIXME("%p, %s, %s, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(frame_offset),
2915 wine_dbgstr_longlong(stack_offset), wine_dbgstr_longlong(instr_offset), frames, frames_size, frames_filled);
2917 return E_NOTIMPL;
2920 static HRESULT STDMETHODCALLTYPE debugcontrol_GetReturnOffset(IDebugControl2 *iface, ULONG64 *offset)
2922 FIXME("%p, %p stub.\n", iface, offset);
2924 return E_NOTIMPL;
2927 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputStackTrace(IDebugControl2 *iface, ULONG output_control,
2928 DEBUG_STACK_FRAME *frames, ULONG frames_size, ULONG flags)
2930 FIXME("%p, %u, %p, %u, %#x stub.\n", iface, output_control, frames, frames_size, flags);
2932 return E_NOTIMPL;
2935 static HRESULT STDMETHODCALLTYPE debugcontrol_GetDebuggeeType(IDebugControl2 *iface, ULONG *debug_class,
2936 ULONG *qualifier)
2938 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2939 static struct target_process *target;
2941 FIXME("%p, %p, %p stub.\n", iface, debug_class, qualifier);
2943 *debug_class = DEBUG_CLASS_UNINITIALIZED;
2944 *qualifier = 0;
2946 if (!(target = debug_client_get_target(debug_client)))
2947 return E_UNEXPECTED;
2949 *debug_class = DEBUG_CLASS_USER_WINDOWS;
2950 *qualifier = DEBUG_USER_WINDOWS_PROCESS;
2952 return S_OK;
2955 static HRESULT STDMETHODCALLTYPE debugcontrol_GetActualProcessorType(IDebugControl2 *iface, ULONG *type)
2957 FIXME("%p, %p stub.\n", iface, type);
2959 return E_NOTIMPL;
2962 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExecutingProcessorType(IDebugControl2 *iface, ULONG *type)
2964 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2965 static struct target_process *target;
2966 HRESULT hr;
2968 TRACE("%p, %p.\n", iface, type);
2970 if (!(target = debug_client_get_target(debug_client)))
2971 return E_UNEXPECTED;
2973 if (FAILED(hr = debug_target_init_modules_info(target)))
2974 return hr;
2976 *type = target->cpu_type;
2978 return S_OK;
2981 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberPossibleExecutingProcessorTypes(IDebugControl2 *iface,
2982 ULONG *count)
2984 FIXME("%p, %p stub.\n", iface, count);
2986 return E_NOTIMPL;
2989 static HRESULT STDMETHODCALLTYPE debugcontrol_GetPossibleExecutingProcessorTypes(IDebugControl2 *iface, ULONG start,
2990 ULONG count, ULONG *types)
2992 FIXME("%p, %u, %u, %p stub.\n", iface, start, count, types);
2994 return E_NOTIMPL;
2997 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberProcessors(IDebugControl2 *iface, ULONG *count)
2999 FIXME("%p, %p stub.\n", iface, count);
3001 return E_NOTIMPL;
3004 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemVersion(IDebugControl2 *iface, ULONG *platform_id, ULONG *major,
3005 ULONG *minor, char *sp_string, ULONG sp_string_size, ULONG *sp_string_used, ULONG *sp_number,
3006 char *build_string, ULONG build_string_size, ULONG *build_string_used)
3008 FIXME("%p, %p, %p, %p, %p, %u, %p, %p, %p, %u, %p stub.\n", iface, platform_id, major, minor, sp_string,
3009 sp_string_size, sp_string_used, sp_number, build_string, build_string_size, build_string_used);
3011 return E_NOTIMPL;
3014 static HRESULT STDMETHODCALLTYPE debugcontrol_GetPageSize(IDebugControl2 *iface, ULONG *size)
3016 FIXME("%p, %p stub.\n", iface, size);
3018 return E_NOTIMPL;
3021 static HRESULT STDMETHODCALLTYPE debugcontrol_IsPointer64Bit(IDebugControl2 *iface)
3023 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3024 static struct target_process *target;
3025 HRESULT hr;
3027 TRACE("%p.\n", iface);
3029 if (!(target = debug_client_get_target(debug_client)))
3030 return E_UNEXPECTED;
3032 if (FAILED(hr = debug_target_init_modules_info(target)))
3033 return hr;
3035 switch (target->cpu_type)
3037 case IMAGE_FILE_MACHINE_I386:
3038 case IMAGE_FILE_MACHINE_ARMNT:
3039 hr = S_FALSE;
3040 break;
3041 case IMAGE_FILE_MACHINE_IA64:
3042 case IMAGE_FILE_MACHINE_AMD64:
3043 case IMAGE_FILE_MACHINE_ARM64:
3044 hr = S_OK;
3045 break;
3046 default:
3047 FIXME("Unexpected cpu type %#x.\n", target->cpu_type);
3048 hr = E_UNEXPECTED;
3051 return hr;
3054 static HRESULT STDMETHODCALLTYPE debugcontrol_ReadBugCheckData(IDebugControl2 *iface, ULONG *code, ULONG64 *arg1,
3055 ULONG64 *arg2, ULONG64 *arg3, ULONG64 *arg4)
3057 FIXME("%p, %p, %p, %p, %p, %p stub.\n", iface, code, arg1, arg2, arg3, arg4);
3059 return E_NOTIMPL;
3062 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberSupportedProcessorTypes(IDebugControl2 *iface, ULONG *count)
3064 FIXME("%p, %p stub.\n", iface, count);
3066 return E_NOTIMPL;
3069 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSupportedProcessorTypes(IDebugControl2 *iface, ULONG start,
3070 ULONG count, ULONG *types)
3072 FIXME("%p, %u, %u, %p stub.\n", iface, start, count, types);
3074 return E_NOTIMPL;
3077 static HRESULT STDMETHODCALLTYPE debugcontrol_GetProcessorTypeNames(IDebugControl2 *iface, ULONG type, char *full_name,
3078 ULONG full_name_buffer_size, ULONG *full_name_size, char *abbrev_name, ULONG abbrev_name_buffer_size,
3079 ULONG *abbrev_name_size)
3081 FIXME("%p, %u, %p, %u, %p, %p, %u, %p stub.\n", iface, type, full_name, full_name_buffer_size, full_name_size,
3082 abbrev_name, abbrev_name_buffer_size, abbrev_name_size);
3084 return E_NOTIMPL;
3087 static HRESULT STDMETHODCALLTYPE debugcontrol_GetEffectiveProcessorType(IDebugControl2 *iface, ULONG *type)
3089 FIXME("%p, %p stub.\n", iface, type);
3091 return E_NOTIMPL;
3094 static HRESULT STDMETHODCALLTYPE debugcontrol_SetEffectiveProcessorType(IDebugControl2 *iface, ULONG type)
3096 FIXME("%p, %u stub.\n", iface, type);
3098 return E_NOTIMPL;
3101 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExecutionStatus(IDebugControl2 *iface, ULONG *status)
3103 FIXME("%p, %p stub.\n", iface, status);
3105 return E_NOTIMPL;
3108 static HRESULT STDMETHODCALLTYPE debugcontrol_SetExecutionStatus(IDebugControl2 *iface, ULONG status)
3110 FIXME("%p, %u stub.\n", iface, status);
3112 return E_NOTIMPL;
3115 static HRESULT STDMETHODCALLTYPE debugcontrol_GetCodeLevel(IDebugControl2 *iface, ULONG *level)
3117 FIXME("%p, %p stub.\n", iface, level);
3119 return E_NOTIMPL;
3122 static HRESULT STDMETHODCALLTYPE debugcontrol_SetCodeLevel(IDebugControl2 *iface, ULONG level)
3124 FIXME("%p, %u stub.\n", iface, level);
3126 return E_NOTIMPL;
3129 static HRESULT STDMETHODCALLTYPE debugcontrol_GetEngineOptions(IDebugControl2 *iface, ULONG *options)
3131 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3133 TRACE("%p, %p.\n", iface, options);
3135 *options = debug_client->engine_options;
3137 return S_OK;
3140 static HRESULT STDMETHODCALLTYPE debugcontrol_AddEngineOptions(IDebugControl2 *iface, ULONG options)
3142 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3144 TRACE("%p, %#x.\n", iface, options);
3146 if (options & ~DEBUG_ENGOPT_ALL)
3147 return E_INVALIDARG;
3149 debug_client->engine_options |= options;
3151 return S_OK;
3154 static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveEngineOptions(IDebugControl2 *iface, ULONG options)
3156 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3158 TRACE("%p, %#x.\n", iface, options);
3160 debug_client->engine_options &= ~options;
3162 return S_OK;
3165 static HRESULT STDMETHODCALLTYPE debugcontrol_SetEngineOptions(IDebugControl2 *iface, ULONG options)
3167 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3169 TRACE("%p, %#x.\n", iface, options);
3171 if (options & ~DEBUG_ENGOPT_ALL)
3172 return E_INVALIDARG;
3174 debug_client->engine_options = options;
3176 return S_OK;
3179 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemErrorControl(IDebugControl2 *iface, ULONG *output_level,
3180 ULONG *break_level)
3182 FIXME("%p, %p, %p stub.\n", iface, output_level, break_level);
3184 return E_NOTIMPL;
3187 static HRESULT STDMETHODCALLTYPE debugcontrol_SetSystemErrorControl(IDebugControl2 *iface, ULONG output_level,
3188 ULONG break_level)
3190 FIXME("%p, %u, %u stub.\n", iface, output_level, break_level);
3192 return E_NOTIMPL;
3195 static HRESULT STDMETHODCALLTYPE debugcontrol_GetTextMacro(IDebugControl2 *iface, ULONG slot, char *buffer,
3196 ULONG buffer_size, ULONG *macro_size)
3198 FIXME("%p, %u, %p, %u, %p stub.\n", iface, slot, buffer, buffer_size, macro_size);
3200 return E_NOTIMPL;
3203 static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextMacro(IDebugControl2 *iface, ULONG slot, const char *macro)
3205 FIXME("%p, %u, %s stub.\n", iface, slot, debugstr_a(macro));
3207 return E_NOTIMPL;
3210 static HRESULT STDMETHODCALLTYPE debugcontrol_GetRadix(IDebugControl2 *iface, ULONG *radix)
3212 FIXME("%p, %p stub.\n", iface, radix);
3214 return E_NOTIMPL;
3217 static HRESULT STDMETHODCALLTYPE debugcontrol_SetRadix(IDebugControl2 *iface, ULONG radix)
3219 FIXME("%p, %u stub.\n", iface, radix);
3221 return E_NOTIMPL;
3224 static HRESULT STDMETHODCALLTYPE debugcontrol_Evaluate(IDebugControl2 *iface, const char *expression,
3225 ULONG desired_type, DEBUG_VALUE *value, ULONG *remainder_index)
3227 FIXME("%p, %s, %u, %p, %p stub.\n", iface, debugstr_a(expression), desired_type, value, remainder_index);
3229 return E_NOTIMPL;
3232 static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValue(IDebugControl2 *iface, DEBUG_VALUE input, ULONG output_type,
3233 DEBUG_VALUE *output)
3235 FIXME("%p, %u, %p stub.\n", iface, output_type, output);
3237 return E_NOTIMPL;
3240 static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValues(IDebugControl2 *iface, ULONG count, DEBUG_VALUE *input,
3241 ULONG *output_types, DEBUG_VALUE *output)
3243 FIXME("%p, %u, %p, %p, %p stub.\n", iface, count, input, output_types, output);
3245 return E_NOTIMPL;
3248 static HRESULT STDMETHODCALLTYPE debugcontrol_Execute(IDebugControl2 *iface, ULONG output_control, const char *command,
3249 ULONG flags)
3251 FIXME("%p, %u, %s, %#x stub.\n", iface, output_control, debugstr_a(command), flags);
3253 return E_NOTIMPL;
3256 static HRESULT STDMETHODCALLTYPE debugcontrol_ExecuteCommandFile(IDebugControl2 *iface, ULONG output_control,
3257 const char *command_file, ULONG flags)
3259 FIXME("%p, %u, %s, %#x stub.\n", iface, output_control, debugstr_a(command_file), flags);
3261 return E_NOTIMPL;
3264 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberBreakpoints(IDebugControl2 *iface, ULONG *count)
3266 FIXME("%p, %p stub.\n", iface, count);
3268 return E_NOTIMPL;
3271 static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointByIndex(IDebugControl2 *iface, ULONG index,
3272 IDebugBreakpoint **bp)
3274 FIXME("%p, %u, %p stub.\n", iface, index, bp);
3276 return E_NOTIMPL;
3279 static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointById(IDebugControl2 *iface, ULONG id, IDebugBreakpoint **bp)
3281 FIXME("%p, %u, %p stub.\n", iface, id, bp);
3283 return E_NOTIMPL;
3286 static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointParameters(IDebugControl2 *iface, ULONG count, ULONG *ids,
3287 ULONG start, DEBUG_BREAKPOINT_PARAMETERS *parameters)
3289 FIXME("%p, %u, %p, %u, %p stub.\n", iface, count, ids, start, parameters);
3291 return E_NOTIMPL;
3294 static HRESULT STDMETHODCALLTYPE debugcontrol_AddBreakpoint(IDebugControl2 *iface, ULONG type, ULONG desired_id,
3295 IDebugBreakpoint **bp)
3297 FIXME("%p, %u, %u, %p stub.\n", iface, type, desired_id, bp);
3299 return E_NOTIMPL;
3302 static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveBreakpoint(IDebugControl2 *iface, IDebugBreakpoint *bp)
3304 FIXME("%p, %p stub.\n", iface, bp);
3306 return E_NOTIMPL;
3309 static HRESULT STDMETHODCALLTYPE debugcontrol_AddExtension(IDebugControl2 *iface, const char *path, ULONG flags,
3310 ULONG64 *handle)
3312 FIXME("%p, %s, %#x, %p stub.\n", iface, debugstr_a(path), flags, handle);
3314 return E_NOTIMPL;
3317 static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveExtension(IDebugControl2 *iface, ULONG64 handle)
3319 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(handle));
3321 return E_NOTIMPL;
3324 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionByPath(IDebugControl2 *iface, const char *path,
3325 ULONG64 *handle)
3327 FIXME("%p, %s, %p stub.\n", iface, debugstr_a(path), handle);
3329 return E_NOTIMPL;
3332 static HRESULT STDMETHODCALLTYPE debugcontrol_CallExtension(IDebugControl2 *iface, ULONG64 handle,
3333 const char *function, const char *args)
3335 FIXME("%p, %s, %s, %s stub.\n", iface, wine_dbgstr_longlong(handle), debugstr_a(function), debugstr_a(args));
3337 return E_NOTIMPL;
3340 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionFunction(IDebugControl2 *iface, ULONG64 handle,
3341 const char *name, void *function)
3343 FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(handle), debugstr_a(name), function);
3345 return E_NOTIMPL;
3348 static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis32(IDebugControl2 *iface,
3349 PWINDBG_EXTENSION_APIS32 api)
3351 FIXME("%p, %p stub.\n", iface, api);
3353 return E_NOTIMPL;
3356 static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis64(IDebugControl2 *iface,
3357 PWINDBG_EXTENSION_APIS64 api)
3359 FIXME("%p, %p stub.\n", iface, api);
3361 return E_NOTIMPL;
3364 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberEventFilters(IDebugControl2 *iface, ULONG *specific_events,
3365 ULONG *specific_exceptions, ULONG *arbitrary_exceptions)
3367 FIXME("%p, %p, %p, %p stub.\n", iface, specific_events, specific_exceptions, arbitrary_exceptions);
3369 return E_NOTIMPL;
3372 static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterText(IDebugControl2 *iface, ULONG index, char *buffer,
3373 ULONG buffer_size, ULONG *text_size)
3375 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, text_size);
3377 return E_NOTIMPL;
3380 static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterCommand(IDebugControl2 *iface, ULONG index, char *buffer,
3381 ULONG buffer_size, ULONG *command_size)
3383 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, command_size);
3385 return E_NOTIMPL;
3388 static HRESULT STDMETHODCALLTYPE debugcontrol_SetEventFilterCommand(IDebugControl2 *iface, ULONG index,
3389 const char *command)
3391 FIXME("%p, %u, %s stub.\n", iface, index, debugstr_a(command));
3393 return E_NOTIMPL;
3396 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterParameters(IDebugControl2 *iface, ULONG start,
3397 ULONG count, DEBUG_SPECIFIC_FILTER_PARAMETERS *parameters)
3399 FIXME("%p, %u, %u, %p stub.\n", iface, start, count, parameters);
3401 return E_NOTIMPL;
3404 static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterParameters(IDebugControl2 *iface, ULONG start,
3405 ULONG count, DEBUG_SPECIFIC_FILTER_PARAMETERS *parameters)
3407 FIXME("%p, %u, %u, %p stub.\n", iface, start, count, parameters);
3409 return E_NOTIMPL;
3412 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterArgument(IDebugControl2 *iface, ULONG index,
3413 char *buffer, ULONG buffer_size, ULONG *argument_size)
3415 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, argument_size);
3417 return E_NOTIMPL;
3420 static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterArgument(IDebugControl2 *iface, ULONG index,
3421 const char *argument)
3423 FIXME("%p, %u, %s stub.\n", iface, index, debugstr_a(argument));
3425 return E_NOTIMPL;
3428 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterParameters(IDebugControl2 *iface, ULONG count,
3429 ULONG *codes, ULONG start, DEBUG_EXCEPTION_FILTER_PARAMETERS *parameters)
3431 FIXME("%p, %u, %p, %u, %p stub.\n", iface, count, codes, start, parameters);
3433 return E_NOTIMPL;
3436 static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterParameters(IDebugControl2 *iface, ULONG count,
3437 DEBUG_EXCEPTION_FILTER_PARAMETERS *parameters)
3439 FIXME("%p, %u, %p stub.\n", iface, count, parameters);
3441 return E_NOTIMPL;
3444 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterSecondCommand(IDebugControl2 *iface, ULONG index,
3445 char *buffer, ULONG buffer_size, ULONG *command_size)
3447 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, command_size);
3449 return E_NOTIMPL;
3452 static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterSecondCommand(IDebugControl2 *iface, ULONG index,
3453 const char *command)
3455 FIXME("%p, %u, %s stub.\n", iface, index, debugstr_a(command));
3457 return E_NOTIMPL;
3460 static HRESULT STDMETHODCALLTYPE debugcontrol_WaitForEvent(IDebugControl2 *iface, ULONG flags, ULONG timeout)
3462 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3463 struct target_process *target;
3465 TRACE("%p, %#x, %u.\n", iface, flags, timeout);
3467 /* FIXME: only one target is used currently */
3469 if (!(target = debug_client_get_target(debug_client)))
3470 return E_UNEXPECTED;
3472 if (target->attach_flags & DEBUG_ATTACH_NONINVASIVE)
3474 BOOL suspend = !(target->attach_flags & DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND);
3475 DWORD access = PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_LIMITED_INFORMATION;
3476 NTSTATUS status;
3478 if (suspend)
3479 access |= PROCESS_SUSPEND_RESUME;
3481 target->handle = OpenProcess(access, FALSE, target->pid);
3482 if (!target->handle)
3484 WARN("Failed to get process handle for pid %#x.\n", target->pid);
3485 return E_UNEXPECTED;
3488 if (suspend)
3490 status = NtSuspendProcess(target->handle);
3491 if (status)
3492 WARN("Failed to suspend a process, status %#x.\n", status);
3495 return S_OK;
3497 else
3499 FIXME("Unsupported attach flags %#x.\n", target->attach_flags);
3502 return E_NOTIMPL;
3505 static HRESULT STDMETHODCALLTYPE debugcontrol_GetLastEventInformation(IDebugControl2 *iface, ULONG *type, ULONG *pid,
3506 ULONG *tid, void *extra_info, ULONG extra_info_size, ULONG *extra_info_used, char *description,
3507 ULONG desc_size, ULONG *desc_used)
3509 FIXME("%p, %p, %p, %p, %p, %u, %p, %p, %u, %p stub.\n", iface, type, pid, tid, extra_info, extra_info_size,
3510 extra_info_used, description, desc_size, desc_used);
3512 return E_NOTIMPL;
3515 static HRESULT STDMETHODCALLTYPE debugcontrol_GetCurrentTimeDate(IDebugControl2 *iface, ULONG timedate)
3517 FIXME("%p, %u stub.\n", iface, timedate);
3519 return E_NOTIMPL;
3522 static HRESULT STDMETHODCALLTYPE debugcontrol_GetCurrentSystemUpTime(IDebugControl2 *iface, ULONG uptime)
3524 FIXME("%p, %u stub.\n", iface, uptime);
3526 return E_NOTIMPL;
3529 static HRESULT STDMETHODCALLTYPE debugcontrol_GetDumpFormatFlags(IDebugControl2 *iface, ULONG *flags)
3531 FIXME("%p, %p stub.\n", iface, flags);
3533 return E_NOTIMPL;
3536 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberTextPlacements(IDebugControl2 *iface, ULONG *count)
3538 FIXME("%p, %p stub.\n", iface, count);
3540 return E_NOTIMPL;
3543 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberTextReplacement(IDebugControl2 *iface, const char *src_text,
3544 ULONG index, char *src_buffer, ULONG src_buffer_size, ULONG *src_size, char *dst_buffer,
3545 ULONG dst_buffer_size, ULONG *dst_size)
3547 FIXME("%p, %s, %u, %p, %u, %p, %p, %u, %p stub.\n", iface, debugstr_a(src_text), index, src_buffer,
3548 src_buffer_size, src_size, dst_buffer, dst_buffer_size, dst_size);
3550 return E_NOTIMPL;
3553 static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextReplacement(IDebugControl2 *iface, const char *src_text,
3554 const char *dst_text)
3556 FIXME("%p, %s, %s stub.\n", iface, debugstr_a(src_text), debugstr_a(dst_text));
3558 return E_NOTIMPL;
3561 static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveTextReplacements(IDebugControl2 *iface)
3563 FIXME("%p stub.\n", iface);
3565 return E_NOTIMPL;
3568 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputTextReplacements(IDebugControl2 *iface, ULONG output_control,
3569 ULONG flags)
3571 FIXME("%p, %u, %#x stub.\n", iface, output_control, flags);
3573 return E_NOTIMPL;
3576 static const IDebugControl2Vtbl debugcontrolvtbl =
3578 debugcontrol_QueryInterface,
3579 debugcontrol_AddRef,
3580 debugcontrol_Release,
3581 debugcontrol_GetInterrupt,
3582 debugcontrol_SetInterrupt,
3583 debugcontrol_GetInterruptTimeout,
3584 debugcontrol_SetInterruptTimeout,
3585 debugcontrol_GetLogFile,
3586 debugcontrol_OpenLogFile,
3587 debugcontrol_CloseLogFile,
3588 debugcontrol_GetLogMask,
3589 debugcontrol_SetLogMask,
3590 debugcontrol_Input,
3591 debugcontrol_ReturnInput,
3592 debugcontrol_Output,
3593 debugcontrol_OutputVaList,
3594 debugcontrol_ControlledOutput,
3595 debugcontrol_ControlledOutputVaList,
3596 debugcontrol_OutputPrompt,
3597 debugcontrol_OutputPromptVaList,
3598 debugcontrol_GetPromptText,
3599 debugcontrol_OutputCurrentState,
3600 debugcontrol_OutputVersionInformation,
3601 debugcontrol_GetNotifyEventHandle,
3602 debugcontrol_SetNotifyEventHandle,
3603 debugcontrol_Assemble,
3604 debugcontrol_Disassemble,
3605 debugcontrol_GetDisassembleEffectiveOffset,
3606 debugcontrol_OutputDisassembly,
3607 debugcontrol_OutputDisassemblyLines,
3608 debugcontrol_GetNearInstruction,
3609 debugcontrol_GetStackTrace,
3610 debugcontrol_GetReturnOffset,
3611 debugcontrol_OutputStackTrace,
3612 debugcontrol_GetDebuggeeType,
3613 debugcontrol_GetActualProcessorType,
3614 debugcontrol_GetExecutingProcessorType,
3615 debugcontrol_GetNumberPossibleExecutingProcessorTypes,
3616 debugcontrol_GetPossibleExecutingProcessorTypes,
3617 debugcontrol_GetNumberProcessors,
3618 debugcontrol_GetSystemVersion,
3619 debugcontrol_GetPageSize,
3620 debugcontrol_IsPointer64Bit,
3621 debugcontrol_ReadBugCheckData,
3622 debugcontrol_GetNumberSupportedProcessorTypes,
3623 debugcontrol_GetSupportedProcessorTypes,
3624 debugcontrol_GetProcessorTypeNames,
3625 debugcontrol_GetEffectiveProcessorType,
3626 debugcontrol_SetEffectiveProcessorType,
3627 debugcontrol_GetExecutionStatus,
3628 debugcontrol_SetExecutionStatus,
3629 debugcontrol_GetCodeLevel,
3630 debugcontrol_SetCodeLevel,
3631 debugcontrol_GetEngineOptions,
3632 debugcontrol_AddEngineOptions,
3633 debugcontrol_RemoveEngineOptions,
3634 debugcontrol_SetEngineOptions,
3635 debugcontrol_GetSystemErrorControl,
3636 debugcontrol_SetSystemErrorControl,
3637 debugcontrol_GetTextMacro,
3638 debugcontrol_SetTextMacro,
3639 debugcontrol_GetRadix,
3640 debugcontrol_SetRadix,
3641 debugcontrol_Evaluate,
3642 debugcontrol_CoerceValue,
3643 debugcontrol_CoerceValues,
3644 debugcontrol_Execute,
3645 debugcontrol_ExecuteCommandFile,
3646 debugcontrol_GetNumberBreakpoints,
3647 debugcontrol_GetBreakpointByIndex,
3648 debugcontrol_GetBreakpointById,
3649 debugcontrol_GetBreakpointParameters,
3650 debugcontrol_AddBreakpoint,
3651 debugcontrol_RemoveBreakpoint,
3652 debugcontrol_AddExtension,
3653 debugcontrol_RemoveExtension,
3654 debugcontrol_GetExtensionByPath,
3655 debugcontrol_CallExtension,
3656 debugcontrol_GetExtensionFunction,
3657 debugcontrol_GetWindbgExtensionApis32,
3658 debugcontrol_GetWindbgExtensionApis64,
3659 debugcontrol_GetNumberEventFilters,
3660 debugcontrol_GetEventFilterText,
3661 debugcontrol_GetEventFilterCommand,
3662 debugcontrol_SetEventFilterCommand,
3663 debugcontrol_GetSpecificFilterParameters,
3664 debugcontrol_SetSpecificFilterParameters,
3665 debugcontrol_GetSpecificFilterArgument,
3666 debugcontrol_SetSpecificFilterArgument,
3667 debugcontrol_GetExceptionFilterParameters,
3668 debugcontrol_SetExceptionFilterParameters,
3669 debugcontrol_GetExceptionFilterSecondCommand,
3670 debugcontrol_SetExceptionFilterSecondCommand,
3671 debugcontrol_WaitForEvent,
3672 debugcontrol_GetLastEventInformation,
3673 debugcontrol_GetCurrentTimeDate,
3674 debugcontrol_GetCurrentSystemUpTime,
3675 debugcontrol_GetDumpFormatFlags,
3676 debugcontrol_GetNumberTextPlacements,
3677 debugcontrol_GetNumberTextReplacement,
3678 debugcontrol_SetTextReplacement,
3679 debugcontrol_RemoveTextReplacements,
3680 debugcontrol_OutputTextReplacements,
3683 static HRESULT STDMETHODCALLTYPE debugadvanced_QueryInterface(IDebugAdvanced *iface, REFIID riid, void **obj)
3685 struct debug_client *debug_client = impl_from_IDebugAdvanced(iface);
3686 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3687 return IUnknown_QueryInterface(unk, riid, obj);
3690 static ULONG STDMETHODCALLTYPE debugadvanced_AddRef(IDebugAdvanced *iface)
3692 struct debug_client *debug_client = impl_from_IDebugAdvanced(iface);
3693 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3694 return IUnknown_AddRef(unk);
3697 static ULONG STDMETHODCALLTYPE debugadvanced_Release(IDebugAdvanced *iface)
3699 struct debug_client *debug_client = impl_from_IDebugAdvanced(iface);
3700 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3701 return IUnknown_Release(unk);
3704 static HRESULT STDMETHODCALLTYPE debugadvanced_GetThreadContext(IDebugAdvanced *iface, void *context,
3705 ULONG context_size)
3707 FIXME("%p, %p, %u stub.\n", iface, context, context_size);
3709 return E_NOTIMPL;
3712 static HRESULT STDMETHODCALLTYPE debugadvanced_SetThreadContext(IDebugAdvanced *iface, void *context,
3713 ULONG context_size)
3715 FIXME("%p, %p, %u stub.\n", iface, context, context_size);
3717 return E_NOTIMPL;
3720 static const IDebugAdvancedVtbl debugadvancedvtbl =
3722 debugadvanced_QueryInterface,
3723 debugadvanced_AddRef,
3724 debugadvanced_Release,
3725 /* IDebugAdvanced */
3726 debugadvanced_GetThreadContext,
3727 debugadvanced_SetThreadContext,
3731 static HRESULT STDMETHODCALLTYPE debugsystemobjects_QueryInterface(IDebugSystemObjects *iface, REFIID riid, void **obj)
3733 struct debug_client *debug_client = impl_from_IDebugSystemObjects(iface);
3734 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3735 return IUnknown_QueryInterface(unk, riid, obj);
3738 static ULONG STDMETHODCALLTYPE debugsystemobjects_AddRef(IDebugSystemObjects *iface)
3740 struct debug_client *debug_client = impl_from_IDebugSystemObjects(iface);
3741 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3742 return IUnknown_AddRef(unk);
3745 static ULONG STDMETHODCALLTYPE debugsystemobjects_Release(IDebugSystemObjects *iface)
3747 struct debug_client *debug_client = impl_from_IDebugSystemObjects(iface);
3748 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3749 return IUnknown_Release(unk);
3752 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetEventThread(IDebugSystemObjects *iface, ULONG *id)
3754 FIXME("%p, %p stub.\n", iface, id);
3756 return E_NOTIMPL;
3759 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetEventProcess(IDebugSystemObjects *iface, ULONG *id)
3761 FIXME("%p, %p stub.\n", iface, id);
3763 return E_NOTIMPL;
3766 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadId(IDebugSystemObjects *iface, ULONG *id)
3768 FIXME("%p, %p stub.\n", iface, id);
3770 return E_NOTIMPL;
3773 static HRESULT STDMETHODCALLTYPE debugsystemobjects_SetCurrentThreadId(IDebugSystemObjects *iface, ULONG id)
3775 FIXME("%p, %u stub.\n", iface, id);
3777 return E_NOTIMPL;
3780 static HRESULT STDMETHODCALLTYPE debugsystemobjects_SetCurrentProcessId(IDebugSystemObjects *iface, ULONG id)
3782 FIXME("%p, %u stub.\n", iface, id);
3784 return E_NOTIMPL;
3787 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetNumberThreads(IDebugSystemObjects *iface, ULONG *number)
3789 FIXME("%p, %p stub.\n", iface, number);
3791 return E_NOTIMPL;
3794 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetTotalNumberThreads(IDebugSystemObjects *iface, ULONG *total,
3795 ULONG *largest_process)
3797 FIXME("%p, %p, %p stub.\n", iface, total, largest_process);
3799 return E_NOTIMPL;
3802 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdsByIndex(IDebugSystemObjects *iface, ULONG start,
3803 ULONG count, ULONG *ids, ULONG *sysids)
3805 FIXME("%p, %u, %u, %p, %p stub.\n", iface, start, count, ids, sysids);
3807 return E_NOTIMPL;
3810 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdByProcessor(IDebugSystemObjects *iface, ULONG processor,
3811 ULONG *id)
3813 FIXME("%p, %u, %p stub.\n", iface, processor, id);
3815 return E_NOTIMPL;
3818 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadDataOffset(IDebugSystemObjects *iface,
3819 ULONG64 *offset)
3821 FIXME("%p, %p stub.\n", iface, offset);
3823 return E_NOTIMPL;
3826 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdByDataOffset(IDebugSystemObjects *iface, ULONG64 offset,
3827 ULONG *id)
3829 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), id);
3831 return E_NOTIMPL;
3834 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadTeb(IDebugSystemObjects *iface, ULONG64 *offset)
3836 FIXME("%p, %p stub.\n", iface, offset);
3838 return E_NOTIMPL;
3841 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdByTeb(IDebugSystemObjects *iface, ULONG64 offset,
3842 ULONG *id)
3844 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), id);
3846 return E_NOTIMPL;
3849 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadSystemId(IDebugSystemObjects *iface, ULONG *sysid)
3851 FIXME("%p, %p stub.\n", iface, sysid);
3853 return E_NOTIMPL;
3856 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdBySystemId(IDebugSystemObjects *iface, ULONG sysid,
3857 ULONG *id)
3859 FIXME("%p, %u, %p stub.\n", iface, sysid, id);
3861 return E_NOTIMPL;
3864 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadHandle(IDebugSystemObjects *iface, ULONG64 *handle)
3866 FIXME("%p, %p stub.\n", iface, handle);
3868 return E_NOTIMPL;
3871 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdByHandle(IDebugSystemObjects *iface, ULONG64 handle,
3872 ULONG *id)
3874 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(handle), id);
3876 return E_NOTIMPL;
3879 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetNumberProcesses(IDebugSystemObjects *iface, ULONG *number)
3881 FIXME("%p, %p stub.\n", iface, number);
3883 return E_NOTIMPL;
3886 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdsByIndex(IDebugSystemObjects *iface, ULONG start,
3887 ULONG count, ULONG *ids, ULONG *sysids)
3889 FIXME("%p, %u, %u, %p, %p stub.\n", iface, start, count, ids, sysids);
3891 return E_NOTIMPL;
3894 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessDataOffset(IDebugSystemObjects *iface,
3895 ULONG64 *offset)
3897 FIXME("%p, %p stub.\n", iface, offset);
3899 return E_NOTIMPL;
3902 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdByDataOffset(IDebugSystemObjects *iface,
3903 ULONG64 offset, ULONG *id)
3905 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), id);
3907 return E_NOTIMPL;
3910 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessPeb(IDebugSystemObjects *iface, ULONG64 *offset)
3912 FIXME("%p, %p stub.\n", iface, offset);
3914 return E_NOTIMPL;
3917 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdByPeb(IDebugSystemObjects *iface, ULONG64 offset,
3918 ULONG *id)
3920 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), id);
3922 return E_NOTIMPL;
3925 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessSystemId(IDebugSystemObjects *iface, ULONG *sysid)
3927 FIXME("%p, %p stub.\n", iface, sysid);
3929 return E_NOTIMPL;
3932 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdBySystemId(IDebugSystemObjects *iface, ULONG sysid,
3933 ULONG *id)
3935 FIXME("%p, %u, %p stub.\n", iface, sysid, id);
3937 return E_NOTIMPL;
3940 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessHandle(IDebugSystemObjects *iface,
3941 ULONG64 *handle)
3943 FIXME("%p, %p stub.\n", iface, handle);
3945 return E_NOTIMPL;
3948 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdByHandle(IDebugSystemObjects *iface, ULONG64 handle,
3949 ULONG *id)
3951 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(handle), id);
3953 return E_NOTIMPL;
3956 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessExecutableName(IDebugSystemObjects *iface,
3957 char *buffer, ULONG buffer_size, ULONG *exe_size)
3959 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, exe_size);
3961 return E_NOTIMPL;
3964 static const IDebugSystemObjectsVtbl debugsystemobjectsvtbl =
3966 debugsystemobjects_QueryInterface,
3967 debugsystemobjects_AddRef,
3968 debugsystemobjects_Release,
3969 debugsystemobjects_GetEventThread,
3970 debugsystemobjects_GetEventProcess,
3971 debugsystemobjects_GetCurrentThreadId,
3972 debugsystemobjects_SetCurrentThreadId,
3973 debugsystemobjects_SetCurrentProcessId,
3974 debugsystemobjects_GetNumberThreads,
3975 debugsystemobjects_GetTotalNumberThreads,
3976 debugsystemobjects_GetThreadIdsByIndex,
3977 debugsystemobjects_GetThreadIdByProcessor,
3978 debugsystemobjects_GetCurrentThreadDataOffset,
3979 debugsystemobjects_GetThreadIdByDataOffset,
3980 debugsystemobjects_GetCurrentThreadTeb,
3981 debugsystemobjects_GetThreadIdByTeb,
3982 debugsystemobjects_GetCurrentThreadSystemId,
3983 debugsystemobjects_GetThreadIdBySystemId,
3984 debugsystemobjects_GetCurrentThreadHandle,
3985 debugsystemobjects_GetThreadIdByHandle,
3986 debugsystemobjects_GetNumberProcesses,
3987 debugsystemobjects_GetProcessIdsByIndex,
3988 debugsystemobjects_GetCurrentProcessDataOffset,
3989 debugsystemobjects_GetProcessIdByDataOffset,
3990 debugsystemobjects_GetCurrentProcessPeb,
3991 debugsystemobjects_GetProcessIdByPeb,
3992 debugsystemobjects_GetCurrentProcessSystemId,
3993 debugsystemobjects_GetProcessIdBySystemId,
3994 debugsystemobjects_GetCurrentProcessHandle,
3995 debugsystemobjects_GetProcessIdByHandle,
3996 debugsystemobjects_GetCurrentProcessExecutableName,
3999 /************************************************************
4000 * DebugExtensionInitialize (DBGENG.@)
4002 * Initializing Debug Engine
4004 * PARAMS
4005 * pVersion [O] Receiving the version of extension
4006 * pFlags [O] Reserved
4008 * RETURNS
4009 * Success: S_OK
4010 * Failure: Anything other than S_OK
4012 * BUGS
4013 * Unimplemented
4015 HRESULT WINAPI DebugExtensionInitialize(ULONG * pVersion, ULONG * pFlags)
4017 FIXME("(%p,%p): stub\n", pVersion, pFlags);
4019 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
4021 return E_NOTIMPL;
4024 /************************************************************
4025 * DebugCreate (dbgeng.@)
4027 HRESULT WINAPI DebugCreate(REFIID riid, void **obj)
4029 struct debug_client *debug_client;
4030 IUnknown *unk;
4031 HRESULT hr;
4033 TRACE("%s, %p.\n", debugstr_guid(riid), obj);
4035 debug_client = heap_alloc_zero(sizeof(*debug_client));
4036 if (!debug_client)
4037 return E_OUTOFMEMORY;
4039 debug_client->IDebugClient_iface.lpVtbl = &debugclientvtbl;
4040 debug_client->IDebugDataSpaces_iface.lpVtbl = &debugdataspacesvtbl;
4041 debug_client->IDebugSymbols3_iface.lpVtbl = &debugsymbolsvtbl;
4042 debug_client->IDebugControl2_iface.lpVtbl = &debugcontrolvtbl;
4043 debug_client->IDebugAdvanced_iface.lpVtbl = &debugadvancedvtbl;
4044 debug_client->IDebugSystemObjects_iface.lpVtbl = &debugsystemobjectsvtbl;
4045 debug_client->refcount = 1;
4046 list_init(&debug_client->targets);
4048 unk = (IUnknown *)&debug_client->IDebugClient_iface;
4050 hr = IUnknown_QueryInterface(unk, riid, obj);
4051 IUnknown_Release(unk);
4053 return hr;
4056 /************************************************************
4057 * DebugCreateEx (DBGENG.@)
4059 HRESULT WINAPI DebugCreateEx(REFIID riid, DWORD flags, void **obj)
4061 FIXME("(%s, %#x, %p): stub\n", debugstr_guid(riid), flags, obj);
4063 return E_NOTIMPL;
4066 /************************************************************
4067 * DebugConnect (DBGENG.@)
4069 * Creating Debug Engine client object and connecting it to remote host
4071 * PARAMS
4072 * RemoteOptions [I] Options which define how debugger engine connects to remote host
4073 * InterfaceId [I] Interface Id of debugger client
4074 * pInterface [O] Pointer to interface as requested via InterfaceId
4076 * RETURNS
4077 * Success: S_OK
4078 * Failure: Anything other than S_OK
4080 * BUGS
4081 * Unimplemented
4083 HRESULT WINAPI DebugConnect(PCSTR RemoteOptions, REFIID InterfaceId, PVOID * pInterface)
4085 FIXME("(%p,%p,%p): stub\n", RemoteOptions, InterfaceId, pInterface);
4087 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
4089 return E_NOTIMPL;