rtworkq: Add RtwqJoinWorkQueue()/RtwqUnjoinWorkQueue() stubs.
[wine.git] / dlls / dbgeng / dbgeng.c
blob35796dd8a77184319b2757893a81b77466b2d177
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 extern NTSTATUS WINAPI NtSuspendProcess(HANDLE handle);
40 extern NTSTATUS WINAPI NtResumeProcess(HANDLE handle);
42 struct module_info
44 DEBUG_MODULE_PARAMETERS params;
45 char image_name[MAX_PATH];
48 struct target_process
50 struct list entry;
51 unsigned int pid;
52 unsigned int attach_flags;
53 HANDLE handle;
54 struct
56 struct module_info *info;
57 unsigned int loaded;
58 unsigned int unloaded;
59 BOOL initialized;
60 } modules;
61 ULONG cpu_type;
64 struct debug_client
66 IDebugClient7 IDebugClient_iface;
67 IDebugDataSpaces IDebugDataSpaces_iface;
68 IDebugSymbols3 IDebugSymbols3_iface;
69 IDebugControl2 IDebugControl2_iface;
70 IDebugAdvanced IDebugAdvanced_iface;
71 IDebugSystemObjects IDebugSystemObjects_iface;
72 LONG refcount;
73 ULONG engine_options;
74 struct list targets;
75 IDebugEventCallbacks *event_callbacks;
78 static struct target_process *debug_client_get_target(struct debug_client *debug_client)
80 if (list_empty(&debug_client->targets))
81 return NULL;
83 return LIST_ENTRY(list_head(&debug_client->targets), struct target_process, entry);
86 static HRESULT debug_target_return_string(const char *str, char *buffer, unsigned int buffer_size,
87 unsigned int *size)
89 unsigned int len = strlen(str), dst_len;
91 if (size)
92 *size = len + 1;
94 if (buffer && buffer_size)
96 dst_len = min(len, buffer_size - 1);
97 if (dst_len)
98 memcpy(buffer, str, dst_len);
99 buffer[dst_len] = 0;
102 return len < buffer_size ? S_OK : S_FALSE;
105 static WORD debug_target_get_module_machine(struct target_process *target, HMODULE module)
107 IMAGE_DOS_HEADER dos = { 0 };
108 WORD machine = 0;
110 ReadProcessMemory(target->handle, module, &dos, sizeof(dos), NULL);
111 if (dos.e_magic == IMAGE_DOS_SIGNATURE)
113 ReadProcessMemory(target->handle, (const char *)module + dos.e_lfanew + 4 /* PE signature */, &machine,
114 sizeof(machine), NULL);
117 return machine;
120 static DWORD debug_target_get_module_timestamp(struct target_process *target, HMODULE module)
122 IMAGE_DOS_HEADER dos = { 0 };
123 DWORD timestamp = 0;
125 ReadProcessMemory(target->handle, module, &dos, sizeof(dos), NULL);
126 if (dos.e_magic == IMAGE_DOS_SIGNATURE)
128 ReadProcessMemory(target->handle, (const char *)module + dos.e_lfanew + 4 /* PE signature */ +
129 FIELD_OFFSET(IMAGE_FILE_HEADER, TimeDateStamp), &timestamp, sizeof(timestamp), NULL);
132 return timestamp;
135 static HRESULT debug_target_init_modules_info(struct target_process *target)
137 unsigned int i, count;
138 HMODULE *modules;
139 MODULEINFO info;
140 DWORD needed;
142 if (target->modules.initialized)
143 return S_OK;
145 if (!target->handle)
146 return E_UNEXPECTED;
148 needed = 0;
149 EnumProcessModules(target->handle, NULL, 0, &needed);
150 if (!needed)
151 return E_FAIL;
153 count = needed / sizeof(HMODULE);
155 if (!(modules = heap_alloc(count * sizeof(*modules))))
156 return E_OUTOFMEMORY;
158 if (!(target->modules.info = heap_alloc_zero(count * sizeof(*target->modules.info))))
160 heap_free(modules);
161 return E_OUTOFMEMORY;
164 if (EnumProcessModules(target->handle, modules, count * sizeof(*modules), &needed))
166 for (i = 0; i < count; ++i)
168 if (!GetModuleInformation(target->handle, modules[i], &info, sizeof(info)))
170 WARN("Failed to get module information, error %d.\n", GetLastError());
171 continue;
174 target->modules.info[i].params.Base = (ULONG_PTR)info.lpBaseOfDll;
175 target->modules.info[i].params.Size = info.SizeOfImage;
176 target->modules.info[i].params.TimeDateStamp = debug_target_get_module_timestamp(target, modules[i]);
178 GetModuleFileNameExA(target->handle, modules[i], target->modules.info[i].image_name,
179 ARRAY_SIZE(target->modules.info[i].image_name));
183 target->cpu_type = debug_target_get_module_machine(target, modules[0]);
185 heap_free(modules);
187 target->modules.loaded = count;
188 target->modules.unloaded = 0; /* FIXME */
190 target->modules.initialized = TRUE;
192 return S_OK;
195 static const struct module_info *debug_target_get_module_info(struct target_process *target, unsigned int i)
197 if (FAILED(debug_target_init_modules_info(target)))
198 return NULL;
200 if (i >= target->modules.loaded)
201 return NULL;
203 return &target->modules.info[i];
206 static const struct module_info *debug_target_get_module_info_by_base(struct target_process *target, ULONG64 base)
208 unsigned int i;
210 if (FAILED(debug_target_init_modules_info(target)))
211 return NULL;
213 for (i = 0; i < target->modules.loaded; ++i)
215 if (target->modules.info[i].params.Base == base)
216 return &target->modules.info[i];
219 return NULL;
222 static void debug_client_detach_target(struct target_process *target)
224 NTSTATUS status;
226 if (!target->handle)
227 return;
229 if (target->attach_flags & DEBUG_ATTACH_NONINVASIVE)
231 BOOL resume = !(target->attach_flags & DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND);
233 if (resume)
235 if ((status = NtResumeProcess(target->handle)))
236 WARN("Failed to resume process, status %#x.\n", status);
240 CloseHandle(target->handle);
241 target->handle = NULL;
244 static struct debug_client *impl_from_IDebugClient(IDebugClient7 *iface)
246 return CONTAINING_RECORD(iface, struct debug_client, IDebugClient_iface);
249 static struct debug_client *impl_from_IDebugDataSpaces(IDebugDataSpaces *iface)
251 return CONTAINING_RECORD(iface, struct debug_client, IDebugDataSpaces_iface);
254 static struct debug_client *impl_from_IDebugSymbols3(IDebugSymbols3 *iface)
256 return CONTAINING_RECORD(iface, struct debug_client, IDebugSymbols3_iface);
259 static struct debug_client *impl_from_IDebugControl2(IDebugControl2 *iface)
261 return CONTAINING_RECORD(iface, struct debug_client, IDebugControl2_iface);
264 static struct debug_client *impl_from_IDebugAdvanced(IDebugAdvanced *iface)
266 return CONTAINING_RECORD(iface, struct debug_client, IDebugAdvanced_iface);
269 static struct debug_client *impl_from_IDebugSystemObjects(IDebugSystemObjects *iface)
271 return CONTAINING_RECORD(iface, struct debug_client, IDebugSystemObjects_iface);
274 static HRESULT STDMETHODCALLTYPE debugclient_QueryInterface(IDebugClient7 *iface, REFIID riid, void **obj)
276 struct debug_client *debug_client = impl_from_IDebugClient(iface);
278 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
280 if (IsEqualIID(riid, &IID_IDebugClient) ||
281 IsEqualIID(riid, &IID_IDebugClient2) ||
282 IsEqualIID(riid, &IID_IDebugClient3) ||
283 IsEqualIID(riid, &IID_IDebugClient4) ||
284 IsEqualIID(riid, &IID_IDebugClient5) ||
285 IsEqualIID(riid, &IID_IDebugClient6) ||
286 IsEqualIID(riid, &IID_IDebugClient7) ||
287 IsEqualIID(riid, &IID_IUnknown))
289 *obj = iface;
291 else if (IsEqualIID(riid, &IID_IDebugDataSpaces))
293 *obj = &debug_client->IDebugDataSpaces_iface;
295 else if (IsEqualIID(riid, &IID_IDebugSymbols)
296 || IsEqualIID(riid, &IID_IDebugSymbols2)
297 || IsEqualIID(riid, &IID_IDebugSymbols3))
299 *obj = &debug_client->IDebugSymbols3_iface;
301 else if (IsEqualIID(riid, &IID_IDebugControl2)
302 || IsEqualIID(riid, &IID_IDebugControl))
304 *obj = &debug_client->IDebugControl2_iface;
306 else if (IsEqualIID(riid, &IID_IDebugAdvanced))
308 *obj = &debug_client->IDebugAdvanced_iface;
310 else if (IsEqualIID(riid, &IID_IDebugSystemObjects))
312 *obj = &debug_client->IDebugSystemObjects_iface;
314 else
316 WARN("Unsupported interface %s.\n", debugstr_guid(riid));
317 *obj = NULL;
318 return E_NOINTERFACE;
321 IUnknown_AddRef((IUnknown *)*obj);
322 return S_OK;
325 static ULONG STDMETHODCALLTYPE debugclient_AddRef(IDebugClient7 *iface)
327 struct debug_client *debug_client = impl_from_IDebugClient(iface);
328 ULONG refcount = InterlockedIncrement(&debug_client->refcount);
330 TRACE("%p, %d.\n", iface, refcount);
332 return refcount;
335 static void debug_target_free(struct target_process *target)
337 heap_free(target->modules.info);
338 heap_free(target);
341 static ULONG STDMETHODCALLTYPE debugclient_Release(IDebugClient7 *iface)
343 struct debug_client *debug_client = impl_from_IDebugClient(iface);
344 ULONG refcount = InterlockedDecrement(&debug_client->refcount);
345 struct target_process *cur, *cur2;
347 TRACE("%p, %d.\n", debug_client, refcount);
349 if (!refcount)
351 LIST_FOR_EACH_ENTRY_SAFE(cur, cur2, &debug_client->targets, struct target_process, entry)
353 debug_client_detach_target(cur);
354 list_remove(&cur->entry);
355 debug_target_free(cur);
357 if (debug_client->event_callbacks)
358 debug_client->event_callbacks->lpVtbl->Release(debug_client->event_callbacks);
359 heap_free(debug_client);
362 return refcount;
365 static HRESULT STDMETHODCALLTYPE debugclient_AttachKernel(IDebugClient7 *iface, ULONG flags, const char *options)
367 FIXME("%p, %#x, %s stub.\n", iface, flags, debugstr_a(options));
369 return E_NOTIMPL;
372 static HRESULT STDMETHODCALLTYPE debugclient_GetKernelConnectionOptions(IDebugClient7 *iface, char *buffer,
373 ULONG buffer_size, ULONG *options_size)
375 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, options_size);
377 return E_NOTIMPL;
380 static HRESULT STDMETHODCALLTYPE debugclient_SetKernelConnectionOptions(IDebugClient7 *iface, const char *options)
382 FIXME("%p, %s stub.\n", iface, debugstr_a(options));
384 return E_NOTIMPL;
387 static HRESULT STDMETHODCALLTYPE debugclient_StartProcessServer(IDebugClient7 *iface, ULONG flags, const char *options,
388 void *reserved)
390 FIXME("%p, %#x, %s, %p stub.\n", iface, flags, debugstr_a(options), reserved);
392 return E_NOTIMPL;
395 static HRESULT STDMETHODCALLTYPE debugclient_ConnectProcessServer(IDebugClient7 *iface, const char *remote_options,
396 ULONG64 *server)
398 FIXME("%p, %s, %p stub.\n", iface, debugstr_a(remote_options), server);
400 return E_NOTIMPL;
403 static HRESULT STDMETHODCALLTYPE debugclient_DisconnectProcessServer(IDebugClient7 *iface, ULONG64 server)
405 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(server));
407 return E_NOTIMPL;
410 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessSystemIds(IDebugClient7 *iface, ULONG64 server,
411 ULONG *ids, ULONG count, ULONG *actual_count)
413 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(server), ids, count, actual_count);
415 return E_NOTIMPL;
418 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessSystemIdByExecutableName(IDebugClient7 *iface,
419 ULONG64 server, const char *exe_name, ULONG flags, ULONG *id)
421 FIXME("%p, %s, %s, %#x, %p stub.\n", iface, wine_dbgstr_longlong(server), debugstr_a(exe_name), flags, id);
423 return E_NOTIMPL;
426 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessDescription(IDebugClient7 *iface, ULONG64 server,
427 ULONG systemid, ULONG flags, char *exe_name, ULONG exe_name_size, ULONG *actual_exe_name_size,
428 char *description, ULONG description_size, ULONG *actual_description_size)
430 FIXME("%p, %s, %u, %#x, %p, %u, %p, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(server), systemid, flags,
431 exe_name, exe_name_size, actual_exe_name_size, description, description_size, actual_description_size);
433 return E_NOTIMPL;
436 static HRESULT STDMETHODCALLTYPE debugclient_AttachProcess(IDebugClient7 *iface, ULONG64 server, ULONG pid, ULONG flags)
438 struct debug_client *debug_client = impl_from_IDebugClient(iface);
439 struct target_process *process;
441 TRACE("%p, %s, %u, %#x.\n", iface, wine_dbgstr_longlong(server), pid, flags);
443 if (server)
445 FIXME("Remote debugging is not supported.\n");
446 return E_NOTIMPL;
449 if (!(process = heap_alloc_zero(sizeof(*process))))
450 return E_OUTOFMEMORY;
452 process->pid = pid;
453 process->attach_flags = flags;
455 list_add_head(&debug_client->targets, &process->entry);
457 return S_OK;
460 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcess(IDebugClient7 *iface, ULONG64 server, char *cmdline,
461 ULONG flags)
463 FIXME("%p, %s, %s, %#x stub.\n", iface, wine_dbgstr_longlong(server), debugstr_a(cmdline), flags);
465 return E_NOTIMPL;
468 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessAndAttach(IDebugClient7 *iface, ULONG64 server, char *cmdline,
469 ULONG create_flags, ULONG pid, ULONG attach_flags)
471 FIXME("%p, %s, %s, %#x, %u, %#x stub.\n", iface, wine_dbgstr_longlong(server), debugstr_a(cmdline), create_flags,
472 pid, attach_flags);
474 return E_NOTIMPL;
477 static HRESULT STDMETHODCALLTYPE debugclient_GetProcessOptions(IDebugClient7 *iface, ULONG *options)
479 FIXME("%p, %p stub.\n", iface, options);
481 return E_NOTIMPL;
484 static HRESULT STDMETHODCALLTYPE debugclient_AddProcessOptions(IDebugClient7 *iface, ULONG options)
486 FIXME("%p, %#x stub.\n", iface, options);
488 return E_NOTIMPL;
491 static HRESULT STDMETHODCALLTYPE debugclient_RemoveProcessOptions(IDebugClient7 *iface, ULONG options)
493 FIXME("%p, %#x stub.\n", iface, options);
495 return E_NOTIMPL;
498 static HRESULT STDMETHODCALLTYPE debugclient_SetProcessOptions(IDebugClient7 *iface, ULONG options)
500 FIXME("%p, %#x stub.\n", iface, options);
502 return E_NOTIMPL;
505 static HRESULT STDMETHODCALLTYPE debugclient_OpenDumpFile(IDebugClient7 *iface, const char *filename)
507 FIXME("%p, %s stub.\n", iface, debugstr_a(filename));
509 return E_NOTIMPL;
512 static HRESULT STDMETHODCALLTYPE debugclient_WriteDumpFile(IDebugClient7 *iface, const char *filename, ULONG qualifier)
514 FIXME("%p, %s, %u stub.\n", iface, debugstr_a(filename), qualifier);
516 return E_NOTIMPL;
519 static HRESULT STDMETHODCALLTYPE debugclient_ConnectSession(IDebugClient7 *iface, ULONG flags, ULONG history_limit)
521 FIXME("%p, %#x, %u stub.\n", iface, flags, history_limit);
523 return E_NOTIMPL;
526 static HRESULT STDMETHODCALLTYPE debugclient_StartServer(IDebugClient7 *iface, const char *options)
528 FIXME("%p, %s stub.\n", iface, debugstr_a(options));
530 return E_NOTIMPL;
533 static HRESULT STDMETHODCALLTYPE debugclient_OutputServers(IDebugClient7 *iface, ULONG output_control,
534 const char *machine, ULONG flags)
536 FIXME("%p, %u, %s, %#x stub.\n", iface, output_control, debugstr_a(machine), flags);
538 return E_NOTIMPL;
541 static HRESULT STDMETHODCALLTYPE debugclient_TerminateProcesses(IDebugClient7 *iface)
543 FIXME("%p stub.\n", iface);
545 return E_NOTIMPL;
548 static HRESULT STDMETHODCALLTYPE debugclient_DetachProcesses(IDebugClient7 *iface)
550 struct debug_client *debug_client = impl_from_IDebugClient(iface);
551 struct target_process *target;
553 TRACE("%p.\n", iface);
555 LIST_FOR_EACH_ENTRY(target, &debug_client->targets, struct target_process, entry)
557 debug_client_detach_target(target);
560 return S_OK;
563 static HRESULT STDMETHODCALLTYPE debugclient_EndSession(IDebugClient7 *iface, ULONG flags)
565 FIXME("%p, %#x stub.\n", iface, flags);
567 return E_NOTIMPL;
570 static HRESULT STDMETHODCALLTYPE debugclient_GetExitCode(IDebugClient7 *iface, ULONG *code)
572 FIXME("%p, %p stub.\n", iface, code);
574 return E_NOTIMPL;
577 static HRESULT STDMETHODCALLTYPE debugclient_DispatchCallbacks(IDebugClient7 *iface, ULONG timeout)
579 FIXME("%p, %u stub.\n", iface, timeout);
581 return E_NOTIMPL;
584 static HRESULT STDMETHODCALLTYPE debugclient_ExitDispatch(IDebugClient7 *iface, IDebugClient *client)
586 FIXME("%p, %p stub.\n", iface, client);
588 return E_NOTIMPL;
591 static HRESULT STDMETHODCALLTYPE debugclient_CreateClient(IDebugClient7 *iface, IDebugClient **client)
593 FIXME("%p, %p stub.\n", iface, client);
595 return E_NOTIMPL;
598 static HRESULT STDMETHODCALLTYPE debugclient_GetInputCallbacks(IDebugClient7 *iface, IDebugInputCallbacks **callbacks)
600 FIXME("%p, %p stub.\n", iface, callbacks);
602 return E_NOTIMPL;
605 static HRESULT STDMETHODCALLTYPE debugclient_SetInputCallbacks(IDebugClient7 *iface, IDebugInputCallbacks *callbacks)
607 FIXME("%p, %p stub.\n", iface, callbacks);
609 return E_NOTIMPL;
612 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputCallbacks(IDebugClient7 *iface, IDebugOutputCallbacks **callbacks)
614 FIXME("%p, %p stub.\n", iface, callbacks);
616 return E_NOTIMPL;
619 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputCallbacks(IDebugClient7 *iface, IDebugOutputCallbacks *callbacks)
621 FIXME("%p, %p stub.\n", iface, callbacks);
623 return E_NOTIMPL;
626 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputMask(IDebugClient7 *iface, ULONG *mask)
628 FIXME("%p, %p stub.\n", iface, mask);
630 return E_NOTIMPL;
633 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputMask(IDebugClient7 *iface, ULONG mask)
635 FIXME("%p, %#x stub.\n", iface, mask);
637 return E_NOTIMPL;
640 static HRESULT STDMETHODCALLTYPE debugclient_GetOtherOutputMask(IDebugClient7 *iface, IDebugClient *client, ULONG *mask)
642 FIXME("%p, %p, %p stub.\n", iface, client, mask);
644 return E_NOTIMPL;
647 static HRESULT STDMETHODCALLTYPE debugclient_SetOtherOutputMask(IDebugClient7 *iface, IDebugClient *client, ULONG mask)
649 FIXME("%p, %p, %#x stub.\n", iface, client, mask);
651 return E_NOTIMPL;
654 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputWidth(IDebugClient7 *iface, ULONG *columns)
656 FIXME("%p, %p stub.\n", iface, columns);
658 return E_NOTIMPL;
661 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputWidth(IDebugClient7 *iface, ULONG columns)
663 FIXME("%p, %u stub.\n", iface, columns);
665 return E_NOTIMPL;
668 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputLinePrefix(IDebugClient7 *iface, char *buffer, ULONG buffer_size,
669 ULONG *prefix_size)
671 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, prefix_size);
673 return E_NOTIMPL;
676 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputLinePrefix(IDebugClient7 *iface, const char *prefix)
678 FIXME("%p, %s stub.\n", iface, debugstr_a(prefix));
680 return E_NOTIMPL;
683 static HRESULT STDMETHODCALLTYPE debugclient_GetIdentity(IDebugClient7 *iface, char *buffer, ULONG buffer_size,
684 ULONG *identity_size)
686 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, identity_size);
688 return E_NOTIMPL;
691 static HRESULT STDMETHODCALLTYPE debugclient_OutputIdentity(IDebugClient7 *iface, ULONG output_control, ULONG flags,
692 const char *format)
694 FIXME("%p, %u, %#x, %s stub.\n", iface, output_control, flags, debugstr_a(format));
696 return E_NOTIMPL;
699 static HRESULT STDMETHODCALLTYPE debugclient_GetEventCallbacks(IDebugClient7 *iface, IDebugEventCallbacks **callbacks)
701 struct debug_client *debug_client = impl_from_IDebugClient(iface);
703 TRACE("%p, %p.\n", iface, callbacks);
705 if (debug_client->event_callbacks)
707 *callbacks = debug_client->event_callbacks;
708 (*callbacks)->lpVtbl->AddRef(*callbacks);
711 return S_OK;
714 static HRESULT STDMETHODCALLTYPE debugclient_SetEventCallbacks(IDebugClient7 *iface, IDebugEventCallbacks *callbacks)
716 struct debug_client *debug_client = impl_from_IDebugClient(iface);
718 TRACE("%p, %p.\n", iface, callbacks);
720 if (debug_client->event_callbacks)
721 debug_client->event_callbacks->lpVtbl->Release(debug_client->event_callbacks);
722 if ((debug_client->event_callbacks = callbacks))
723 debug_client->event_callbacks->lpVtbl->AddRef(debug_client->event_callbacks);
725 return S_OK;
728 static HRESULT STDMETHODCALLTYPE debugclient_FlushCallbacks(IDebugClient7 *iface)
730 FIXME("%p stub.\n", iface);
732 return E_NOTIMPL;
735 static HRESULT STDMETHODCALLTYPE debugclient_WriteDumpFile2(IDebugClient7 *iface, const char *dumpfile, ULONG qualifier,
736 ULONG flags, const char *comment)
738 FIXME("%p, %s, %d, 0x%08x, %s.\n", iface, debugstr_a(dumpfile), qualifier, flags, debugstr_a(comment));
739 return E_NOTIMPL;
742 static HRESULT STDMETHODCALLTYPE debugclient_AddDumpInformationFile(IDebugClient7 *iface, const char *infofile, ULONG type)
744 FIXME("%p, %s, %d.\n", iface, debugstr_a(infofile), type);
745 return E_NOTIMPL;
748 static HRESULT STDMETHODCALLTYPE debugclient_EndProcessServer(IDebugClient7 *iface, ULONG64 server)
750 FIXME("%p, %s.\n", iface, wine_dbgstr_longlong(server));
751 return E_NOTIMPL;
754 static HRESULT STDMETHODCALLTYPE debugclient_WaitForProcessServerEnd(IDebugClient7 *iface, ULONG timeout)
756 FIXME("%p, %d.\n", iface, timeout);
757 return E_NOTIMPL;
760 static HRESULT STDMETHODCALLTYPE debugclient_IsKernelDebuggerEnabled(IDebugClient7 *iface)
762 FIXME("%p.\n", iface);
763 return E_NOTIMPL;
766 static HRESULT STDMETHODCALLTYPE debugclient_TerminateCurrentProcess(IDebugClient7 *iface)
768 FIXME("%p.\n", iface);
769 return E_NOTIMPL;
772 static HRESULT STDMETHODCALLTYPE debugclient_DetachCurrentProcess(IDebugClient7 *iface)
774 FIXME("%p.\n", iface);
775 return E_NOTIMPL;
778 static HRESULT STDMETHODCALLTYPE debugclient_AbandonCurrentProcess(IDebugClient7 *iface)
780 FIXME("%p.\n", iface);
781 return E_NOTIMPL;
784 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessSystemIdByExecutableNameWide(IDebugClient7 *iface, ULONG64 server,
785 const WCHAR *exename, ULONG flags, ULONG *id)
787 FIXME("%p, %s, %s, 0x%08x, %p.\n", iface, wine_dbgstr_longlong(server), debugstr_w(exename), flags, id);
788 return E_NOTIMPL;
791 static HRESULT STDMETHODCALLTYPE debugclient_GetRunningProcessDescriptionWide(IDebugClient7 *iface, ULONG64 server, ULONG id,
792 ULONG flags, WCHAR *exename, ULONG size, ULONG *actualsize, WCHAR *description, ULONG desc_size, ULONG *actual_desc_size)
794 FIXME("%p, %s, %d, 0x%08x, %s, %d, %p, %s, %d, %p.\n", iface, wine_dbgstr_longlong(server), id, flags, debugstr_w(exename), size,
795 actualsize, debugstr_w(description), desc_size, actual_desc_size );
796 return E_NOTIMPL;
799 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessWide(IDebugClient7 *iface, ULONG64 server, WCHAR *commandline, ULONG flags)
801 FIXME("%p, %s, %s, 0x%08x.\n", iface, wine_dbgstr_longlong(server), debugstr_w(commandline), flags);
802 return E_NOTIMPL;
805 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessAndAttachWide(IDebugClient7 *iface, ULONG64 server, WCHAR *commandline,
806 ULONG flags, ULONG processid, ULONG attachflags)
808 FIXME("%p, %s, %s, 0x%08x, %d, 0x%08x.\n", iface, wine_dbgstr_longlong(server), debugstr_w(commandline), flags, processid, attachflags);
809 return E_NOTIMPL;
812 static HRESULT STDMETHODCALLTYPE debugclient_OpenDumpFileWide(IDebugClient7 *iface, const WCHAR *filename, ULONG64 handle)
814 FIXME("%p, %s, %s.\n", iface, debugstr_w(filename), wine_dbgstr_longlong(handle));
815 return E_NOTIMPL;
818 static HRESULT STDMETHODCALLTYPE debugclient_WriteDumpFileWide(IDebugClient7 *iface, const WCHAR *filename, ULONG64 handle,
819 ULONG qualifier, ULONG flags, const WCHAR *comment)
821 FIXME("%p, %s, %s, %d, 0x%08x, %s.\n", iface, debugstr_w(filename), wine_dbgstr_longlong(handle),
822 qualifier, flags, debugstr_w(comment));
823 return E_NOTIMPL;
826 static HRESULT STDMETHODCALLTYPE debugclient_AddDumpInformationFileWide(IDebugClient7 *iface, const WCHAR *filename,
827 ULONG64 handle, ULONG type)
829 FIXME("%p, %s, %s, %d.\n", iface, debugstr_w(filename), wine_dbgstr_longlong(handle), type);
830 return E_NOTIMPL;
833 static HRESULT STDMETHODCALLTYPE debugclient_GetNumberDumpFiles(IDebugClient7 *iface, ULONG *count)
835 FIXME("%p, %p.\n", iface, count);
836 return E_NOTIMPL;
839 static HRESULT STDMETHODCALLTYPE debugclient_GetDumpFile(IDebugClient7 *iface, ULONG index, char *buffer, ULONG buf_size,
840 ULONG *name_size, ULONG64 *handle, ULONG *type)
842 FIXME("%p, %d, %p, %d, %p, %p, %p.\n", iface, index, buffer, buf_size, name_size, handle, type);
843 return E_NOTIMPL;
846 static HRESULT STDMETHODCALLTYPE debugclient_GetDumpFileWide(IDebugClient7 *iface, ULONG index, WCHAR *buffer, ULONG buf_size,
847 ULONG *name_size, ULONG64 *handle, ULONG *type)
849 FIXME("%p, %d, %p, %d, %p, %p, %p.\n", iface, index, buffer, buf_size, name_size, handle, type);
850 return E_NOTIMPL;
853 static HRESULT STDMETHODCALLTYPE debugclient_AttachKernelWide(IDebugClient7 *iface, ULONG flags, const WCHAR *options)
855 FIXME("%p, 0x%08x, %s.\n", iface, flags, debugstr_w(options));
856 return E_NOTIMPL;
859 static HRESULT STDMETHODCALLTYPE debugclient_GetKernelConnectionOptionsWide(IDebugClient7 *iface, WCHAR *buffer,
860 ULONG buf_size, ULONG *size)
862 FIXME("%p, %p, %d, %p.\n", iface, buffer, buf_size, size);
863 return E_NOTIMPL;
866 static HRESULT STDMETHODCALLTYPE debugclient_SetKernelConnectionOptionsWide(IDebugClient7 *iface, const WCHAR *options)
868 FIXME("%p, %p.\n", iface, options);
869 return E_NOTIMPL;
872 static HRESULT STDMETHODCALLTYPE debugclient_StartProcessServerWide(IDebugClient7 *iface, ULONG flags, const WCHAR *options, void *reserved)
874 FIXME("%p, 0x%08x, %s, %p.\n", iface, flags, debugstr_w(options), reserved);
875 return E_NOTIMPL;
878 static HRESULT STDMETHODCALLTYPE debugclient_ConnectProcessServerWide(IDebugClient7 *iface, const WCHAR *options, ULONG64 *server)
880 FIXME("%p, %s, %p.\n", iface, debugstr_w(options), server);
881 return E_NOTIMPL;
884 static HRESULT STDMETHODCALLTYPE debugclient_StartServerWide(IDebugClient7 *iface, const WCHAR *options)
886 FIXME("%p, %s.\n", iface, debugstr_w(options));
887 return E_NOTIMPL;
890 static HRESULT STDMETHODCALLTYPE debugclient_OutputServersWide(IDebugClient7 *iface, ULONG control, const WCHAR *machine, ULONG flags)
892 FIXME("%p, %d, %s, 0x%08x.\n", iface, control, debugstr_w(machine), flags);
893 return E_NOTIMPL;
896 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputCallbacksWide(IDebugClient7 *iface, IDebugOutputCallbacksWide **callbacks)
898 FIXME("%p, %p.\n", iface, callbacks);
899 return E_NOTIMPL;
902 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputCallbacksWide(IDebugClient7 *iface, IDebugOutputCallbacksWide *callbacks)
904 FIXME("%p, %p.\n", iface, callbacks);
905 return E_NOTIMPL;
908 static HRESULT STDMETHODCALLTYPE debugclient_GetOutputLinePrefixWide(IDebugClient7 *iface, WCHAR *buffer, ULONG buf_size, ULONG *size)
910 FIXME("%p, %p, %d, %p.\n", iface, buffer, buf_size, size);
911 return E_NOTIMPL;
914 static HRESULT STDMETHODCALLTYPE debugclient_SetOutputLinePrefixWide(IDebugClient7 *iface, const WCHAR *prefix)
916 FIXME("%p, %s.\n", iface, debugstr_w(prefix));
917 return E_NOTIMPL;
920 static HRESULT STDMETHODCALLTYPE debugclient_GetIdentityWide(IDebugClient7 *iface, WCHAR *buffer, ULONG buf_size, ULONG *identity)
922 FIXME("%p, %p, %d, %p.\n", iface, buffer, buf_size, identity);
923 return E_NOTIMPL;
926 static HRESULT STDMETHODCALLTYPE debugclient_OutputIdentityWide(IDebugClient7 *iface, ULONG control, ULONG flags, const WCHAR *format)
928 FIXME("%p, %d, 0x%08x, %s.\n", iface, control, flags, debugstr_w(format));
929 return E_NOTIMPL;
932 static HRESULT STDMETHODCALLTYPE debugclient_GetEventCallbacksWide(IDebugClient7 *iface, IDebugEventCallbacksWide **callbacks)
934 FIXME("%p, %p .\n", iface, callbacks);
935 return E_NOTIMPL;
938 static HRESULT STDMETHODCALLTYPE debugclient_SetEventCallbacksWide(IDebugClient7 *iface, IDebugEventCallbacksWide *callbacks)
940 FIXME("%p .\n", iface);
941 return E_NOTIMPL;
944 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcess2(IDebugClient7 *iface, ULONG64 server, char *command, void *options,
945 ULONG buf_size, const char *initial, const char *environment)
947 FIXME("%p %s, %s, %p, %d, %s, %s.\n", iface, wine_dbgstr_longlong(server), debugstr_a(command), options,
948 buf_size, debugstr_a(initial), debugstr_a(environment));
949 return E_NOTIMPL;
952 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcess2Wide(IDebugClient7 *iface, ULONG64 server, WCHAR *command, void *options,
953 ULONG size, const WCHAR *initial, const WCHAR *environment)
955 FIXME("%p %s, %s, %p, %d, %s, %s.\n", iface, wine_dbgstr_longlong(server), debugstr_w(command), options,
956 size, debugstr_w(initial), debugstr_w(environment));
957 return E_NOTIMPL;
960 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessAndAttach2(IDebugClient7 *iface, ULONG64 server, char *command,
961 void *options, ULONG buf_size, const char *initial, const char *environment, ULONG processid, ULONG flags)
963 FIXME("%p %s, %s, %p, %d, %s, %s, %d, 0x%08x.\n", iface, wine_dbgstr_longlong(server), debugstr_a(command), options,
964 buf_size, debugstr_a(initial), debugstr_a(environment), processid, flags);
965 return E_NOTIMPL;
968 static HRESULT STDMETHODCALLTYPE debugclient_CreateProcessAndAttach2Wide(IDebugClient7 *iface, ULONG64 server, WCHAR *command,
969 void *buffer, ULONG buf_size, const WCHAR *initial, const WCHAR *environment, ULONG processid, ULONG flags)
971 FIXME("%p %s, %s, %p, %d, %s, %s, %d, 0x%08x.\n", iface, wine_dbgstr_longlong(server), debugstr_w(command), buffer,
972 buf_size, debugstr_w(initial), debugstr_w(environment), processid, flags);
973 return E_NOTIMPL;
976 static HRESULT STDMETHODCALLTYPE debugclient_PushOutputLinePrefix(IDebugClient7 *iface, const char *prefix, ULONG64 *handle)
978 FIXME("%p, %p.\n", iface, handle);
979 return E_NOTIMPL;
982 static HRESULT STDMETHODCALLTYPE debugclient_PushOutputLinePrefixWide(IDebugClient7 *iface, const WCHAR *prefix, ULONG64 *handle)
984 FIXME("%p, %p.\n", iface, handle);
985 return E_NOTIMPL;
988 static HRESULT STDMETHODCALLTYPE debugclient_PopOutputLinePrefix(IDebugClient7 *iface, ULONG64 handle)
990 FIXME("%p, %s.\n", iface, wine_dbgstr_longlong(handle));
991 return E_NOTIMPL;
994 static HRESULT STDMETHODCALLTYPE debugclient_GetNumberInputCallbacks(IDebugClient7 *iface, ULONG *count)
996 FIXME("%p, %p.\n", iface, count);
997 return E_NOTIMPL;
1000 static HRESULT STDMETHODCALLTYPE debugclient_GetNumberOutputCallbacks(IDebugClient7 *iface, ULONG *count)
1002 FIXME("%p, %p.\n", iface, count);
1003 return E_NOTIMPL;
1006 static HRESULT STDMETHODCALLTYPE debugclient_GetNumberEventCallbacks(IDebugClient7 *iface, ULONG flags, ULONG *count)
1008 FIXME("%p, 0x%08x, %p.\n", iface, flags, count);
1009 return E_NOTIMPL;
1012 static HRESULT STDMETHODCALLTYPE debugclient_GetQuitLockString(IDebugClient7 *iface, char *buffer, ULONG buf_size, ULONG *size)
1014 FIXME("%p, %s, %d, %p.\n", iface, debugstr_a(buffer), buf_size, size);
1015 return E_NOTIMPL;
1018 static HRESULT STDMETHODCALLTYPE debugclient_SetQuitLockString(IDebugClient7 *iface, char *string)
1020 FIXME("%p, %s.\n", iface, debugstr_a(string));
1021 return E_NOTIMPL;
1024 static HRESULT STDMETHODCALLTYPE debugclient_GetQuitLockStringWide(IDebugClient7 *iface, WCHAR *buffer, ULONG buf_size, ULONG *size)
1026 FIXME("%p, %s, %d, %p.\n", iface, debugstr_w(buffer), buf_size, size);
1027 return E_NOTIMPL;
1030 static HRESULT STDMETHODCALLTYPE debugclient_SetQuitLockStringWide(IDebugClient7 *iface, const WCHAR *string)
1032 FIXME("%p, %s.\n", iface, debugstr_w(string));
1033 return E_NOTIMPL;
1036 static HRESULT STDMETHODCALLTYPE debugclient_SetEventContextCallbacks(IDebugClient7 *iface, IDebugEventContextCallbacks *callbacks)
1038 FIXME("%p, %p.\n", iface, callbacks);
1039 return E_NOTIMPL;
1042 static HRESULT STDMETHODCALLTYPE debugclient_SetClientContext(IDebugClient7 *iface, void *context, ULONG size)
1044 FIXME("%p, %p, %d.\n", iface, context, size);
1045 return E_NOTIMPL;
1048 static const IDebugClient7Vtbl debugclientvtbl =
1050 debugclient_QueryInterface,
1051 debugclient_AddRef,
1052 debugclient_Release,
1053 debugclient_AttachKernel,
1054 debugclient_GetKernelConnectionOptions,
1055 debugclient_SetKernelConnectionOptions,
1056 debugclient_StartProcessServer,
1057 debugclient_ConnectProcessServer,
1058 debugclient_DisconnectProcessServer,
1059 debugclient_GetRunningProcessSystemIds,
1060 debugclient_GetRunningProcessSystemIdByExecutableName,
1061 debugclient_GetRunningProcessDescription,
1062 debugclient_AttachProcess,
1063 debugclient_CreateProcess,
1064 debugclient_CreateProcessAndAttach,
1065 debugclient_GetProcessOptions,
1066 debugclient_AddProcessOptions,
1067 debugclient_RemoveProcessOptions,
1068 debugclient_SetProcessOptions,
1069 debugclient_OpenDumpFile,
1070 debugclient_WriteDumpFile,
1071 debugclient_ConnectSession,
1072 debugclient_StartServer,
1073 debugclient_OutputServers,
1074 debugclient_TerminateProcesses,
1075 debugclient_DetachProcesses,
1076 debugclient_EndSession,
1077 debugclient_GetExitCode,
1078 debugclient_DispatchCallbacks,
1079 debugclient_ExitDispatch,
1080 debugclient_CreateClient,
1081 debugclient_GetInputCallbacks,
1082 debugclient_SetInputCallbacks,
1083 debugclient_GetOutputCallbacks,
1084 debugclient_SetOutputCallbacks,
1085 debugclient_GetOutputMask,
1086 debugclient_SetOutputMask,
1087 debugclient_GetOtherOutputMask,
1088 debugclient_SetOtherOutputMask,
1089 debugclient_GetOutputWidth,
1090 debugclient_SetOutputWidth,
1091 debugclient_GetOutputLinePrefix,
1092 debugclient_SetOutputLinePrefix,
1093 debugclient_GetIdentity,
1094 debugclient_OutputIdentity,
1095 debugclient_GetEventCallbacks,
1096 debugclient_SetEventCallbacks,
1097 debugclient_FlushCallbacks,
1098 /* IDebugClient2 */
1099 debugclient_WriteDumpFile2,
1100 debugclient_AddDumpInformationFile,
1101 debugclient_EndProcessServer,
1102 debugclient_WaitForProcessServerEnd,
1103 debugclient_IsKernelDebuggerEnabled,
1104 debugclient_TerminateCurrentProcess,
1105 debugclient_DetachCurrentProcess,
1106 debugclient_AbandonCurrentProcess,
1107 /* IDebugClient3 */
1108 debugclient_GetRunningProcessSystemIdByExecutableNameWide,
1109 debugclient_GetRunningProcessDescriptionWide,
1110 debugclient_CreateProcessWide,
1111 debugclient_CreateProcessAndAttachWide,
1112 /* IDebugClient4 */
1113 debugclient_OpenDumpFileWide,
1114 debugclient_WriteDumpFileWide,
1115 debugclient_AddDumpInformationFileWide,
1116 debugclient_GetNumberDumpFiles,
1117 debugclient_GetDumpFile,
1118 debugclient_GetDumpFileWide,
1119 /* IDebugClient5 */
1120 debugclient_AttachKernelWide,
1121 debugclient_GetKernelConnectionOptionsWide,
1122 debugclient_SetKernelConnectionOptionsWide,
1123 debugclient_StartProcessServerWide,
1124 debugclient_ConnectProcessServerWide,
1125 debugclient_StartServerWide,
1126 debugclient_OutputServersWide,
1127 debugclient_GetOutputCallbacksWide,
1128 debugclient_SetOutputCallbacksWide,
1129 debugclient_GetOutputLinePrefixWide,
1130 debugclient_SetOutputLinePrefixWide,
1131 debugclient_GetIdentityWide,
1132 debugclient_OutputIdentityWide,
1133 debugclient_GetEventCallbacksWide,
1134 debugclient_SetEventCallbacksWide,
1135 debugclient_CreateProcess2,
1136 debugclient_CreateProcess2Wide,
1137 debugclient_CreateProcessAndAttach2,
1138 debugclient_CreateProcessAndAttach2Wide,
1139 debugclient_PushOutputLinePrefix,
1140 debugclient_PushOutputLinePrefixWide,
1141 debugclient_PopOutputLinePrefix,
1142 debugclient_GetNumberInputCallbacks,
1143 debugclient_GetNumberOutputCallbacks,
1144 debugclient_GetNumberEventCallbacks,
1145 debugclient_GetQuitLockString,
1146 debugclient_SetQuitLockString,
1147 debugclient_GetQuitLockStringWide,
1148 debugclient_SetQuitLockStringWide,
1149 /* IDebugClient6 */
1150 debugclient_SetEventContextCallbacks,
1151 /* IDebugClient7 */
1152 debugclient_SetClientContext,
1155 static HRESULT STDMETHODCALLTYPE debugdataspaces_QueryInterface(IDebugDataSpaces *iface, REFIID riid, void **obj)
1157 struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
1158 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1159 return IUnknown_QueryInterface(unk, riid, obj);
1162 static ULONG STDMETHODCALLTYPE debugdataspaces_AddRef(IDebugDataSpaces *iface)
1164 struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
1165 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1166 return IUnknown_AddRef(unk);
1169 static ULONG STDMETHODCALLTYPE debugdataspaces_Release(IDebugDataSpaces *iface)
1171 struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
1172 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1173 return IUnknown_Release(unk);
1176 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadVirtual(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
1177 ULONG buffer_size, ULONG *read_len)
1179 struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
1180 static struct target_process *target;
1181 HRESULT hr = S_OK;
1182 SIZE_T length;
1184 TRACE("%p, %s, %p, %u, %p.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
1186 if (!(target = debug_client_get_target(debug_client)))
1187 return E_UNEXPECTED;
1189 if (ReadProcessMemory(target->handle, (const void *)(ULONG_PTR)offset, buffer, buffer_size, &length))
1191 if (read_len)
1192 *read_len = length;
1194 else
1196 hr = HRESULT_FROM_WIN32(GetLastError());
1197 WARN("Failed to read process memory %#x.\n", hr);
1200 return hr;
1203 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteVirtual(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
1204 ULONG buffer_size, ULONG *written)
1206 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
1208 return E_NOTIMPL;
1211 static HRESULT STDMETHODCALLTYPE debugdataspaces_SearchVirtual(IDebugDataSpaces *iface, ULONG64 offset, ULONG64 length,
1212 void *pattern, ULONG pattern_size, ULONG pattern_granularity, ULONG64 *ret_offset)
1214 FIXME("%p, %s, %s, %p, %u, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(length),
1215 pattern, pattern_size, pattern_granularity, ret_offset);
1217 return E_NOTIMPL;
1220 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadVirtualUncached(IDebugDataSpaces *iface, ULONG64 offset,
1221 void *buffer, ULONG buffer_size, ULONG *read_len)
1223 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
1225 return E_NOTIMPL;
1228 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteVirtualUncached(IDebugDataSpaces *iface, ULONG64 offset,
1229 void *buffer, ULONG buffer_size, ULONG *written)
1231 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
1233 return E_NOTIMPL;
1236 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadPointersVirtual(IDebugDataSpaces *iface, ULONG count,
1237 ULONG64 offset, ULONG64 *pointers)
1239 FIXME("%p, %u, %s, %p stub.\n", iface, count, wine_dbgstr_longlong(offset), pointers);
1241 return E_NOTIMPL;
1244 static HRESULT STDMETHODCALLTYPE debugdataspaces_WritePointersVirtual(IDebugDataSpaces *iface, ULONG count,
1245 ULONG64 offset, ULONG64 *pointers)
1247 FIXME("%p, %u, %s, %p stub.\n", iface, count, wine_dbgstr_longlong(offset), pointers);
1249 return E_NOTIMPL;
1252 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadPhysical(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
1253 ULONG buffer_size, ULONG *read_len)
1255 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
1257 return E_NOTIMPL;
1260 static HRESULT STDMETHODCALLTYPE debugdataspaces_WritePhysical(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
1261 ULONG buffer_size, ULONG *written)
1263 FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
1265 return E_NOTIMPL;
1268 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadControl(IDebugDataSpaces *iface, ULONG processor, ULONG64 offset,
1269 void *buffer, ULONG buffer_size, ULONG *read_len)
1271 FIXME("%p, %u, %s, %p, %u, %p stub.\n", iface, processor, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
1273 return E_NOTIMPL;
1276 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteControl(IDebugDataSpaces *iface, ULONG processor, ULONG64 offset,
1277 void *buffer, ULONG buffer_size, ULONG *written)
1279 FIXME("%p, %u, %s, %p, %u, %p stub.\n", iface, processor, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
1281 return E_NOTIMPL;
1284 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadIo(IDebugDataSpaces *iface, ULONG type, ULONG bus_number,
1285 ULONG address_space, ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *read_len)
1287 FIXME("%p, %u, %u, %u, %s, %p, %u, %p stub.\n", iface, type, bus_number, address_space, wine_dbgstr_longlong(offset),
1288 buffer, buffer_size, read_len);
1290 return E_NOTIMPL;
1293 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteIo(IDebugDataSpaces *iface, ULONG type, ULONG bus_number,
1294 ULONG address_space, ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *written)
1296 FIXME("%p, %u, %u, %u, %s, %p, %u, %p stub.\n", iface, type, bus_number, address_space, wine_dbgstr_longlong(offset),
1297 buffer, buffer_size, written);
1299 return E_NOTIMPL;
1302 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadMsr(IDebugDataSpaces *iface, ULONG msr, ULONG64 *value)
1304 FIXME("%p, %u, %p stub.\n", iface, msr, value);
1306 return E_NOTIMPL;
1309 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteMsr(IDebugDataSpaces *iface, ULONG msr, ULONG64 value)
1311 FIXME("%p, %u, %s stub.\n", iface, msr, wine_dbgstr_longlong(value));
1313 return E_NOTIMPL;
1316 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadBusData(IDebugDataSpaces *iface, ULONG data_type,
1317 ULONG bus_number, ULONG slot_number, ULONG offset, void *buffer, ULONG buffer_size, ULONG *read_len)
1319 FIXME("%p, %u, %u, %u, %u, %p, %u, %p stub.\n", iface, data_type, bus_number, slot_number, offset, buffer,
1320 buffer_size, read_len);
1322 return E_NOTIMPL;
1325 static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteBusData(IDebugDataSpaces *iface, ULONG data_type,
1326 ULONG bus_number, ULONG slot_number, ULONG offset, void *buffer, ULONG buffer_size, ULONG *written)
1328 FIXME("%p, %u, %u, %u, %u, %p, %u, %p stub.\n", iface, data_type, bus_number, slot_number, offset, buffer,
1329 buffer_size, written);
1331 return E_NOTIMPL;
1334 static HRESULT STDMETHODCALLTYPE debugdataspaces_CheckLowMemory(IDebugDataSpaces *iface)
1336 FIXME("%p stub.\n", iface);
1338 return E_NOTIMPL;
1341 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadDebuggerData(IDebugDataSpaces *iface, ULONG index, void *buffer,
1342 ULONG buffer_size, ULONG *data_size)
1344 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, data_size);
1346 return E_NOTIMPL;
1349 static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadProcessorSystemData(IDebugDataSpaces *iface, ULONG processor,
1350 ULONG index, void *buffer, ULONG buffer_size, ULONG *data_size)
1352 FIXME("%p, %u, %u, %p, %u, %p stub.\n", iface, processor, index, buffer, buffer_size, data_size);
1354 return E_NOTIMPL;
1357 static const IDebugDataSpacesVtbl debugdataspacesvtbl =
1359 debugdataspaces_QueryInterface,
1360 debugdataspaces_AddRef,
1361 debugdataspaces_Release,
1362 debugdataspaces_ReadVirtual,
1363 debugdataspaces_WriteVirtual,
1364 debugdataspaces_SearchVirtual,
1365 debugdataspaces_ReadVirtualUncached,
1366 debugdataspaces_WriteVirtualUncached,
1367 debugdataspaces_ReadPointersVirtual,
1368 debugdataspaces_WritePointersVirtual,
1369 debugdataspaces_ReadPhysical,
1370 debugdataspaces_WritePhysical,
1371 debugdataspaces_ReadControl,
1372 debugdataspaces_WriteControl,
1373 debugdataspaces_ReadIo,
1374 debugdataspaces_WriteIo,
1375 debugdataspaces_ReadMsr,
1376 debugdataspaces_WriteMsr,
1377 debugdataspaces_ReadBusData,
1378 debugdataspaces_WriteBusData,
1379 debugdataspaces_CheckLowMemory,
1380 debugdataspaces_ReadDebuggerData,
1381 debugdataspaces_ReadProcessorSystemData,
1384 static HRESULT STDMETHODCALLTYPE debugsymbols_QueryInterface(IDebugSymbols3 *iface, REFIID riid, void **obj)
1386 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1387 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1388 return IUnknown_QueryInterface(unk, riid, obj);
1391 static ULONG STDMETHODCALLTYPE debugsymbols_AddRef(IDebugSymbols3 *iface)
1393 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1394 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1395 return IUnknown_AddRef(unk);
1398 static ULONG STDMETHODCALLTYPE debugsymbols_Release(IDebugSymbols3 *iface)
1400 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1401 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
1402 return IUnknown_Release(unk);
1405 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolOptions(IDebugSymbols3 *iface, ULONG *options)
1407 FIXME("%p, %p stub.\n", iface, options);
1409 return E_NOTIMPL;
1412 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSymbolOptions(IDebugSymbols3 *iface, ULONG options)
1414 FIXME("%p, %#x stub.\n", iface, options);
1416 return E_NOTIMPL;
1419 static HRESULT STDMETHODCALLTYPE debugsymbols_RemoveSymbolOptions(IDebugSymbols3 *iface, ULONG options)
1421 FIXME("%p, %#x stub.\n", iface, options);
1423 return E_NOTIMPL;
1426 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSymbolOptions(IDebugSymbols3 *iface, ULONG options)
1428 FIXME("%p, %#x stub.\n", iface, options);
1430 return E_NOTIMPL;
1433 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNameByOffset(IDebugSymbols3 *iface, ULONG64 offset, char *buffer,
1434 ULONG buffer_size, ULONG *name_size, ULONG64 *displacement)
1436 FIXME("%p, %s, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size,
1437 name_size, displacement);
1439 return E_NOTIMPL;
1442 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetByName(IDebugSymbols3 *iface, const char *symbol,
1443 ULONG64 *offset)
1445 FIXME("%p, %s, %p stub.\n", iface, debugstr_a(symbol), offset);
1447 return E_NOTIMPL;
1450 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNearNameByOffset(IDebugSymbols3 *iface, ULONG64 offset, LONG delta,
1451 char *buffer, ULONG buffer_size, ULONG *name_size, ULONG64 *displacement)
1453 FIXME("%p, %s, %d, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), delta, buffer, buffer_size,
1454 name_size, displacement);
1456 return E_NOTIMPL;
1459 static HRESULT STDMETHODCALLTYPE debugsymbols_GetLineByOffset(IDebugSymbols3 *iface, ULONG64 offset, ULONG *line,
1460 char *buffer, ULONG buffer_size, ULONG *file_size, ULONG64 *displacement)
1462 FIXME("%p, %s, %p, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), line, buffer, buffer_size,
1463 file_size, displacement);
1465 return E_NOTIMPL;
1468 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetByLine(IDebugSymbols3 *iface, ULONG line, const char *file,
1469 ULONG64 *offset)
1471 FIXME("%p, %u, %s, %p stub.\n", iface, line, debugstr_a(file), offset);
1473 return E_NOTIMPL;
1476 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNumberModules(IDebugSymbols3 *iface, ULONG *loaded, ULONG *unloaded)
1478 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1479 static struct target_process *target;
1480 HRESULT hr;
1482 TRACE("%p, %p, %p.\n", iface, loaded, unloaded);
1484 if (!(target = debug_client_get_target(debug_client)))
1485 return E_UNEXPECTED;
1487 if (FAILED(hr = debug_target_init_modules_info(target)))
1488 return hr;
1490 *loaded = target->modules.loaded;
1491 *unloaded = target->modules.unloaded;
1493 return S_OK;
1496 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByIndex(IDebugSymbols3 *iface, ULONG index, ULONG64 *base)
1498 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1499 const struct module_info *info;
1500 struct target_process *target;
1502 TRACE("%p, %u, %p.\n", iface, index, base);
1504 if (!(target = debug_client_get_target(debug_client)))
1505 return E_UNEXPECTED;
1507 if (!(info = debug_target_get_module_info(target, index)))
1508 return E_INVALIDARG;
1510 *base = info->params.Base;
1512 return S_OK;
1515 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByModuleName(IDebugSymbols3 *iface, const char *name,
1516 ULONG start_index, ULONG *index, ULONG64 *base)
1518 FIXME("%p, %s, %u, %p, %p stub.\n", iface, debugstr_a(name), start_index, index, base);
1520 return E_NOTIMPL;
1523 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByOffset(IDebugSymbols3 *iface, ULONG64 offset,
1524 ULONG start_index, ULONG *index, ULONG64 *base)
1526 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1527 static struct target_process *target;
1528 const struct module_info *info;
1530 TRACE("%p, %s, %u, %p, %p.\n", iface, wine_dbgstr_longlong(offset), start_index, index, base);
1532 if (!(target = debug_client_get_target(debug_client)))
1533 return E_UNEXPECTED;
1535 while ((info = debug_target_get_module_info(target, start_index)))
1537 if (offset >= info->params.Base && offset < info->params.Base + info->params.Size)
1539 if (index)
1540 *index = start_index;
1541 if (base)
1542 *base = info->params.Base;
1543 return S_OK;
1546 start_index++;
1549 return E_INVALIDARG;
1552 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleNames(IDebugSymbols3 *iface, ULONG index, ULONG64 base,
1553 char *image_name, ULONG image_name_buffer_size, ULONG *image_name_size, char *module_name,
1554 ULONG module_name_buffer_size, ULONG *module_name_size, char *loaded_image_name,
1555 ULONG loaded_image_name_buffer_size, ULONG *loaded_image_size)
1557 FIXME("%p, %u, %s, %p, %u, %p, %p, %u, %p, %p, %u, %p stub.\n", iface, index, wine_dbgstr_longlong(base),
1558 image_name, image_name_buffer_size, image_name_size, module_name, module_name_buffer_size,
1559 module_name_size, loaded_image_name, loaded_image_name_buffer_size, loaded_image_size);
1561 return E_NOTIMPL;
1564 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleParameters(IDebugSymbols3 *iface, ULONG count, ULONG64 *bases,
1565 ULONG start, DEBUG_MODULE_PARAMETERS *params)
1567 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1568 const struct module_info *info;
1569 struct target_process *target;
1570 unsigned int i;
1572 TRACE("%p, %u, %p, %u, %p.\n", iface, count, bases, start, params);
1574 if (!(target = debug_client_get_target(debug_client)))
1575 return E_UNEXPECTED;
1577 if (bases)
1579 for (i = 0; i < count; ++i)
1581 if ((info = debug_target_get_module_info_by_base(target, bases[i])))
1583 params[i] = info->params;
1585 else
1587 memset(&params[i], 0, sizeof(*params));
1588 params[i].Base = DEBUG_INVALID_OFFSET;
1592 else
1594 for (i = start; i < start + count; ++i)
1596 if (!(info = debug_target_get_module_info(target, i)))
1597 return E_INVALIDARG;
1598 params[i] = info->params;
1602 return S_OK;
1605 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolModule(IDebugSymbols3 *iface, const char *symbol, ULONG64 *base)
1607 FIXME("%p, %s, %p stub.\n", iface, debugstr_a(symbol), base);
1609 return E_NOTIMPL;
1612 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeName(IDebugSymbols3 *iface, ULONG64 base, ULONG type_id,
1613 char *buffer, ULONG buffer_size, ULONG *name_size)
1615 FIXME("%p, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(base), type_id, buffer,
1616 buffer_size, name_size);
1618 return E_NOTIMPL;
1621 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeId(IDebugSymbols3 *iface, ULONG64 base, const char *name,
1622 ULONG *type_id)
1624 FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(base), debugstr_a(name), type_id);
1626 return E_NOTIMPL;
1629 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeSize(IDebugSymbols3 *iface, ULONG64 base, ULONG type_id,
1630 ULONG *size)
1632 FIXME("%p, %s, %u, %p stub.\n", iface, wine_dbgstr_longlong(base), type_id, size);
1634 return E_NOTIMPL;
1637 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldOffset(IDebugSymbols3 *iface, ULONG64 base, ULONG type_id,
1638 const char *field, ULONG *offset)
1640 FIXME("%p, %s, %u, %s, %p stub.\n", iface, wine_dbgstr_longlong(base), type_id, debugstr_a(field), offset);
1642 return E_NOTIMPL;
1645 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolTypeId(IDebugSymbols3 *iface, const char *symbol, ULONG *type_id,
1646 ULONG64 *base)
1648 FIXME("%p, %s, %p, %p stub.\n", iface, debugstr_a(symbol), type_id, base);
1650 return E_NOTIMPL;
1653 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetTypeId(IDebugSymbols3 *iface, ULONG64 offset, ULONG *type_id,
1654 ULONG64 *base)
1656 FIXME("%p, %s, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), type_id, base);
1658 return E_NOTIMPL;
1661 static HRESULT STDMETHODCALLTYPE debugsymbols_ReadTypedDataVirtual(IDebugSymbols3 *iface, ULONG64 offset, ULONG64 base,
1662 ULONG type_id, void *buffer, ULONG buffer_size, ULONG *read_len)
1664 FIXME("%p, %s, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(base),
1665 type_id, buffer, buffer_size, read_len);
1667 return E_NOTIMPL;
1670 static HRESULT STDMETHODCALLTYPE debugsymbols_WriteTypedDataVirtual(IDebugSymbols3 *iface, ULONG64 offset, ULONG64 base,
1671 ULONG type_id, void *buffer, ULONG buffer_size, ULONG *written)
1673 FIXME("%p, %s, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(base),
1674 type_id, buffer, buffer_size, written);
1676 return E_NOTIMPL;
1679 static HRESULT STDMETHODCALLTYPE debugsymbols_OutputTypedDataVirtual(IDebugSymbols3 *iface, ULONG output_control,
1680 ULONG64 offset, ULONG64 base, ULONG type_id, ULONG flags)
1682 FIXME("%p, %#x, %s, %s, %u, %#x stub.\n", iface, output_control, wine_dbgstr_longlong(offset),
1683 wine_dbgstr_longlong(base), type_id, flags);
1685 return E_NOTIMPL;
1688 static HRESULT STDMETHODCALLTYPE debugsymbols_ReadTypedDataPhysical(IDebugSymbols3 *iface, ULONG64 offset, ULONG64 base,
1689 ULONG type_id, void *buffer, ULONG buffer_size, ULONG *read_len)
1691 FIXME("%p, %s, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(base),
1692 type_id, buffer, buffer_size, read_len);
1694 return E_NOTIMPL;
1697 static HRESULT STDMETHODCALLTYPE debugsymbols_WriteTypedDataPhysical(IDebugSymbols3 *iface, ULONG64 offset,
1698 ULONG64 base, ULONG type_id, void *buffer, ULONG buffer_size, ULONG *written)
1700 FIXME("%p, %s, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(base),
1701 type_id, buffer, buffer_size, written);
1703 return E_NOTIMPL;
1706 static HRESULT STDMETHODCALLTYPE debugsymbols_OutputTypedDataPhysical(IDebugSymbols3 *iface, ULONG output_control,
1707 ULONG64 offset, ULONG64 base, ULONG type_id, ULONG flags)
1709 FIXME("%p, %#x, %s, %s, %u, %#x stub.\n", iface, output_control, wine_dbgstr_longlong(offset),
1710 wine_dbgstr_longlong(base), type_id, flags);
1712 return E_NOTIMPL;
1715 static HRESULT STDMETHODCALLTYPE debugsymbols_GetScope(IDebugSymbols3 *iface, ULONG64 *instr_offset,
1716 DEBUG_STACK_FRAME *frame, void *scope_context, ULONG scope_context_size)
1718 FIXME("%p, %p, %p, %p, %u stub.\n", iface, instr_offset, frame, scope_context, scope_context_size);
1720 return E_NOTIMPL;
1723 static HRESULT STDMETHODCALLTYPE debugsymbols_SetScope(IDebugSymbols3 *iface, ULONG64 instr_offset,
1724 DEBUG_STACK_FRAME *frame, void *scope_context, ULONG scope_context_size)
1726 FIXME("%p, %s, %p, %p, %u stub.\n", iface, wine_dbgstr_longlong(instr_offset), frame, scope_context,
1727 scope_context_size);
1729 return E_NOTIMPL;
1732 static HRESULT STDMETHODCALLTYPE debugsymbols_ResetScope(IDebugSymbols3 *iface)
1734 FIXME("%p stub.\n", iface);
1736 return E_NOTIMPL;
1739 static HRESULT STDMETHODCALLTYPE debugsymbols_GetScopeSymbolGroup(IDebugSymbols3 *iface, ULONG flags,
1740 IDebugSymbolGroup *update, IDebugSymbolGroup **symbols)
1742 FIXME("%p, %#x, %p, %p stub.\n", iface, flags, update, symbols);
1744 return E_NOTIMPL;
1747 static HRESULT STDMETHODCALLTYPE debugsymbols_CreateSymbolGroup(IDebugSymbols3 *iface, IDebugSymbolGroup **group)
1749 FIXME("%p, %p stub.\n", iface, group);
1751 return E_NOTIMPL;
1754 static HRESULT STDMETHODCALLTYPE debugsymbols_StartSymbolMatch(IDebugSymbols3 *iface, const char *pattern,
1755 ULONG64 *handle)
1757 FIXME("%p, %s, %p stub.\n", iface, pattern, handle);
1759 return E_NOTIMPL;
1762 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNextSymbolMatch(IDebugSymbols3 *iface, ULONG64 handle, char *buffer,
1763 ULONG buffer_size, ULONG *match_size, ULONG64 *offset)
1765 FIXME("%p, %s, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(handle), buffer, buffer_size, match_size, offset);
1767 return E_NOTIMPL;
1770 static HRESULT STDMETHODCALLTYPE debugsymbols_EndSymbolMatch(IDebugSymbols3 *iface, ULONG64 handle)
1772 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(handle));
1774 return E_NOTIMPL;
1777 static HRESULT STDMETHODCALLTYPE debugsymbols_Reload(IDebugSymbols3 *iface, const char *path)
1779 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1781 return E_NOTIMPL;
1784 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolPath(IDebugSymbols3 *iface, char *buffer, ULONG buffer_size,
1785 ULONG *path_size)
1787 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
1789 return E_NOTIMPL;
1792 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSymbolPath(IDebugSymbols3 *iface, const char *path)
1794 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1796 return E_NOTIMPL;
1799 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendSymbolPath(IDebugSymbols3 *iface, const char *path)
1801 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1803 return E_NOTIMPL;
1806 static HRESULT STDMETHODCALLTYPE debugsymbols_GetImagePath(IDebugSymbols3 *iface, char *buffer, ULONG buffer_size,
1807 ULONG *path_size)
1809 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
1811 return E_NOTIMPL;
1814 static HRESULT STDMETHODCALLTYPE debugsymbols_SetImagePath(IDebugSymbols3 *iface, const char *path)
1816 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1818 return E_NOTIMPL;
1821 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendImagePath(IDebugSymbols3 *iface, const char *path)
1823 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1825 return E_NOTIMPL;
1828 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourcePath(IDebugSymbols3 *iface, char *buffer, ULONG buffer_size,
1829 ULONG *path_size)
1831 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
1833 return E_NOTIMPL;
1836 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourcePathElement(IDebugSymbols3 *iface, ULONG index, char *buffer,
1837 ULONG buffer_size, ULONG *element_size)
1839 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, element_size);
1841 return E_NOTIMPL;
1844 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSourcePath(IDebugSymbols3 *iface, const char *path)
1846 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1848 return E_NOTIMPL;
1851 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendSourcePath(IDebugSymbols3 *iface, const char *path)
1853 FIXME("%p, %s stub.\n", iface, debugstr_a(path));
1855 return E_NOTIMPL;
1858 static HRESULT STDMETHODCALLTYPE debugsymbols_FindSourceFile(IDebugSymbols3 *iface, ULONG start, const char *file,
1859 ULONG flags, ULONG *found_element, char *buffer, ULONG buffer_size, ULONG *found_size)
1861 FIXME("%p, %u, %s, %#x, %p, %p, %u, %p stub.\n", iface, start, debugstr_a(file), flags, found_element, buffer,
1862 buffer_size, found_size);
1864 return E_NOTIMPL;
1867 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceFileLineOffsets(IDebugSymbols3 *iface, const char *file,
1868 ULONG64 *buffer, ULONG buffer_lines, ULONG *file_lines)
1870 FIXME("%p, %s, %p, %u, %p stub.\n", iface, debugstr_a(file), buffer, buffer_lines, file_lines);
1872 return E_NOTIMPL;
1875 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleVersionInformation(IDebugSymbols3 *iface, ULONG index,
1876 ULONG64 base, const char *item, void *buffer, ULONG buffer_size, ULONG *info_size)
1878 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1879 const struct module_info *info;
1880 struct target_process *target;
1881 void *version_info, *ptr;
1882 HRESULT hr = E_FAIL;
1883 DWORD handle, size;
1885 TRACE("%p, %u, %s, %s, %p, %u, %p.\n", iface, index, wine_dbgstr_longlong(base), debugstr_a(item), buffer,
1886 buffer_size, info_size);
1888 if (!(target = debug_client_get_target(debug_client)))
1889 return E_UNEXPECTED;
1891 if (index == DEBUG_ANY_ID)
1892 info = debug_target_get_module_info_by_base(target, base);
1893 else
1894 info = debug_target_get_module_info(target, index);
1896 if (!info)
1898 WARN("Was unable to locate module.\n");
1899 return E_INVALIDARG;
1902 if (!(size = GetFileVersionInfoSizeA(info->image_name, &handle)))
1903 return E_FAIL;
1905 if (!(version_info = heap_alloc(size)))
1906 return E_OUTOFMEMORY;
1908 if (GetFileVersionInfoA(info->image_name, handle, size, version_info))
1910 if (VerQueryValueA(version_info, item, &ptr, &size))
1912 if (info_size)
1913 *info_size = size;
1915 if (buffer && buffer_size)
1917 unsigned int dst_len = min(size, buffer_size);
1918 if (dst_len)
1919 memcpy(buffer, ptr, dst_len);
1922 hr = buffer && buffer_size < size ? S_FALSE : S_OK;
1926 heap_free(version_info);
1928 return hr;
1931 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleNameString(IDebugSymbols3 *iface, ULONG which, ULONG index,
1932 ULONG64 base, char *buffer, ULONG buffer_size, ULONG *name_size)
1934 struct debug_client *debug_client = impl_from_IDebugSymbols3(iface);
1935 const struct module_info *info;
1936 struct target_process *target;
1937 HRESULT hr;
1939 TRACE("%p, %u, %u, %s, %p, %u, %p.\n", iface, which, index, wine_dbgstr_longlong(base), buffer, buffer_size,
1940 name_size);
1942 if (!(target = debug_client_get_target(debug_client)))
1943 return E_UNEXPECTED;
1945 if (index == DEBUG_ANY_ID)
1946 info = debug_target_get_module_info_by_base(target, base);
1947 else
1948 info = debug_target_get_module_info(target, index);
1950 if (!info)
1952 WARN("Was unable to locate module.\n");
1953 return E_INVALIDARG;
1956 switch (which)
1958 case DEBUG_MODNAME_IMAGE:
1959 hr = debug_target_return_string(info->image_name, buffer, buffer_size, name_size);
1960 break;
1961 case DEBUG_MODNAME_MODULE:
1962 case DEBUG_MODNAME_LOADED_IMAGE:
1963 case DEBUG_MODNAME_SYMBOL_FILE:
1964 case DEBUG_MODNAME_MAPPED_IMAGE:
1965 FIXME("Unsupported name info %d.\n", which);
1966 return E_NOTIMPL;
1967 default:
1968 WARN("Unknown name info %d.\n", which);
1969 return E_INVALIDARG;
1972 return hr;
1975 static HRESULT STDMETHODCALLTYPE debugsymbols_GetConstantName(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
1976 ULONG64 value, char *buffer, ULONG buffer_size, ULONG *name_size)
1978 FIXME("%p, %s, %u, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id,
1979 wine_dbgstr_longlong(value), buffer, buffer_size, name_size);
1981 return E_NOTIMPL;
1984 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldName(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
1985 ULONG field_index, char *buffer, ULONG buffer_size, ULONG *name_size)
1987 FIXME("%p, %s, %u, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id, field_index, buffer,
1988 buffer_size, name_size);
1990 return E_NOTIMPL;
1993 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeOptions(IDebugSymbols3 *iface, ULONG *options)
1995 FIXME("%p, %p stub.\n", iface, options);
1997 return E_NOTIMPL;
2000 static HRESULT STDMETHODCALLTYPE debugsymbols_AddTypeOptions(IDebugSymbols3 *iface, ULONG options)
2002 FIXME("%p, %#x stub.\n", iface, options);
2004 return E_NOTIMPL;
2007 static HRESULT STDMETHODCALLTYPE debugsymbols_RemoveTypeOptions(IDebugSymbols3 *iface, ULONG options)
2009 FIXME("%p, %#x stub.\n", iface, options);
2011 return E_NOTIMPL;
2014 static HRESULT STDMETHODCALLTYPE debugsymbols_SetTypeOptions(IDebugSymbols3 *iface, ULONG options)
2016 FIXME("%p, %#x stub.\n", iface, options);
2018 return E_NOTIMPL;
2021 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNameByOffsetWide(IDebugSymbols3 *iface, ULONG64 offset, WCHAR *buffer,
2022 ULONG buffer_size, ULONG *name_size, ULONG64 *displacement)
2024 FIXME("%p, %s, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, name_size,
2025 displacement);
2027 return E_NOTIMPL;
2030 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetByNameWide(IDebugSymbols3 *iface, const WCHAR *symbol,
2031 ULONG64 *offset)
2033 FIXME("%p, %s, %p stub.\n", iface, debugstr_w(symbol), offset);
2035 return E_NOTIMPL;
2038 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNearNameByOffsetWide(IDebugSymbols3 *iface, ULONG64 offset,
2039 LONG delta, WCHAR *buffer, ULONG buffer_size, ULONG *name_size, ULONG64 *displacement)
2041 FIXME("%p, %s, %d, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), delta, buffer, buffer_size,
2042 name_size, displacement);
2044 return E_NOTIMPL;
2047 static HRESULT STDMETHODCALLTYPE debugsymbols_GetLineByOffsetWide(IDebugSymbols3 *iface, ULONG64 offset, ULONG *line,
2048 WCHAR *buffer, ULONG buffer_size, ULONG *file_size, ULONG64 *displacement)
2050 FIXME("%p, %s, %p, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), line, buffer, buffer_size,
2051 file_size, displacement);
2053 return E_NOTIMPL;
2056 static HRESULT STDMETHODCALLTYPE debugsymbols_GetOffsetByLineWide(IDebugSymbols3 *iface, ULONG line, const WCHAR *file,
2057 ULONG64 *offset)
2059 FIXME("%p, %u, %s, %p stub.\n", iface, line, debugstr_w(file), offset);
2061 return E_NOTIMPL;
2064 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByModuleNameWide(IDebugSymbols3 *iface, const WCHAR *name,
2065 ULONG start_index, ULONG *index, ULONG64 *base)
2067 FIXME("%p, %s, %u, %p, %p stub.\n", iface, debugstr_w(name), start_index, index, base);
2069 return E_NOTIMPL;
2072 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolModuleWide(IDebugSymbols3 *iface, const WCHAR *symbol,
2073 ULONG64 *base)
2075 FIXME("%p, %s, %p stub.\n", iface, debugstr_w(symbol), base);
2077 return E_NOTIMPL;
2080 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeNameWide(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
2081 WCHAR *buffer, ULONG buffer_size, ULONG *name_size)
2083 FIXME("%p, %s, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id, buffer, buffer_size,
2084 name_size);
2086 return E_NOTIMPL;
2089 static HRESULT STDMETHODCALLTYPE debugsymbols_GetTypeIdWide(IDebugSymbols3 *iface, ULONG64 module, const WCHAR *name,
2090 ULONG *type_id)
2092 FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(module), debugstr_w(name), type_id);
2094 return E_NOTIMPL;
2097 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldOffsetWide(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
2098 const WCHAR *field, ULONG *offset)
2100 FIXME("%p, %s, %u, %s, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id, debugstr_w(field), offset);
2102 return E_NOTIMPL;
2105 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolTypeIdWide(IDebugSymbols3 *iface, const WCHAR *symbol,
2106 ULONG *type_id, ULONG64 *module)
2108 FIXME("%p, %s, %p, %p stub.\n", iface, debugstr_w(symbol), type_id, module);
2110 return E_NOTIMPL;
2113 static HRESULT STDMETHODCALLTYPE debugsymbols_GetScopeSymbolGroup2(IDebugSymbols3 *iface, ULONG flags,
2114 PDEBUG_SYMBOL_GROUP2 update, PDEBUG_SYMBOL_GROUP2 *symbols)
2116 FIXME("%p, %#x, %p, %p stub.\n", iface, flags, update, symbols);
2118 return E_NOTIMPL;
2121 static HRESULT STDMETHODCALLTYPE debugsymbols_CreateSymbolGroup2(IDebugSymbols3 *iface, PDEBUG_SYMBOL_GROUP2 *group)
2123 FIXME("%p, %p stub.\n", iface, group);
2125 return E_NOTIMPL;
2128 static HRESULT STDMETHODCALLTYPE debugsymbols_StartSymbolMatchWide(IDebugSymbols3 *iface, const WCHAR *pattern,
2129 ULONG64 *handle)
2131 FIXME("%p, %s, %p stub.\n", iface, debugstr_w(pattern), handle);
2133 return E_NOTIMPL;
2136 static HRESULT STDMETHODCALLTYPE debugsymbols_GetNextSymbolMatchWide(IDebugSymbols3 *iface, ULONG64 handle,
2137 WCHAR *buffer, ULONG buffer_size, ULONG *match_size, ULONG64 *offset)
2139 FIXME("%p, %s, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(handle), buffer, buffer_size, match_size, offset);
2141 return E_NOTIMPL;
2144 static HRESULT STDMETHODCALLTYPE debugsymbols_ReloadWide(IDebugSymbols3 *iface, const WCHAR *module)
2146 FIXME("%p, %s stub.\n", iface, debugstr_w(module));
2148 return E_NOTIMPL;
2151 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolPathWide(IDebugSymbols3 *iface, WCHAR *buffer, ULONG buffer_size,
2152 ULONG *path_size)
2154 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
2156 return E_NOTIMPL;
2159 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSymbolPathWide(IDebugSymbols3 *iface, const WCHAR *path)
2161 FIXME("%p, %s stub.\n", iface, debugstr_w(path));
2163 return E_NOTIMPL;
2166 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendSymbolPathWide(IDebugSymbols3 *iface, const WCHAR *addition)
2168 FIXME("%p, %s stub.\n", iface, debugstr_w(addition));
2170 return E_NOTIMPL;
2173 static HRESULT STDMETHODCALLTYPE debugsymbols_GetImagePathWide(IDebugSymbols3 *iface, WCHAR *buffer, ULONG buffer_size,
2174 ULONG *path_size)
2176 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
2178 return E_NOTIMPL;
2181 static HRESULT STDMETHODCALLTYPE debugsymbols_SetImagePathWide(IDebugSymbols3 *iface, const WCHAR *path)
2183 FIXME("%p, %s stub.\n", iface, debugstr_w(path));
2185 return E_NOTIMPL;
2188 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendImagePathWide(IDebugSymbols3 *iface, const WCHAR *addition)
2190 FIXME("%p, %s stub.\n", iface, debugstr_w(addition));
2192 return E_NOTIMPL;
2195 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourcePathWide(IDebugSymbols3 *iface, WCHAR *buffer, ULONG buffer_size,
2196 ULONG *path_size)
2198 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, path_size);
2200 return E_NOTIMPL;
2203 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourcePathElementWide(IDebugSymbols3 *iface, ULONG index,
2204 WCHAR *buffer, ULONG buffer_size, ULONG *element_size)
2206 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, element_size);
2208 return E_NOTIMPL;
2211 static HRESULT STDMETHODCALLTYPE debugsymbols_SetSourcePathWide(IDebugSymbols3 *iface, const WCHAR *path)
2213 FIXME("%p, %s stub.\n", iface, debugstr_w(path));
2215 return E_NOTIMPL;
2218 static HRESULT STDMETHODCALLTYPE debugsymbols_AppendSourcePathWide(IDebugSymbols3 *iface, const WCHAR *addition)
2220 FIXME("%p, %s stub.\n", iface, debugstr_w(addition));
2222 return E_NOTIMPL;
2225 static HRESULT STDMETHODCALLTYPE debugsymbols_FindSourceFileWide(IDebugSymbols3 *iface, ULONG start_element,
2226 const WCHAR *file, ULONG flags, ULONG *found_element, WCHAR *buffer, ULONG buffer_size, ULONG *found_size)
2228 FIXME("%p, %u, %s, %#x, %p, %p, %u, %p stub.\n", iface, start_element, debugstr_w(file), flags, found_element,
2229 buffer, buffer_size, found_size);
2231 return E_NOTIMPL;
2234 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceFileLineOffsetsWide(IDebugSymbols3 *iface, const WCHAR *file,
2235 ULONG64 *buffer, ULONG buffer_lines, ULONG *file_lines)
2237 FIXME("%p, %s, %p, %u, %p stub.\n", iface, debugstr_w(file), buffer, buffer_lines, file_lines);
2239 return E_NOTIMPL;
2242 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleVersionInformationWide(IDebugSymbols3 *iface, ULONG index,
2243 ULONG64 base, const WCHAR *item, void *buffer, ULONG buffer_size, ULONG *version_info_size)
2245 FIXME("%p, %u, %s, %s, %p, %u, %p stub.\n", iface, index, wine_dbgstr_longlong(base), debugstr_w(item), buffer,
2246 buffer_size, version_info_size);
2248 return E_NOTIMPL;
2251 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleNameStringWide(IDebugSymbols3 *iface, ULONG which, ULONG index,
2252 ULONG64 base, WCHAR *buffer, ULONG buffer_size, ULONG *name_size)
2254 FIXME("%p, %u, %u, %s, %p, %u, %p stub.\n", iface, which, index, wine_dbgstr_longlong(base), buffer, buffer_size,
2255 name_size);
2257 return E_NOTIMPL;
2260 static HRESULT STDMETHODCALLTYPE debugsymbols_GetConstantNameWide(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
2261 ULONG64 value, WCHAR *buffer, ULONG buffer_size, ULONG *name_size)
2263 FIXME("%p, %s, %u, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id,
2264 wine_dbgstr_longlong(value), buffer, buffer_size, name_size);
2266 return E_NOTIMPL;
2269 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldNameWide(IDebugSymbols3 *iface, ULONG64 module, ULONG type_id,
2270 ULONG field_index, WCHAR *buffer, ULONG buffer_size, ULONG *name_size)
2272 FIXME("%p, %s, %u, %u, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(module), type_id, field_index, buffer,
2273 buffer_size, name_size);
2275 return E_NOTIMPL;
2278 static HRESULT STDMETHODCALLTYPE debugsymbols_IsManagedModule(IDebugSymbols3 *iface, ULONG index, ULONG64 base)
2280 FIXME("%p, %u, %s stub.\n", iface, index, wine_dbgstr_longlong(base));
2282 return E_NOTIMPL;
2285 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByModuleName2(IDebugSymbols3 *iface, const char *name,
2286 ULONG start_index, ULONG flags, ULONG *index, ULONG64 *base)
2288 FIXME("%p, %s, %u, %#x, %p, %p stub.\n", iface, debugstr_a(name), start_index, flags, index, base);
2290 return E_NOTIMPL;
2293 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByModuleName2Wide(IDebugSymbols3 *iface, const WCHAR *name,
2294 ULONG start_index, ULONG flags, ULONG *index, ULONG64 *base)
2296 FIXME("%p, %s, %u, %#x, %p, %p stub.\n", iface, debugstr_w(name), start_index, flags, index, base);
2298 return E_NOTIMPL;
2301 static HRESULT STDMETHODCALLTYPE debugsymbols_GetModuleByOffset2(IDebugSymbols3 *iface, ULONG64 offset,
2302 ULONG start_index, ULONG flags, ULONG *index, ULONG64 *base)
2304 FIXME("%p, %s, %u, %#x, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), start_index, flags, index, base);
2306 return E_NOTIMPL;
2309 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSyntheticModule(IDebugSymbols3 *iface, ULONG64 base, ULONG size,
2310 const char *image_path, const char *module_name, ULONG flags)
2312 FIXME("%p, %s, %u, %s, %s, %#x stub.\n", iface, wine_dbgstr_longlong(base), size, debugstr_a(image_path),
2313 debugstr_a(module_name), flags);
2315 return E_NOTIMPL;
2318 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSyntheticModuleWide(IDebugSymbols3 *iface, ULONG64 base, ULONG size,
2319 const WCHAR *image_path, const WCHAR *module_name, ULONG flags)
2321 FIXME("%p, %s, %u, %s, %s, %#x stub.\n", iface, wine_dbgstr_longlong(base), size, debugstr_w(image_path),
2322 debugstr_w(module_name), flags);
2324 return E_NOTIMPL;
2327 static HRESULT STDMETHODCALLTYPE debugsymbols_RemoveSyntheticModule(IDebugSymbols3 *iface, ULONG64 base)
2329 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(base));
2331 return E_NOTIMPL;
2334 static HRESULT STDMETHODCALLTYPE debugsymbols_GetCurrentScopeFrameIndex(IDebugSymbols3 *iface, ULONG *index)
2336 FIXME("%p, %p stub.\n", iface, index);
2338 return E_NOTIMPL;
2341 static HRESULT STDMETHODCALLTYPE debugsymbols_SetScopeFrameByIndex(IDebugSymbols3 *iface, ULONG index)
2343 FIXME("%p, %u stub.\n", iface, index);
2345 return E_NOTIMPL;
2348 static HRESULT STDMETHODCALLTYPE debugsymbols_SetScopeFromJitDebugInfo(IDebugSymbols3 *iface, ULONG output_control,
2349 ULONG64 info_offset)
2351 FIXME("%p, %u, %s stub.\n", iface, output_control, wine_dbgstr_longlong(info_offset));
2353 return E_NOTIMPL;
2356 static HRESULT STDMETHODCALLTYPE debugsymbols_SetScopeFromStoredEvent(IDebugSymbols3 *iface)
2358 FIXME("%p stub.\n", iface);
2360 return E_NOTIMPL;
2363 static HRESULT STDMETHODCALLTYPE debugsymbols_OutputSymbolByOffset(IDebugSymbols3 *iface, ULONG output_control,
2364 ULONG flags, ULONG64 offset)
2366 FIXME("%p, %u, %#x, %s stub.\n", iface, output_control, flags, wine_dbgstr_longlong(offset));
2368 return E_NOTIMPL;
2371 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFunctionEntryByOffset(IDebugSymbols3 *iface, ULONG64 offset,
2372 ULONG flags, void *buffer, ULONG buffer_size, ULONG *needed_size)
2374 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, buffer, buffer_size,
2375 needed_size);
2377 return E_NOTIMPL;
2380 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldTypeAndOffset(IDebugSymbols3 *iface, ULONG64 module,
2381 ULONG container_type_id, const char *field, ULONG *field_type_id, ULONG *offset)
2383 FIXME("%p, %s, %u, %s, %p, %p stub.\n", iface, wine_dbgstr_longlong(module), container_type_id, debugstr_a(field),
2384 field_type_id, offset);
2386 return E_NOTIMPL;
2389 static HRESULT STDMETHODCALLTYPE debugsymbols_GetFieldTypeAndOffsetWide(IDebugSymbols3 *iface, ULONG64 module,
2390 ULONG container_type_id, const WCHAR *field, ULONG *field_type_id, ULONG *offset)
2392 FIXME("%p, %s, %u, %s, %p, %p stub.\n", iface, wine_dbgstr_longlong(module), container_type_id, debugstr_w(field),
2393 field_type_id, offset);
2395 return E_NOTIMPL;
2398 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSyntheticSymbol(IDebugSymbols3 *iface, ULONG64 offset, ULONG size,
2399 const char *name, ULONG flags, DEBUG_MODULE_AND_ID *id)
2401 FIXME("%p, %s, %u, %s, %#x, %p stub.\n", iface, wine_dbgstr_longlong(offset), size, debugstr_a(name), flags, id);
2403 return E_NOTIMPL;
2406 static HRESULT STDMETHODCALLTYPE debugsymbols_AddSyntheticSymbolWide(IDebugSymbols3 *iface, ULONG64 offset, ULONG size,
2407 const WCHAR *name, ULONG flags, DEBUG_MODULE_AND_ID *id)
2409 FIXME("%p, %s, %u, %s, %#x, %p stub.\n", iface, wine_dbgstr_longlong(offset), size, debugstr_w(name), flags, id);
2411 return E_NOTIMPL;
2414 static HRESULT STDMETHODCALLTYPE debugsymbols_RemoveSyntheticSymbol(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id)
2416 FIXME("%p, %p stub.\n", iface, id);
2418 return E_NOTIMPL;
2421 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntriesByOffset(IDebugSymbols3 *iface, ULONG64 offset,
2422 ULONG flags, DEBUG_MODULE_AND_ID *ids, LONG64 *displacements, ULONG count, ULONG *entries)
2424 FIXME("%p, %s, %#x, %p, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, ids, displacements, count,
2425 entries);
2427 return E_NOTIMPL;
2430 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntriesByName(IDebugSymbols3 *iface, const char *symbol,
2431 ULONG flags, DEBUG_MODULE_AND_ID *ids, ULONG count, ULONG *entries)
2433 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, debugstr_a(symbol), flags, ids, count, entries);
2435 return E_NOTIMPL;
2438 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntriesByNameWide(IDebugSymbols3 *iface, const WCHAR *symbol,
2439 ULONG flags, DEBUG_MODULE_AND_ID *ids, ULONG count, ULONG *entries)
2441 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, debugstr_w(symbol), flags, ids, count, entries);
2443 return E_NOTIMPL;
2446 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryByToken(IDebugSymbols3 *iface, ULONG64 base, ULONG token,
2447 DEBUG_MODULE_AND_ID *id)
2449 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(base), id);
2451 return E_NOTIMPL;
2454 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryInformation(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id,
2455 DEBUG_SYMBOL_ENTRY *info)
2457 FIXME("%p, %p, %p stub.\n", iface, id, info);
2459 return E_NOTIMPL;
2462 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryString(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id,
2463 ULONG which, char *buffer, ULONG buffer_size, ULONG *string_size)
2465 FIXME("%p, %p, %u, %p, %u, %p stub.\n", iface, id, which, buffer, buffer_size, string_size);
2467 return E_NOTIMPL;
2470 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryStringWide(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id,
2471 ULONG which, WCHAR *buffer, ULONG buffer_size, ULONG *string_size)
2473 FIXME("%p, %p, %u, %p, %u, %p stub.\n", iface, id, which, buffer, buffer_size, string_size);
2475 return E_NOTIMPL;
2478 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryOffsetRegions(IDebugSymbols3 *iface, DEBUG_MODULE_AND_ID *id,
2479 ULONG flags, DEBUG_OFFSET_REGION *regions, ULONG regions_count, ULONG *regions_avail)
2481 FIXME("%p, %p, %#x, %p, %u, %p stub.\n", iface, id, flags, regions, regions_count, regions_avail);
2483 return E_NOTIMPL;
2486 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSymbolEntryBySymbolEntry(IDebugSymbols3 *iface,
2487 DEBUG_MODULE_AND_ID *from_id, ULONG flags, DEBUG_MODULE_AND_ID *to_id)
2489 FIXME("%p, %p, %#x, %p stub.\n", iface, from_id, flags, to_id);
2491 return E_NOTIMPL;
2494 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntriesByOffset(IDebugSymbols3 *iface, ULONG64 offset,
2495 ULONG flags, DEBUG_SYMBOL_SOURCE_ENTRY *entries, ULONG count, ULONG *entries_avail)
2497 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, entries, count, entries_avail);
2499 return E_NOTIMPL;
2502 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntriesByLine(IDebugSymbols3 *iface, ULONG line,
2503 const char *file, ULONG flags, DEBUG_SYMBOL_SOURCE_ENTRY *entries, ULONG count, ULONG *entries_avail)
2505 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, debugstr_a(file), flags, entries, count, entries_avail);
2507 return E_NOTIMPL;
2510 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntriesByLineWide(IDebugSymbols3 *iface, ULONG line,
2511 const WCHAR *file, ULONG flags, DEBUG_SYMBOL_SOURCE_ENTRY *entries, ULONG count, ULONG *entries_avail)
2513 FIXME("%p, %s, %#x, %p, %u, %p stub.\n", iface, debugstr_w(file), flags, entries, count, entries_avail);
2515 return E_NOTIMPL;
2518 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntryString(IDebugSymbols3 *iface,
2519 DEBUG_SYMBOL_SOURCE_ENTRY *entry, ULONG which, char *buffer, ULONG buffer_size, ULONG *string_size)
2521 FIXME("%p, %p, %u, %p, %u, %p stub.\n", iface, entry, which, buffer, buffer_size, string_size);
2523 return E_NOTIMPL;
2526 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntryStringWide(IDebugSymbols3 *iface,
2527 DEBUG_SYMBOL_SOURCE_ENTRY *entry, ULONG which, WCHAR *buffer, ULONG buffer_size, ULONG *string_size)
2529 FIXME("%p, %p, %u, %p, %u, %p stub.\n", iface, entry, which, buffer, buffer_size, string_size);
2531 return E_NOTIMPL;
2534 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntryOffsetRegions(IDebugSymbols3 *iface,
2535 DEBUG_SYMBOL_SOURCE_ENTRY *entry, ULONG flags, DEBUG_OFFSET_REGION *regions, ULONG count, ULONG *regions_avail)
2537 FIXME("%p, %p, %#x, %p, %u, %p stub.\n", iface, entry, flags, regions, count, regions_avail);
2539 return E_NOTIMPL;
2542 static HRESULT STDMETHODCALLTYPE debugsymbols_GetSourceEntryBySourceEntry(IDebugSymbols3 *iface,
2543 DEBUG_SYMBOL_SOURCE_ENTRY *from_entry, ULONG flags, DEBUG_SYMBOL_SOURCE_ENTRY *to_entry)
2545 FIXME("%p, %p, %#x, %p stub.\n", iface, from_entry, flags, to_entry);
2547 return E_NOTIMPL;
2550 static const IDebugSymbols3Vtbl debugsymbolsvtbl =
2552 debugsymbols_QueryInterface,
2553 debugsymbols_AddRef,
2554 debugsymbols_Release,
2555 debugsymbols_GetSymbolOptions,
2556 debugsymbols_AddSymbolOptions,
2557 debugsymbols_RemoveSymbolOptions,
2558 debugsymbols_SetSymbolOptions,
2559 debugsymbols_GetNameByOffset,
2560 debugsymbols_GetOffsetByName,
2561 debugsymbols_GetNearNameByOffset,
2562 debugsymbols_GetLineByOffset,
2563 debugsymbols_GetOffsetByLine,
2564 debugsymbols_GetNumberModules,
2565 debugsymbols_GetModuleByIndex,
2566 debugsymbols_GetModuleByModuleName,
2567 debugsymbols_GetModuleByOffset,
2568 debugsymbols_GetModuleNames,
2569 debugsymbols_GetModuleParameters,
2570 debugsymbols_GetSymbolModule,
2571 debugsymbols_GetTypeName,
2572 debugsymbols_GetTypeId,
2573 debugsymbols_GetTypeSize,
2574 debugsymbols_GetFieldOffset,
2575 debugsymbols_GetSymbolTypeId,
2576 debugsymbols_GetOffsetTypeId,
2577 debugsymbols_ReadTypedDataVirtual,
2578 debugsymbols_WriteTypedDataVirtual,
2579 debugsymbols_OutputTypedDataVirtual,
2580 debugsymbols_ReadTypedDataPhysical,
2581 debugsymbols_WriteTypedDataPhysical,
2582 debugsymbols_OutputTypedDataPhysical,
2583 debugsymbols_GetScope,
2584 debugsymbols_SetScope,
2585 debugsymbols_ResetScope,
2586 debugsymbols_GetScopeSymbolGroup,
2587 debugsymbols_CreateSymbolGroup,
2588 debugsymbols_StartSymbolMatch,
2589 debugsymbols_GetNextSymbolMatch,
2590 debugsymbols_EndSymbolMatch,
2591 debugsymbols_Reload,
2592 debugsymbols_GetSymbolPath,
2593 debugsymbols_SetSymbolPath,
2594 debugsymbols_AppendSymbolPath,
2595 debugsymbols_GetImagePath,
2596 debugsymbols_SetImagePath,
2597 debugsymbols_AppendImagePath,
2598 debugsymbols_GetSourcePath,
2599 debugsymbols_GetSourcePathElement,
2600 debugsymbols_SetSourcePath,
2601 debugsymbols_AppendSourcePath,
2602 debugsymbols_FindSourceFile,
2603 debugsymbols_GetSourceFileLineOffsets,
2604 /* IDebugSymbols2 */
2605 debugsymbols_GetModuleVersionInformation,
2606 debugsymbols_GetModuleNameString,
2607 debugsymbols_GetConstantName,
2608 debugsymbols_GetFieldName,
2609 debugsymbols_GetTypeOptions,
2610 debugsymbols_AddTypeOptions,
2611 debugsymbols_RemoveTypeOptions,
2612 debugsymbols_SetTypeOptions,
2613 /* IDebugSymbols3 */
2614 debugsymbols_GetNameByOffsetWide,
2615 debugsymbols_GetOffsetByNameWide,
2616 debugsymbols_GetNearNameByOffsetWide,
2617 debugsymbols_GetLineByOffsetWide,
2618 debugsymbols_GetOffsetByLineWide,
2619 debugsymbols_GetModuleByModuleNameWide,
2620 debugsymbols_GetSymbolModuleWide,
2621 debugsymbols_GetTypeNameWide,
2622 debugsymbols_GetTypeIdWide,
2623 debugsymbols_GetFieldOffsetWide,
2624 debugsymbols_GetSymbolTypeIdWide,
2625 debugsymbols_GetScopeSymbolGroup2,
2626 debugsymbols_CreateSymbolGroup2,
2627 debugsymbols_StartSymbolMatchWide,
2628 debugsymbols_GetNextSymbolMatchWide,
2629 debugsymbols_ReloadWide,
2630 debugsymbols_GetSymbolPathWide,
2631 debugsymbols_SetSymbolPathWide,
2632 debugsymbols_AppendSymbolPathWide,
2633 debugsymbols_GetImagePathWide,
2634 debugsymbols_SetImagePathWide,
2635 debugsymbols_AppendImagePathWide,
2636 debugsymbols_GetSourcePathWide,
2637 debugsymbols_GetSourcePathElementWide,
2638 debugsymbols_SetSourcePathWide,
2639 debugsymbols_AppendSourcePathWide,
2640 debugsymbols_FindSourceFileWide,
2641 debugsymbols_GetSourceFileLineOffsetsWide,
2642 debugsymbols_GetModuleVersionInformationWide,
2643 debugsymbols_GetModuleNameStringWide,
2644 debugsymbols_GetConstantNameWide,
2645 debugsymbols_GetFieldNameWide,
2646 debugsymbols_IsManagedModule,
2647 debugsymbols_GetModuleByModuleName2,
2648 debugsymbols_GetModuleByModuleName2Wide,
2649 debugsymbols_GetModuleByOffset2,
2650 debugsymbols_AddSyntheticModule,
2651 debugsymbols_AddSyntheticModuleWide,
2652 debugsymbols_RemoveSyntheticModule,
2653 debugsymbols_GetCurrentScopeFrameIndex,
2654 debugsymbols_SetScopeFrameByIndex,
2655 debugsymbols_SetScopeFromJitDebugInfo,
2656 debugsymbols_SetScopeFromStoredEvent,
2657 debugsymbols_OutputSymbolByOffset,
2658 debugsymbols_GetFunctionEntryByOffset,
2659 debugsymbols_GetFieldTypeAndOffset,
2660 debugsymbols_GetFieldTypeAndOffsetWide,
2661 debugsymbols_AddSyntheticSymbol,
2662 debugsymbols_AddSyntheticSymbolWide,
2663 debugsymbols_RemoveSyntheticSymbol,
2664 debugsymbols_GetSymbolEntriesByOffset,
2665 debugsymbols_GetSymbolEntriesByName,
2666 debugsymbols_GetSymbolEntriesByNameWide,
2667 debugsymbols_GetSymbolEntryByToken,
2668 debugsymbols_GetSymbolEntryInformation,
2669 debugsymbols_GetSymbolEntryString,
2670 debugsymbols_GetSymbolEntryStringWide,
2671 debugsymbols_GetSymbolEntryOffsetRegions,
2672 debugsymbols_GetSymbolEntryBySymbolEntry,
2673 debugsymbols_GetSourceEntriesByOffset,
2674 debugsymbols_GetSourceEntriesByLine,
2675 debugsymbols_GetSourceEntriesByLineWide,
2676 debugsymbols_GetSourceEntryString,
2677 debugsymbols_GetSourceEntryStringWide,
2678 debugsymbols_GetSourceEntryOffsetRegions,
2679 debugsymbols_GetSourceEntryBySourceEntry,
2682 static HRESULT STDMETHODCALLTYPE debugcontrol_QueryInterface(IDebugControl2 *iface, REFIID riid, void **obj)
2684 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2685 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
2686 return IUnknown_QueryInterface(unk, riid, obj);
2689 static ULONG STDMETHODCALLTYPE debugcontrol_AddRef(IDebugControl2 *iface)
2691 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2692 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
2693 return IUnknown_AddRef(unk);
2696 static ULONG STDMETHODCALLTYPE debugcontrol_Release(IDebugControl2 *iface)
2698 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2699 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
2700 return IUnknown_Release(unk);
2703 static HRESULT STDMETHODCALLTYPE debugcontrol_GetInterrupt(IDebugControl2 *iface)
2705 FIXME("%p stub.\n", iface);
2707 return E_NOTIMPL;
2710 static HRESULT STDMETHODCALLTYPE debugcontrol_SetInterrupt(IDebugControl2 *iface, ULONG flags)
2712 FIXME("%p, %#x stub.\n", iface, flags);
2714 return E_NOTIMPL;
2717 static HRESULT STDMETHODCALLTYPE debugcontrol_GetInterruptTimeout(IDebugControl2 *iface, ULONG *timeout)
2719 FIXME("%p, %p stub.\n", iface, timeout);
2721 return E_NOTIMPL;
2724 static HRESULT STDMETHODCALLTYPE debugcontrol_SetInterruptTimeout(IDebugControl2 *iface, ULONG timeout)
2726 FIXME("%p, %u stub.\n", iface, timeout);
2728 return E_NOTIMPL;
2731 static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogFile(IDebugControl2 *iface, char *buffer, ULONG buffer_size,
2732 ULONG *file_size, BOOL *append)
2734 FIXME("%p, %p, %u, %p, %p stub.\n", iface, buffer, buffer_size, file_size, append);
2736 return E_NOTIMPL;
2739 static HRESULT STDMETHODCALLTYPE debugcontrol_OpenLogFile(IDebugControl2 *iface, const char *file, BOOL append)
2741 FIXME("%p, %s, %d stub.\n", iface, debugstr_a(file), append);
2743 return E_NOTIMPL;
2745 static HRESULT STDMETHODCALLTYPE debugcontrol_CloseLogFile(IDebugControl2 *iface)
2747 FIXME("%p stub.\n", iface);
2749 return E_NOTIMPL;
2751 static HRESULT STDMETHODCALLTYPE debugcontrol_GetLogMask(IDebugControl2 *iface, ULONG *mask)
2753 FIXME("%p, %p stub.\n", iface, mask);
2755 return E_NOTIMPL;
2758 static HRESULT STDMETHODCALLTYPE debugcontrol_SetLogMask(IDebugControl2 *iface, ULONG mask)
2760 FIXME("%p, %#x stub.\n", iface, mask);
2762 return E_NOTIMPL;
2765 static HRESULT STDMETHODCALLTYPE debugcontrol_Input(IDebugControl2 *iface, char *buffer, ULONG buffer_size,
2766 ULONG *input_size)
2768 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, input_size);
2770 return E_NOTIMPL;
2773 static HRESULT STDMETHODCALLTYPE debugcontrol_ReturnInput(IDebugControl2 *iface, const char *buffer)
2775 FIXME("%p, %s stub.\n", iface, debugstr_a(buffer));
2777 return E_NOTIMPL;
2780 static HRESULT STDMETHODVCALLTYPE debugcontrol_Output(IDebugControl2 *iface, ULONG mask, const char *format, ...)
2782 FIXME("%p, %#x, %s stub.\n", iface, mask, debugstr_a(format));
2784 return E_NOTIMPL;
2787 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVaList(IDebugControl2 *iface, ULONG mask, const char *format,
2788 __ms_va_list args)
2790 FIXME("%p, %#x, %s stub.\n", iface, mask, debugstr_a(format));
2792 return E_NOTIMPL;
2795 static HRESULT STDMETHODVCALLTYPE debugcontrol_ControlledOutput(IDebugControl2 *iface, ULONG output_control,
2796 ULONG mask, const char *format, ...)
2798 FIXME("%p, %u, %#x, %s stub.\n", iface, output_control, mask, debugstr_a(format));
2800 return E_NOTIMPL;
2803 static HRESULT STDMETHODCALLTYPE debugcontrol_ControlledOutputVaList(IDebugControl2 *iface, ULONG output_control,
2804 ULONG mask, const char *format, __ms_va_list args)
2806 FIXME("%p, %u, %#x, %s stub.\n", iface, output_control, mask, debugstr_a(format));
2808 return E_NOTIMPL;
2811 static HRESULT STDMETHODVCALLTYPE debugcontrol_OutputPrompt(IDebugControl2 *iface, ULONG output_control,
2812 const char *format, ...)
2814 FIXME("%p, %u, %s stub.\n", iface, output_control, debugstr_a(format));
2816 return E_NOTIMPL;
2819 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputPromptVaList(IDebugControl2 *iface, ULONG output_control,
2820 const char *format, __ms_va_list args)
2822 FIXME("%p, %u, %s stub.\n", iface, output_control, debugstr_a(format));
2824 return E_NOTIMPL;
2827 static HRESULT STDMETHODCALLTYPE debugcontrol_GetPromptText(IDebugControl2 *iface, char *buffer, ULONG buffer_size,
2828 ULONG *text_size)
2830 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, text_size);
2832 return E_NOTIMPL;
2835 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputCurrentState(IDebugControl2 *iface, ULONG output_control,
2836 ULONG flags)
2838 FIXME("%p, %u, %#x stub.\n", iface, output_control, flags);
2840 return E_NOTIMPL;
2843 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputVersionInformation(IDebugControl2 *iface, ULONG output_control)
2845 FIXME("%p, %u stub.\n", iface, output_control);
2847 return E_NOTIMPL;
2850 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNotifyEventHandle(IDebugControl2 *iface, ULONG64 *handle)
2852 FIXME("%p, %p stub.\n", iface, handle);
2854 return E_NOTIMPL;
2857 static HRESULT STDMETHODCALLTYPE debugcontrol_SetNotifyEventHandle(IDebugControl2 *iface, ULONG64 handle)
2859 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(handle));
2861 return E_NOTIMPL;
2864 static HRESULT STDMETHODCALLTYPE debugcontrol_Assemble(IDebugControl2 *iface, ULONG64 offset, const char *code,
2865 ULONG64 *end_offset)
2867 FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), debugstr_a(code), end_offset);
2869 return E_NOTIMPL;
2872 static HRESULT STDMETHODCALLTYPE debugcontrol_Disassemble(IDebugControl2 *iface, ULONG64 offset, ULONG flags,
2873 char *buffer, ULONG buffer_size, ULONG *disassm_size, ULONG64 *end_offset)
2875 FIXME("%p, %s, %#x, %p, %u, %p, %p stub.\n", iface, wine_dbgstr_longlong(offset), flags, buffer, buffer_size,
2876 disassm_size, end_offset);
2878 return E_NOTIMPL;
2881 static HRESULT STDMETHODCALLTYPE debugcontrol_GetDisassembleEffectiveOffset(IDebugControl2 *iface, ULONG64 *offset)
2883 FIXME("%p, %p stub.\n", iface, offset);
2885 return E_NOTIMPL;
2888 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassembly(IDebugControl2 *iface, ULONG output_control,
2889 ULONG64 offset, ULONG flags, ULONG64 *end_offset)
2891 FIXME("%p, %u, %s, %#x, %p stub.\n", iface, output_control, wine_dbgstr_longlong(offset), flags, end_offset);
2893 return E_NOTIMPL;
2896 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputDisassemblyLines(IDebugControl2 *iface, ULONG output_control,
2897 ULONG prev_lines, ULONG total_lines, ULONG64 offset, ULONG flags, ULONG *offset_line, ULONG64 *start_offset,
2898 ULONG64 *end_offset, ULONG64 *line_offsets)
2900 FIXME("%p, %u, %u, %u, %s, %#x, %p, %p, %p, %p stub.\n", iface, output_control, prev_lines, total_lines,
2901 wine_dbgstr_longlong(offset), flags, offset_line, start_offset, end_offset, line_offsets);
2903 return E_NOTIMPL;
2906 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNearInstruction(IDebugControl2 *iface, ULONG64 offset, LONG delta,
2907 ULONG64 *instr_offset)
2909 FIXME("%p, %s, %d, %p stub.\n", iface, wine_dbgstr_longlong(offset), delta, instr_offset);
2911 return E_NOTIMPL;
2914 static HRESULT STDMETHODCALLTYPE debugcontrol_GetStackTrace(IDebugControl2 *iface, ULONG64 frame_offset,
2915 ULONG64 stack_offset, ULONG64 instr_offset, DEBUG_STACK_FRAME *frames, ULONG frames_size, ULONG *frames_filled)
2917 FIXME("%p, %s, %s, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(frame_offset),
2918 wine_dbgstr_longlong(stack_offset), wine_dbgstr_longlong(instr_offset), frames, frames_size, frames_filled);
2920 return E_NOTIMPL;
2923 static HRESULT STDMETHODCALLTYPE debugcontrol_GetReturnOffset(IDebugControl2 *iface, ULONG64 *offset)
2925 FIXME("%p, %p stub.\n", iface, offset);
2927 return E_NOTIMPL;
2930 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputStackTrace(IDebugControl2 *iface, ULONG output_control,
2931 DEBUG_STACK_FRAME *frames, ULONG frames_size, ULONG flags)
2933 FIXME("%p, %u, %p, %u, %#x stub.\n", iface, output_control, frames, frames_size, flags);
2935 return E_NOTIMPL;
2938 static HRESULT STDMETHODCALLTYPE debugcontrol_GetDebuggeeType(IDebugControl2 *iface, ULONG *debug_class,
2939 ULONG *qualifier)
2941 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2942 static struct target_process *target;
2944 FIXME("%p, %p, %p stub.\n", iface, debug_class, qualifier);
2946 *debug_class = DEBUG_CLASS_UNINITIALIZED;
2947 *qualifier = 0;
2949 if (!(target = debug_client_get_target(debug_client)))
2950 return E_UNEXPECTED;
2952 *debug_class = DEBUG_CLASS_USER_WINDOWS;
2953 *qualifier = DEBUG_USER_WINDOWS_PROCESS;
2955 return S_OK;
2958 static HRESULT STDMETHODCALLTYPE debugcontrol_GetActualProcessorType(IDebugControl2 *iface, ULONG *type)
2960 FIXME("%p, %p stub.\n", iface, type);
2962 return E_NOTIMPL;
2965 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExecutingProcessorType(IDebugControl2 *iface, ULONG *type)
2967 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
2968 static struct target_process *target;
2969 HRESULT hr;
2971 TRACE("%p, %p.\n", iface, type);
2973 if (!(target = debug_client_get_target(debug_client)))
2974 return E_UNEXPECTED;
2976 if (FAILED(hr = debug_target_init_modules_info(target)))
2977 return hr;
2979 *type = target->cpu_type;
2981 return S_OK;
2984 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberPossibleExecutingProcessorTypes(IDebugControl2 *iface,
2985 ULONG *count)
2987 FIXME("%p, %p stub.\n", iface, count);
2989 return E_NOTIMPL;
2992 static HRESULT STDMETHODCALLTYPE debugcontrol_GetPossibleExecutingProcessorTypes(IDebugControl2 *iface, ULONG start,
2993 ULONG count, ULONG *types)
2995 FIXME("%p, %u, %u, %p stub.\n", iface, start, count, types);
2997 return E_NOTIMPL;
3000 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberProcessors(IDebugControl2 *iface, ULONG *count)
3002 FIXME("%p, %p stub.\n", iface, count);
3004 return E_NOTIMPL;
3007 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemVersion(IDebugControl2 *iface, ULONG *platform_id, ULONG *major,
3008 ULONG *minor, char *sp_string, ULONG sp_string_size, ULONG *sp_string_used, ULONG *sp_number,
3009 char *build_string, ULONG build_string_size, ULONG *build_string_used)
3011 FIXME("%p, %p, %p, %p, %p, %u, %p, %p, %p, %u, %p stub.\n", iface, platform_id, major, minor, sp_string,
3012 sp_string_size, sp_string_used, sp_number, build_string, build_string_size, build_string_used);
3014 return E_NOTIMPL;
3017 static HRESULT STDMETHODCALLTYPE debugcontrol_GetPageSize(IDebugControl2 *iface, ULONG *size)
3019 FIXME("%p, %p stub.\n", iface, size);
3021 return E_NOTIMPL;
3024 static HRESULT STDMETHODCALLTYPE debugcontrol_IsPointer64Bit(IDebugControl2 *iface)
3026 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3027 static struct target_process *target;
3028 HRESULT hr;
3030 TRACE("%p.\n", iface);
3032 if (!(target = debug_client_get_target(debug_client)))
3033 return E_UNEXPECTED;
3035 if (FAILED(hr = debug_target_init_modules_info(target)))
3036 return hr;
3038 switch (target->cpu_type)
3040 case IMAGE_FILE_MACHINE_I386:
3041 case IMAGE_FILE_MACHINE_ARM:
3042 hr = S_FALSE;
3043 break;
3044 case IMAGE_FILE_MACHINE_IA64:
3045 case IMAGE_FILE_MACHINE_AMD64:
3046 case IMAGE_FILE_MACHINE_ARM64:
3047 hr = S_OK;
3048 break;
3049 default:
3050 FIXME("Unexpected cpu type %#x.\n", target->cpu_type);
3051 hr = E_UNEXPECTED;
3054 return hr;
3057 static HRESULT STDMETHODCALLTYPE debugcontrol_ReadBugCheckData(IDebugControl2 *iface, ULONG *code, ULONG64 *arg1,
3058 ULONG64 *arg2, ULONG64 *arg3, ULONG64 *arg4)
3060 FIXME("%p, %p, %p, %p, %p, %p stub.\n", iface, code, arg1, arg2, arg3, arg4);
3062 return E_NOTIMPL;
3065 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberSupportedProcessorTypes(IDebugControl2 *iface, ULONG *count)
3067 FIXME("%p, %p stub.\n", iface, count);
3069 return E_NOTIMPL;
3072 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSupportedProcessorTypes(IDebugControl2 *iface, ULONG start,
3073 ULONG count, ULONG *types)
3075 FIXME("%p, %u, %u, %p stub.\n", iface, start, count, types);
3077 return E_NOTIMPL;
3080 static HRESULT STDMETHODCALLTYPE debugcontrol_GetProcessorTypeNames(IDebugControl2 *iface, ULONG type, char *full_name,
3081 ULONG full_name_buffer_size, ULONG *full_name_size, char *abbrev_name, ULONG abbrev_name_buffer_size,
3082 ULONG *abbrev_name_size)
3084 FIXME("%p, %u, %p, %u, %p, %p, %u, %p stub.\n", iface, type, full_name, full_name_buffer_size, full_name_size,
3085 abbrev_name, abbrev_name_buffer_size, abbrev_name_size);
3087 return E_NOTIMPL;
3090 static HRESULT STDMETHODCALLTYPE debugcontrol_GetEffectiveProcessorType(IDebugControl2 *iface, ULONG *type)
3092 FIXME("%p, %p stub.\n", iface, type);
3094 return E_NOTIMPL;
3097 static HRESULT STDMETHODCALLTYPE debugcontrol_SetEffectiveProcessorType(IDebugControl2 *iface, ULONG type)
3099 FIXME("%p, %u stub.\n", iface, type);
3101 return E_NOTIMPL;
3104 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExecutionStatus(IDebugControl2 *iface, ULONG *status)
3106 FIXME("%p, %p stub.\n", iface, status);
3108 return E_NOTIMPL;
3111 static HRESULT STDMETHODCALLTYPE debugcontrol_SetExecutionStatus(IDebugControl2 *iface, ULONG status)
3113 FIXME("%p, %u stub.\n", iface, status);
3115 return E_NOTIMPL;
3118 static HRESULT STDMETHODCALLTYPE debugcontrol_GetCodeLevel(IDebugControl2 *iface, ULONG *level)
3120 FIXME("%p, %p stub.\n", iface, level);
3122 return E_NOTIMPL;
3125 static HRESULT STDMETHODCALLTYPE debugcontrol_SetCodeLevel(IDebugControl2 *iface, ULONG level)
3127 FIXME("%p, %u stub.\n", iface, level);
3129 return E_NOTIMPL;
3132 static HRESULT STDMETHODCALLTYPE debugcontrol_GetEngineOptions(IDebugControl2 *iface, ULONG *options)
3134 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3136 TRACE("%p, %p.\n", iface, options);
3138 *options = debug_client->engine_options;
3140 return S_OK;
3143 static HRESULT STDMETHODCALLTYPE debugcontrol_AddEngineOptions(IDebugControl2 *iface, ULONG options)
3145 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3147 TRACE("%p, %#x.\n", iface, options);
3149 if (options & ~DEBUG_ENGOPT_ALL)
3150 return E_INVALIDARG;
3152 debug_client->engine_options |= options;
3154 return S_OK;
3157 static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveEngineOptions(IDebugControl2 *iface, ULONG options)
3159 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3161 TRACE("%p, %#x.\n", iface, options);
3163 debug_client->engine_options &= ~options;
3165 return S_OK;
3168 static HRESULT STDMETHODCALLTYPE debugcontrol_SetEngineOptions(IDebugControl2 *iface, ULONG options)
3170 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3172 TRACE("%p, %#x.\n", iface, options);
3174 if (options & ~DEBUG_ENGOPT_ALL)
3175 return E_INVALIDARG;
3177 debug_client->engine_options = options;
3179 return S_OK;
3182 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSystemErrorControl(IDebugControl2 *iface, ULONG *output_level,
3183 ULONG *break_level)
3185 FIXME("%p, %p, %p stub.\n", iface, output_level, break_level);
3187 return E_NOTIMPL;
3190 static HRESULT STDMETHODCALLTYPE debugcontrol_SetSystemErrorControl(IDebugControl2 *iface, ULONG output_level,
3191 ULONG break_level)
3193 FIXME("%p, %u, %u stub.\n", iface, output_level, break_level);
3195 return E_NOTIMPL;
3198 static HRESULT STDMETHODCALLTYPE debugcontrol_GetTextMacro(IDebugControl2 *iface, ULONG slot, char *buffer,
3199 ULONG buffer_size, ULONG *macro_size)
3201 FIXME("%p, %u, %p, %u, %p stub.\n", iface, slot, buffer, buffer_size, macro_size);
3203 return E_NOTIMPL;
3206 static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextMacro(IDebugControl2 *iface, ULONG slot, const char *macro)
3208 FIXME("%p, %u, %s stub.\n", iface, slot, debugstr_a(macro));
3210 return E_NOTIMPL;
3213 static HRESULT STDMETHODCALLTYPE debugcontrol_GetRadix(IDebugControl2 *iface, ULONG *radix)
3215 FIXME("%p, %p stub.\n", iface, radix);
3217 return E_NOTIMPL;
3220 static HRESULT STDMETHODCALLTYPE debugcontrol_SetRadix(IDebugControl2 *iface, ULONG radix)
3222 FIXME("%p, %u stub.\n", iface, radix);
3224 return E_NOTIMPL;
3227 static HRESULT STDMETHODCALLTYPE debugcontrol_Evaluate(IDebugControl2 *iface, const char *expression,
3228 ULONG desired_type, DEBUG_VALUE *value, ULONG *remainder_index)
3230 FIXME("%p, %s, %u, %p, %p stub.\n", iface, debugstr_a(expression), desired_type, value, remainder_index);
3232 return E_NOTIMPL;
3235 static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValue(IDebugControl2 *iface, DEBUG_VALUE input, ULONG output_type,
3236 DEBUG_VALUE *output)
3238 FIXME("%p, %u, %p stub.\n", iface, output_type, output);
3240 return E_NOTIMPL;
3243 static HRESULT STDMETHODCALLTYPE debugcontrol_CoerceValues(IDebugControl2 *iface, ULONG count, DEBUG_VALUE *input,
3244 ULONG *output_types, DEBUG_VALUE *output)
3246 FIXME("%p, %u, %p, %p, %p stub.\n", iface, count, input, output_types, output);
3248 return E_NOTIMPL;
3251 static HRESULT STDMETHODCALLTYPE debugcontrol_Execute(IDebugControl2 *iface, ULONG output_control, const char *command,
3252 ULONG flags)
3254 FIXME("%p, %u, %s, %#x stub.\n", iface, output_control, debugstr_a(command), flags);
3256 return E_NOTIMPL;
3259 static HRESULT STDMETHODCALLTYPE debugcontrol_ExecuteCommandFile(IDebugControl2 *iface, ULONG output_control,
3260 const char *command_file, ULONG flags)
3262 FIXME("%p, %u, %s, %#x stub.\n", iface, output_control, debugstr_a(command_file), flags);
3264 return E_NOTIMPL;
3267 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberBreakpoints(IDebugControl2 *iface, ULONG *count)
3269 FIXME("%p, %p stub.\n", iface, count);
3271 return E_NOTIMPL;
3274 static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointByIndex(IDebugControl2 *iface, ULONG index,
3275 IDebugBreakpoint **bp)
3277 FIXME("%p, %u, %p stub.\n", iface, index, bp);
3279 return E_NOTIMPL;
3282 static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointById(IDebugControl2 *iface, ULONG id, IDebugBreakpoint **bp)
3284 FIXME("%p, %u, %p stub.\n", iface, id, bp);
3286 return E_NOTIMPL;
3289 static HRESULT STDMETHODCALLTYPE debugcontrol_GetBreakpointParameters(IDebugControl2 *iface, ULONG count, ULONG *ids,
3290 ULONG start, DEBUG_BREAKPOINT_PARAMETERS *parameters)
3292 FIXME("%p, %u, %p, %u, %p stub.\n", iface, count, ids, start, parameters);
3294 return E_NOTIMPL;
3297 static HRESULT STDMETHODCALLTYPE debugcontrol_AddBreakpoint(IDebugControl2 *iface, ULONG type, ULONG desired_id,
3298 IDebugBreakpoint **bp)
3300 FIXME("%p, %u, %u, %p stub.\n", iface, type, desired_id, bp);
3302 return E_NOTIMPL;
3305 static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveBreakpoint(IDebugControl2 *iface, IDebugBreakpoint *bp)
3307 FIXME("%p, %p stub.\n", iface, bp);
3309 return E_NOTIMPL;
3312 static HRESULT STDMETHODCALLTYPE debugcontrol_AddExtension(IDebugControl2 *iface, const char *path, ULONG flags,
3313 ULONG64 *handle)
3315 FIXME("%p, %s, %#x, %p stub.\n", iface, debugstr_a(path), flags, handle);
3317 return E_NOTIMPL;
3320 static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveExtension(IDebugControl2 *iface, ULONG64 handle)
3322 FIXME("%p, %s stub.\n", iface, wine_dbgstr_longlong(handle));
3324 return E_NOTIMPL;
3327 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionByPath(IDebugControl2 *iface, const char *path,
3328 ULONG64 *handle)
3330 FIXME("%p, %s, %p stub.\n", iface, debugstr_a(path), handle);
3332 return E_NOTIMPL;
3335 static HRESULT STDMETHODCALLTYPE debugcontrol_CallExtension(IDebugControl2 *iface, ULONG64 handle,
3336 const char *function, const char *args)
3338 FIXME("%p, %s, %s, %s stub.\n", iface, wine_dbgstr_longlong(handle), debugstr_a(function), debugstr_a(args));
3340 return E_NOTIMPL;
3343 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExtensionFunction(IDebugControl2 *iface, ULONG64 handle,
3344 const char *name, void *function)
3346 FIXME("%p, %s, %s, %p stub.\n", iface, wine_dbgstr_longlong(handle), debugstr_a(name), function);
3348 return E_NOTIMPL;
3351 static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis32(IDebugControl2 *iface,
3352 PWINDBG_EXTENSION_APIS32 api)
3354 FIXME("%p, %p stub.\n", iface, api);
3356 return E_NOTIMPL;
3359 static HRESULT STDMETHODCALLTYPE debugcontrol_GetWindbgExtensionApis64(IDebugControl2 *iface,
3360 PWINDBG_EXTENSION_APIS64 api)
3362 FIXME("%p, %p stub.\n", iface, api);
3364 return E_NOTIMPL;
3367 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberEventFilters(IDebugControl2 *iface, ULONG *specific_events,
3368 ULONG *specific_exceptions, ULONG *arbitrary_exceptions)
3370 FIXME("%p, %p, %p, %p stub.\n", iface, specific_events, specific_exceptions, arbitrary_exceptions);
3372 return E_NOTIMPL;
3375 static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterText(IDebugControl2 *iface, ULONG index, char *buffer,
3376 ULONG buffer_size, ULONG *text_size)
3378 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, text_size);
3380 return E_NOTIMPL;
3383 static HRESULT STDMETHODCALLTYPE debugcontrol_GetEventFilterCommand(IDebugControl2 *iface, ULONG index, char *buffer,
3384 ULONG buffer_size, ULONG *command_size)
3386 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, command_size);
3388 return E_NOTIMPL;
3391 static HRESULT STDMETHODCALLTYPE debugcontrol_SetEventFilterCommand(IDebugControl2 *iface, ULONG index,
3392 const char *command)
3394 FIXME("%p, %u, %s stub.\n", iface, index, debugstr_a(command));
3396 return E_NOTIMPL;
3399 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterParameters(IDebugControl2 *iface, ULONG start,
3400 ULONG count, DEBUG_SPECIFIC_FILTER_PARAMETERS *parameters)
3402 FIXME("%p, %u, %u, %p stub.\n", iface, start, count, parameters);
3404 return E_NOTIMPL;
3407 static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterParameters(IDebugControl2 *iface, ULONG start,
3408 ULONG count, DEBUG_SPECIFIC_FILTER_PARAMETERS *parameters)
3410 FIXME("%p, %u, %u, %p stub.\n", iface, start, count, parameters);
3412 return E_NOTIMPL;
3415 static HRESULT STDMETHODCALLTYPE debugcontrol_GetSpecificFilterArgument(IDebugControl2 *iface, ULONG index,
3416 char *buffer, ULONG buffer_size, ULONG *argument_size)
3418 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, argument_size);
3420 return E_NOTIMPL;
3423 static HRESULT STDMETHODCALLTYPE debugcontrol_SetSpecificFilterArgument(IDebugControl2 *iface, ULONG index,
3424 const char *argument)
3426 FIXME("%p, %u, %s stub.\n", iface, index, debugstr_a(argument));
3428 return E_NOTIMPL;
3431 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterParameters(IDebugControl2 *iface, ULONG count,
3432 ULONG *codes, ULONG start, DEBUG_EXCEPTION_FILTER_PARAMETERS *parameters)
3434 FIXME("%p, %u, %p, %u, %p stub.\n", iface, count, codes, start, parameters);
3436 return E_NOTIMPL;
3439 static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterParameters(IDebugControl2 *iface, ULONG count,
3440 DEBUG_EXCEPTION_FILTER_PARAMETERS *parameters)
3442 FIXME("%p, %u, %p stub.\n", iface, count, parameters);
3444 return E_NOTIMPL;
3447 static HRESULT STDMETHODCALLTYPE debugcontrol_GetExceptionFilterSecondCommand(IDebugControl2 *iface, ULONG index,
3448 char *buffer, ULONG buffer_size, ULONG *command_size)
3450 FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, command_size);
3452 return E_NOTIMPL;
3455 static HRESULT STDMETHODCALLTYPE debugcontrol_SetExceptionFilterSecondCommand(IDebugControl2 *iface, ULONG index,
3456 const char *command)
3458 FIXME("%p, %u, %s stub.\n", iface, index, debugstr_a(command));
3460 return E_NOTIMPL;
3463 static HRESULT STDMETHODCALLTYPE debugcontrol_WaitForEvent(IDebugControl2 *iface, ULONG flags, ULONG timeout)
3465 struct debug_client *debug_client = impl_from_IDebugControl2(iface);
3466 struct target_process *target;
3468 TRACE("%p, %#x, %u.\n", iface, flags, timeout);
3470 /* FIXME: only one target is used currently */
3472 if (!(target = debug_client_get_target(debug_client)))
3473 return E_UNEXPECTED;
3475 if (target->attach_flags & DEBUG_ATTACH_NONINVASIVE)
3477 BOOL suspend = !(target->attach_flags & DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND);
3478 DWORD access = PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_LIMITED_INFORMATION;
3479 NTSTATUS status;
3481 if (suspend)
3482 access |= PROCESS_SUSPEND_RESUME;
3484 target->handle = OpenProcess(access, FALSE, target->pid);
3485 if (!target->handle)
3487 WARN("Failed to get process handle for pid %#x.\n", target->pid);
3488 return E_UNEXPECTED;
3491 if (suspend)
3493 status = NtSuspendProcess(target->handle);
3494 if (status)
3495 WARN("Failed to suspend a process, status %#x.\n", status);
3498 return S_OK;
3500 else
3502 FIXME("Unsupported attach flags %#x.\n", target->attach_flags);
3505 return E_NOTIMPL;
3508 static HRESULT STDMETHODCALLTYPE debugcontrol_GetLastEventInformation(IDebugControl2 *iface, ULONG *type, ULONG *pid,
3509 ULONG *tid, void *extra_info, ULONG extra_info_size, ULONG *extra_info_used, char *description,
3510 ULONG desc_size, ULONG *desc_used)
3512 FIXME("%p, %p, %p, %p, %p, %u, %p, %p, %u, %p stub.\n", iface, type, pid, tid, extra_info, extra_info_size,
3513 extra_info_used, description, desc_size, desc_used);
3515 return E_NOTIMPL;
3518 static HRESULT STDMETHODCALLTYPE debugcontrol_GetCurrentTimeDate(IDebugControl2 *iface, ULONG timedate)
3520 FIXME("%p, %u stub.\n", iface, timedate);
3522 return E_NOTIMPL;
3525 static HRESULT STDMETHODCALLTYPE debugcontrol_GetCurrentSystemUpTime(IDebugControl2 *iface, ULONG uptime)
3527 FIXME("%p, %u stub.\n", iface, uptime);
3529 return E_NOTIMPL;
3532 static HRESULT STDMETHODCALLTYPE debugcontrol_GetDumpFormatFlags(IDebugControl2 *iface, ULONG *flags)
3534 FIXME("%p, %p stub.\n", iface, flags);
3536 return E_NOTIMPL;
3539 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberTextPlacements(IDebugControl2 *iface, ULONG *count)
3541 FIXME("%p, %p stub.\n", iface, count);
3543 return E_NOTIMPL;
3546 static HRESULT STDMETHODCALLTYPE debugcontrol_GetNumberTextReplacement(IDebugControl2 *iface, const char *src_text,
3547 ULONG index, char *src_buffer, ULONG src_buffer_size, ULONG *src_size, char *dst_buffer,
3548 ULONG dst_buffer_size, ULONG *dst_size)
3550 FIXME("%p, %s, %u, %p, %u, %p, %p, %u, %p stub.\n", iface, debugstr_a(src_text), index, src_buffer,
3551 src_buffer_size, src_size, dst_buffer, dst_buffer_size, dst_size);
3553 return E_NOTIMPL;
3556 static HRESULT STDMETHODCALLTYPE debugcontrol_SetTextReplacement(IDebugControl2 *iface, const char *src_text,
3557 const char *dst_text)
3559 FIXME("%p, %s, %s stub.\n", iface, debugstr_a(src_text), debugstr_a(dst_text));
3561 return E_NOTIMPL;
3564 static HRESULT STDMETHODCALLTYPE debugcontrol_RemoveTextReplacements(IDebugControl2 *iface)
3566 FIXME("%p stub.\n", iface);
3568 return E_NOTIMPL;
3571 static HRESULT STDMETHODCALLTYPE debugcontrol_OutputTextReplacements(IDebugControl2 *iface, ULONG output_control,
3572 ULONG flags)
3574 FIXME("%p, %u, %#x stub.\n", iface, output_control, flags);
3576 return E_NOTIMPL;
3579 static const IDebugControl2Vtbl debugcontrolvtbl =
3581 debugcontrol_QueryInterface,
3582 debugcontrol_AddRef,
3583 debugcontrol_Release,
3584 debugcontrol_GetInterrupt,
3585 debugcontrol_SetInterrupt,
3586 debugcontrol_GetInterruptTimeout,
3587 debugcontrol_SetInterruptTimeout,
3588 debugcontrol_GetLogFile,
3589 debugcontrol_OpenLogFile,
3590 debugcontrol_CloseLogFile,
3591 debugcontrol_GetLogMask,
3592 debugcontrol_SetLogMask,
3593 debugcontrol_Input,
3594 debugcontrol_ReturnInput,
3595 debugcontrol_Output,
3596 debugcontrol_OutputVaList,
3597 debugcontrol_ControlledOutput,
3598 debugcontrol_ControlledOutputVaList,
3599 debugcontrol_OutputPrompt,
3600 debugcontrol_OutputPromptVaList,
3601 debugcontrol_GetPromptText,
3602 debugcontrol_OutputCurrentState,
3603 debugcontrol_OutputVersionInformation,
3604 debugcontrol_GetNotifyEventHandle,
3605 debugcontrol_SetNotifyEventHandle,
3606 debugcontrol_Assemble,
3607 debugcontrol_Disassemble,
3608 debugcontrol_GetDisassembleEffectiveOffset,
3609 debugcontrol_OutputDisassembly,
3610 debugcontrol_OutputDisassemblyLines,
3611 debugcontrol_GetNearInstruction,
3612 debugcontrol_GetStackTrace,
3613 debugcontrol_GetReturnOffset,
3614 debugcontrol_OutputStackTrace,
3615 debugcontrol_GetDebuggeeType,
3616 debugcontrol_GetActualProcessorType,
3617 debugcontrol_GetExecutingProcessorType,
3618 debugcontrol_GetNumberPossibleExecutingProcessorTypes,
3619 debugcontrol_GetPossibleExecutingProcessorTypes,
3620 debugcontrol_GetNumberProcessors,
3621 debugcontrol_GetSystemVersion,
3622 debugcontrol_GetPageSize,
3623 debugcontrol_IsPointer64Bit,
3624 debugcontrol_ReadBugCheckData,
3625 debugcontrol_GetNumberSupportedProcessorTypes,
3626 debugcontrol_GetSupportedProcessorTypes,
3627 debugcontrol_GetProcessorTypeNames,
3628 debugcontrol_GetEffectiveProcessorType,
3629 debugcontrol_SetEffectiveProcessorType,
3630 debugcontrol_GetExecutionStatus,
3631 debugcontrol_SetExecutionStatus,
3632 debugcontrol_GetCodeLevel,
3633 debugcontrol_SetCodeLevel,
3634 debugcontrol_GetEngineOptions,
3635 debugcontrol_AddEngineOptions,
3636 debugcontrol_RemoveEngineOptions,
3637 debugcontrol_SetEngineOptions,
3638 debugcontrol_GetSystemErrorControl,
3639 debugcontrol_SetSystemErrorControl,
3640 debugcontrol_GetTextMacro,
3641 debugcontrol_SetTextMacro,
3642 debugcontrol_GetRadix,
3643 debugcontrol_SetRadix,
3644 debugcontrol_Evaluate,
3645 debugcontrol_CoerceValue,
3646 debugcontrol_CoerceValues,
3647 debugcontrol_Execute,
3648 debugcontrol_ExecuteCommandFile,
3649 debugcontrol_GetNumberBreakpoints,
3650 debugcontrol_GetBreakpointByIndex,
3651 debugcontrol_GetBreakpointById,
3652 debugcontrol_GetBreakpointParameters,
3653 debugcontrol_AddBreakpoint,
3654 debugcontrol_RemoveBreakpoint,
3655 debugcontrol_AddExtension,
3656 debugcontrol_RemoveExtension,
3657 debugcontrol_GetExtensionByPath,
3658 debugcontrol_CallExtension,
3659 debugcontrol_GetExtensionFunction,
3660 debugcontrol_GetWindbgExtensionApis32,
3661 debugcontrol_GetWindbgExtensionApis64,
3662 debugcontrol_GetNumberEventFilters,
3663 debugcontrol_GetEventFilterText,
3664 debugcontrol_GetEventFilterCommand,
3665 debugcontrol_SetEventFilterCommand,
3666 debugcontrol_GetSpecificFilterParameters,
3667 debugcontrol_SetSpecificFilterParameters,
3668 debugcontrol_GetSpecificFilterArgument,
3669 debugcontrol_SetSpecificFilterArgument,
3670 debugcontrol_GetExceptionFilterParameters,
3671 debugcontrol_SetExceptionFilterParameters,
3672 debugcontrol_GetExceptionFilterSecondCommand,
3673 debugcontrol_SetExceptionFilterSecondCommand,
3674 debugcontrol_WaitForEvent,
3675 debugcontrol_GetLastEventInformation,
3676 debugcontrol_GetCurrentTimeDate,
3677 debugcontrol_GetCurrentSystemUpTime,
3678 debugcontrol_GetDumpFormatFlags,
3679 debugcontrol_GetNumberTextPlacements,
3680 debugcontrol_GetNumberTextReplacement,
3681 debugcontrol_SetTextReplacement,
3682 debugcontrol_RemoveTextReplacements,
3683 debugcontrol_OutputTextReplacements,
3686 static HRESULT STDMETHODCALLTYPE debugadvanced_QueryInterface(IDebugAdvanced *iface, REFIID riid, void **obj)
3688 struct debug_client *debug_client = impl_from_IDebugAdvanced(iface);
3689 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3690 return IUnknown_QueryInterface(unk, riid, obj);
3693 static ULONG STDMETHODCALLTYPE debugadvanced_AddRef(IDebugAdvanced *iface)
3695 struct debug_client *debug_client = impl_from_IDebugAdvanced(iface);
3696 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3697 return IUnknown_AddRef(unk);
3700 static ULONG STDMETHODCALLTYPE debugadvanced_Release(IDebugAdvanced *iface)
3702 struct debug_client *debug_client = impl_from_IDebugAdvanced(iface);
3703 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3704 return IUnknown_Release(unk);
3707 static HRESULT STDMETHODCALLTYPE debugadvanced_GetThreadContext(IDebugAdvanced *iface, void *context,
3708 ULONG context_size)
3710 FIXME("%p, %p, %u stub.\n", iface, context, context_size);
3712 return E_NOTIMPL;
3715 static HRESULT STDMETHODCALLTYPE debugadvanced_SetThreadContext(IDebugAdvanced *iface, void *context,
3716 ULONG context_size)
3718 FIXME("%p, %p, %u stub.\n", iface, context, context_size);
3720 return E_NOTIMPL;
3723 static const IDebugAdvancedVtbl debugadvancedvtbl =
3725 debugadvanced_QueryInterface,
3726 debugadvanced_AddRef,
3727 debugadvanced_Release,
3728 /* IDebugAdvanced */
3729 debugadvanced_GetThreadContext,
3730 debugadvanced_SetThreadContext,
3734 static HRESULT STDMETHODCALLTYPE debugsystemobjects_QueryInterface(IDebugSystemObjects *iface, REFIID riid, void **obj)
3736 struct debug_client *debug_client = impl_from_IDebugSystemObjects(iface);
3737 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3738 return IUnknown_QueryInterface(unk, riid, obj);
3741 static ULONG STDMETHODCALLTYPE debugsystemobjects_AddRef(IDebugSystemObjects *iface)
3743 struct debug_client *debug_client = impl_from_IDebugSystemObjects(iface);
3744 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3745 return IUnknown_AddRef(unk);
3748 static ULONG STDMETHODCALLTYPE debugsystemobjects_Release(IDebugSystemObjects *iface)
3750 struct debug_client *debug_client = impl_from_IDebugSystemObjects(iface);
3751 IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
3752 return IUnknown_Release(unk);
3755 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetEventThread(IDebugSystemObjects *iface, ULONG *id)
3757 FIXME("%p, %p stub.\n", iface, id);
3759 return E_NOTIMPL;
3762 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetEventProcess(IDebugSystemObjects *iface, ULONG *id)
3764 FIXME("%p, %p stub.\n", iface, id);
3766 return E_NOTIMPL;
3769 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadId(IDebugSystemObjects *iface, ULONG *id)
3771 FIXME("%p, %p stub.\n", iface, id);
3773 return E_NOTIMPL;
3776 static HRESULT STDMETHODCALLTYPE debugsystemobjects_SetCurrentThreadId(IDebugSystemObjects *iface, ULONG id)
3778 FIXME("%p, %u stub.\n", iface, id);
3780 return E_NOTIMPL;
3783 static HRESULT STDMETHODCALLTYPE debugsystemobjects_SetCurrentProcessId(IDebugSystemObjects *iface, ULONG id)
3785 FIXME("%p, %u stub.\n", iface, id);
3787 return E_NOTIMPL;
3790 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetNumberThreads(IDebugSystemObjects *iface, ULONG *number)
3792 FIXME("%p, %p stub.\n", iface, number);
3794 return E_NOTIMPL;
3797 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetTotalNumberThreads(IDebugSystemObjects *iface, ULONG *total,
3798 ULONG *largest_process)
3800 FIXME("%p, %p, %p stub.\n", iface, total, largest_process);
3802 return E_NOTIMPL;
3805 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdsByIndex(IDebugSystemObjects *iface, ULONG start,
3806 ULONG count, ULONG *ids, ULONG *sysids)
3808 FIXME("%p, %u, %u, %p, %p stub.\n", iface, start, count, ids, sysids);
3810 return E_NOTIMPL;
3813 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdByProcessor(IDebugSystemObjects *iface, ULONG processor,
3814 ULONG *id)
3816 FIXME("%p, %u, %p stub.\n", iface, processor, id);
3818 return E_NOTIMPL;
3821 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadDataOffset(IDebugSystemObjects *iface,
3822 ULONG64 *offset)
3824 FIXME("%p, %p stub.\n", iface, offset);
3826 return E_NOTIMPL;
3829 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdByDataOffset(IDebugSystemObjects *iface, ULONG64 offset,
3830 ULONG *id)
3832 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), id);
3834 return E_NOTIMPL;
3837 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadTeb(IDebugSystemObjects *iface, ULONG64 *offset)
3839 FIXME("%p, %p stub.\n", iface, offset);
3841 return E_NOTIMPL;
3844 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdByTeb(IDebugSystemObjects *iface, ULONG64 offset,
3845 ULONG *id)
3847 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), id);
3849 return E_NOTIMPL;
3852 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadSystemId(IDebugSystemObjects *iface, ULONG *sysid)
3854 FIXME("%p, %p stub.\n", iface, sysid);
3856 return E_NOTIMPL;
3859 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdBySystemId(IDebugSystemObjects *iface, ULONG sysid,
3860 ULONG *id)
3862 FIXME("%p, %u, %p stub.\n", iface, sysid, id);
3864 return E_NOTIMPL;
3867 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentThreadHandle(IDebugSystemObjects *iface, ULONG64 *handle)
3869 FIXME("%p, %p stub.\n", iface, handle);
3871 return E_NOTIMPL;
3874 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetThreadIdByHandle(IDebugSystemObjects *iface, ULONG64 handle,
3875 ULONG *id)
3877 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(handle), id);
3879 return E_NOTIMPL;
3882 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetNumberProcesses(IDebugSystemObjects *iface, ULONG *number)
3884 FIXME("%p, %p stub.\n", iface, number);
3886 return E_NOTIMPL;
3889 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdsByIndex(IDebugSystemObjects *iface, ULONG start,
3890 ULONG count, ULONG *ids, ULONG *sysids)
3892 FIXME("%p, %u, %u, %p, %p stub.\n", iface, start, count, ids, sysids);
3894 return E_NOTIMPL;
3897 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessDataOffset(IDebugSystemObjects *iface,
3898 ULONG64 *offset)
3900 FIXME("%p, %p stub.\n", iface, offset);
3902 return E_NOTIMPL;
3905 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdByDataOffset(IDebugSystemObjects *iface,
3906 ULONG64 offset, ULONG *id)
3908 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), id);
3910 return E_NOTIMPL;
3913 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessPeb(IDebugSystemObjects *iface, ULONG64 *offset)
3915 FIXME("%p, %p stub.\n", iface, offset);
3917 return E_NOTIMPL;
3920 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdByPeb(IDebugSystemObjects *iface, ULONG64 offset,
3921 ULONG *id)
3923 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(offset), id);
3925 return E_NOTIMPL;
3928 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessSystemId(IDebugSystemObjects *iface, ULONG *sysid)
3930 FIXME("%p, %p stub.\n", iface, sysid);
3932 return E_NOTIMPL;
3935 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdBySystemId(IDebugSystemObjects *iface, ULONG sysid,
3936 ULONG *id)
3938 FIXME("%p, %u, %p stub.\n", iface, sysid, id);
3940 return E_NOTIMPL;
3943 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessHandle(IDebugSystemObjects *iface,
3944 ULONG64 *handle)
3946 FIXME("%p, %p stub.\n", iface, handle);
3948 return E_NOTIMPL;
3951 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetProcessIdByHandle(IDebugSystemObjects *iface, ULONG64 handle,
3952 ULONG *id)
3954 FIXME("%p, %s, %p stub.\n", iface, wine_dbgstr_longlong(handle), id);
3956 return E_NOTIMPL;
3959 static HRESULT STDMETHODCALLTYPE debugsystemobjects_GetCurrentProcessExecutableName(IDebugSystemObjects *iface,
3960 char *buffer, ULONG buffer_size, ULONG *exe_size)
3962 FIXME("%p, %p, %u, %p stub.\n", iface, buffer, buffer_size, exe_size);
3964 return E_NOTIMPL;
3967 static const IDebugSystemObjectsVtbl debugsystemobjectsvtbl =
3969 debugsystemobjects_QueryInterface,
3970 debugsystemobjects_AddRef,
3971 debugsystemobjects_Release,
3972 debugsystemobjects_GetEventThread,
3973 debugsystemobjects_GetEventProcess,
3974 debugsystemobjects_GetCurrentThreadId,
3975 debugsystemobjects_SetCurrentThreadId,
3976 debugsystemobjects_SetCurrentProcessId,
3977 debugsystemobjects_GetNumberThreads,
3978 debugsystemobjects_GetTotalNumberThreads,
3979 debugsystemobjects_GetThreadIdsByIndex,
3980 debugsystemobjects_GetThreadIdByProcessor,
3981 debugsystemobjects_GetCurrentThreadDataOffset,
3982 debugsystemobjects_GetThreadIdByDataOffset,
3983 debugsystemobjects_GetCurrentThreadTeb,
3984 debugsystemobjects_GetThreadIdByTeb,
3985 debugsystemobjects_GetCurrentThreadSystemId,
3986 debugsystemobjects_GetThreadIdBySystemId,
3987 debugsystemobjects_GetCurrentThreadHandle,
3988 debugsystemobjects_GetThreadIdByHandle,
3989 debugsystemobjects_GetNumberProcesses,
3990 debugsystemobjects_GetProcessIdsByIndex,
3991 debugsystemobjects_GetCurrentProcessDataOffset,
3992 debugsystemobjects_GetProcessIdByDataOffset,
3993 debugsystemobjects_GetCurrentProcessPeb,
3994 debugsystemobjects_GetProcessIdByPeb,
3995 debugsystemobjects_GetCurrentProcessSystemId,
3996 debugsystemobjects_GetProcessIdBySystemId,
3997 debugsystemobjects_GetCurrentProcessHandle,
3998 debugsystemobjects_GetProcessIdByHandle,
3999 debugsystemobjects_GetCurrentProcessExecutableName,
4002 /************************************************************
4003 * DebugExtensionInitialize (DBGENG.@)
4005 * Initializing Debug Engine
4007 * PARAMS
4008 * pVersion [O] Receiving the version of extension
4009 * pFlags [O] Reserved
4011 * RETURNS
4012 * Success: S_OK
4013 * Failure: Anything other than S_OK
4015 * BUGS
4016 * Unimplemented
4018 HRESULT WINAPI DebugExtensionInitialize(ULONG * pVersion, ULONG * pFlags)
4020 FIXME("(%p,%p): stub\n", pVersion, pFlags);
4022 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
4024 return E_NOTIMPL;
4027 /************************************************************
4028 * DebugCreate (dbgeng.@)
4030 HRESULT WINAPI DebugCreate(REFIID riid, void **obj)
4032 struct debug_client *debug_client;
4033 IUnknown *unk;
4034 HRESULT hr;
4036 TRACE("%s, %p.\n", debugstr_guid(riid), obj);
4038 debug_client = heap_alloc_zero(sizeof(*debug_client));
4039 if (!debug_client)
4040 return E_OUTOFMEMORY;
4042 debug_client->IDebugClient_iface.lpVtbl = &debugclientvtbl;
4043 debug_client->IDebugDataSpaces_iface.lpVtbl = &debugdataspacesvtbl;
4044 debug_client->IDebugSymbols3_iface.lpVtbl = &debugsymbolsvtbl;
4045 debug_client->IDebugControl2_iface.lpVtbl = &debugcontrolvtbl;
4046 debug_client->IDebugAdvanced_iface.lpVtbl = &debugadvancedvtbl;
4047 debug_client->IDebugSystemObjects_iface.lpVtbl = &debugsystemobjectsvtbl;
4048 debug_client->refcount = 1;
4049 list_init(&debug_client->targets);
4051 unk = (IUnknown *)&debug_client->IDebugClient_iface;
4053 hr = IUnknown_QueryInterface(unk, riid, obj);
4054 IUnknown_Release(unk);
4056 return hr;
4059 /************************************************************
4060 * DebugCreateEx (DBGENG.@)
4062 HRESULT WINAPI DebugCreateEx(REFIID riid, DWORD flags, void **obj)
4064 FIXME("(%s, %#x, %p): stub\n", debugstr_guid(riid), flags, obj);
4066 return E_NOTIMPL;
4069 /************************************************************
4070 * DebugConnect (DBGENG.@)
4072 * Creating Debug Engine client object and connecting it to remote host
4074 * PARAMS
4075 * RemoteOptions [I] Options which define how debugger engine connects to remote host
4076 * InterfaceId [I] Interface Id of debugger client
4077 * pInterface [O] Pointer to interface as requested via InterfaceId
4079 * RETURNS
4080 * Success: S_OK
4081 * Failure: Anything other than S_OK
4083 * BUGS
4084 * Unimplemented
4086 HRESULT WINAPI DebugConnect(PCSTR RemoteOptions, REFIID InterfaceId, PVOID * pInterface)
4088 FIXME("(%p,%p,%p): stub\n", RemoteOptions, InterfaceId, pInterface);
4090 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
4092 return E_NOTIMPL;