ReactOS 0.4.15-dev-7788-g1ad9096
cordebug.c
Go to the documentation of this file.
1/*
2 *
3 * Copyright 2011 Alistair Leslie-Hughes
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#include "mscoree_private.h"
21
22typedef struct DebugProcess
23{
25
27
31
34
35static inline CorDebug *impl_from_ICorDebug( ICorDebug *iface )
36{
37 return CONTAINING_RECORD(iface, CorDebug, ICorDebug_iface);
38}
39
41{
42 return CONTAINING_RECORD(iface, CorDebug, ICorDebugProcessEnum_iface);
43}
44
46{
47 return CONTAINING_RECORD(iface, DebugProcess, ICorDebugProcess_iface);
48}
49
50/* ICorDebugProcess Interface */
52 REFIID riid, void **ppvObject)
53{
55
56 TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
57
58 if ( IsEqualGUID( riid, &IID_ICorDebugProcess ) ||
59 IsEqualGUID( riid, &IID_ICorDebugController ) ||
61 {
62 *ppvObject = &This->ICorDebugProcess_iface;
63 }
64 else
65 {
66 FIXME("Unsupported interface %s\n", debugstr_guid(riid));
67 return E_NOINTERFACE;
68 }
69
70 ICorDebugProcess_AddRef(iface);
71
72 return S_OK;
73}
74
76{
79
80 TRACE("%p ref=%u\n", This, ref);
81
82 return ref;
83}
84
86{
89
90 TRACE("%p ref=%u\n", This, ref);
91
92 if (ref == 0)
93 {
94 if(This->handle)
95 CloseHandle(This->handle);
96
97 if(This->thread)
98 CloseHandle(This->thread);
99
100 if(This->cordebug)
101 ICorDebug_Release(&This->cordebug->ICorDebug_iface);
102
104 }
105
106 return ref;
107}
108
110{
112 FIXME("stub %p\n", This);
113 return E_NOTIMPL;
114}
115
117{
119 TRACE("%p\n", This);
120
121 if(This->thread)
122 ResumeThread(This->thread);
123
124 return S_OK;
125}
126
128{
130 FIXME("stub %p\n", This);
131 return E_NOTIMPL;
132}
133
135 ICorDebugThread *pThread, BOOL *pbQueued)
136{
138 FIXME("stub %p\n", This);
139 return E_NOTIMPL;
140}
141
143 ICorDebugThreadEnum **ppThreads)
144{
146 FIXME("stub %p\n", This);
147 return E_NOTIMPL;
148}
149
151 CorDebugThreadState state, ICorDebugThread *pExceptThisThread)
152{
154 FIXME("stub %p\n", This);
155 return E_NOTIMPL;
156}
157
159{
161 FIXME("stub %p\n", This);
162 return E_NOTIMPL;
163}
164
166{
168 BOOL ret = TRUE;
169
170 TRACE("%p\n", This);
171
172 if(This->handle)
173 {
174 ret = TerminateProcess(This->handle, exitCode);
175 CloseHandle(This->handle);
176 This->handle = NULL;
177 }
178 return ret ? S_OK : E_FAIL;
179}
180
182 ULONG cSnapshots, ICorDebugEditAndContinueSnapshot * pSnapshots[],
183 ICorDebugErrorInfoEnum **pError)
184{
186 FIXME("stub %p\n", This);
187 return E_NOTIMPL;
188}
189
191 ULONG cSnapshots, ICorDebugEditAndContinueSnapshot * pSnapshots[],
192 ICorDebugErrorInfoEnum **pError)
193{
195 FIXME("stub %p\n", This);
196 return E_NOTIMPL;
197}
198
200{
202 TRACE("%p\n", This);
203
204 if(!pdwProcessId)
205 return E_INVALIDARG;
206
207 *pdwProcessId = This->dwProcessID;
208
209 return S_OK;
210}
211
213{
215 TRACE("%p\n", This);
216
217 if(!phProcessHandle)
218 return E_INVALIDARG;
219
220 *phProcessHandle = This->handle;
221
222 return S_OK;
223}
224
226 ICorDebugThread **ppThread)
227{
229 FIXME("stub %p\n", This);
230 return E_NOTIMPL;
231}
232
234 ICorDebugObjectEnum **ppObjects)
235{
237 FIXME("stub %p\n", This);
238 return E_NOTIMPL;
239}
240
242 CORDB_ADDRESS address, BOOL *pbTransitionStub)
243{
245 FIXME("stub %p\n", This);
246 return E_NOTIMPL;
247}
248
250 DWORD threadID, BOOL *pbSuspended)
251{
253 FIXME("stub %p\n", This);
254 return E_NOTIMPL;
255}
256
258 DWORD threadID, ULONG32 contextSize, BYTE context[])
259{
261 FIXME("stub %p\n", This);
262 return E_NOTIMPL;
263}
264
266 DWORD threadID, ULONG32 contextSize, BYTE context[])
267{
269 FIXME("stub %p\n", This);
270 return E_NOTIMPL;
271}
272
275 SIZE_T *read)
276{
278 FIXME("stub %p\n", This);
279 return E_NOTIMPL;
280}
281
284 SIZE_T *written)
285{
287 FIXME("stub %p\n", This);
288 return E_NOTIMPL;
289}
290
292 DWORD threadID)
293{
295 FIXME("stub %p\n", This);
296 return E_NOTIMPL;
297}
298
300 BOOL fOnOff)
301{
303 FIXME("stub %p\n", This);
304 return E_NOTIMPL;
305}
306
308 WCHAR *pLogSwitchName, LONG lLevel)
309{
311 FIXME("stub %p\n", This);
312 return E_NOTIMPL;
313}
314
316 ICorDebugAppDomainEnum **ppAppDomains)
317{
319 FIXME("stub %p\n", This);
320 return E_NOTIMPL;
321}
322
324 ICorDebugValue **ppObject)
325{
327 FIXME("stub %p\n", This);
328 return E_NOTIMPL;
329}
330
332 DWORD fiberCookie, ICorDebugThread **ppThread)
333{
335 FIXME("stub %p\n", This);
336 return E_NOTIMPL;
337}
338
340 DWORD *pThreadID)
341{
343 FIXME("stub %p\n", This);
344 return E_NOTIMPL;
345}
346
347
348/***************************************/
349static const ICorDebugProcessVtbl cordebugprocessVtbl = {
380};
381
382
383static HRESULT CorDebugProcess_Create(CorDebug *cordebug, IUnknown** ppUnk, LPPROCESS_INFORMATION lpProcessInformation)
384{
386
387 This = HeapAlloc( GetProcessHeap(), 0, sizeof *This );
388 if ( !This )
389 return E_OUTOFMEMORY;
390
391 if(!DuplicateHandle(GetCurrentProcess(), lpProcessInformation->hProcess,
393 {
394 ERR("Failed to duplicate process handle\n");
396 return E_FAIL;
397 }
398 if(!DuplicateHandle(GetCurrentProcess(), lpProcessInformation->hThread,
400 {
401 CloseHandle(This->handle);
402
403 ERR("Failed to duplicate thread handle\n");
405 return E_FAIL;
406 }
407
408 This->ICorDebugProcess_iface.lpVtbl = &cordebugprocessVtbl;
409 This->ref = 1;
410 This->cordebug = cordebug;
411 This->dwProcessID = lpProcessInformation->dwProcessId;
412
413 if(This->cordebug)
414 ICorDebug_AddRef(&This->cordebug->ICorDebug_iface);
415
416 *ppUnk = (IUnknown*)&This->ICorDebugProcess_iface;
417
418 return S_OK;
419}
420
421/* ICorDebugProcessEnum Interface */
423{
425
426 TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
427
428 if ( IsEqualGUID( riid, &IID_ICorDebugProcessEnum ) ||
429 IsEqualGUID( riid, &IID_ICorDebugEnum ) ||
431 {
432 *ppvObject = &This->ICorDebugProcessEnum_iface;
433 }
434 else
435 {
436 FIXME("Unsupported interface %s\n", debugstr_guid(riid));
437 return E_NOINTERFACE;
438 }
439
440 ICorDebugProcessEnum_AddRef(iface);
441
442 return S_OK;
443}
444
446{
448 TRACE("%p ref=%u\n", This, This->ref);
449
450 return ICorDebug_AddRef(&This->ICorDebug_iface);
451}
452
454{
456 TRACE("%p ref=%u\n", This, This->ref);
457
458 return ICorDebug_Release(&This->ICorDebug_iface);
459}
460
462{
464 FIXME("stub %p\n", This);
465 return E_NOTIMPL;
466}
467
469{
471 FIXME("stub %p\n", This);
472 return E_NOTIMPL;
473}
474
476{
478 FIXME("stub %p %p\n", This, ppEnum);
479 return E_NOTIMPL;
480}
481
483{
485 TRACE("stub %p %p\n", This, pcelt);
486
487 if(!pcelt)
488 return E_INVALIDARG;
489
490 *pcelt = list_count(&This->processes);
491
492 return S_OK;
493}
494
496 ICorDebugProcess * processes[], ULONG *pceltFetched)
497{
499 FIXME("stub %p %d %p %p\n", This, celt, processes, pceltFetched);
500 return E_NOTIMPL;
501}
502
503static const struct ICorDebugProcessEnumVtbl processenum_vtbl =
504{
513};
514
515/*** IUnknown methods ***/
517{
519
520 TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
521
522 if ( IsEqualGUID( riid, &IID_ICorDebug ) ||
524 {
525 *ppvObject = &This->ICorDebug_iface;
526 }
527 else
528 {
529 FIXME("Unsupported interface %s\n", debugstr_guid(riid));
530 return E_NOINTERFACE;
531 }
532
533 ICorDebug_AddRef( iface );
534
535 return S_OK;
536}
537
539{
542
543 TRACE("%p ref=%u\n", This, ref);
544
545 return ref;
546}
547
549{
552
553 TRACE("%p ref=%u\n", This, ref);
554
555 if (ref == 0)
556 {
557 if(!list_empty(&This->processes))
558 ERR("Processes haven't been removed Correctly\n");
559
560 if(This->runtimehost)
561 ICLRRuntimeHost_Release(This->runtimehost);
562
563 if(This->pCallback)
564 ICorDebugManagedCallback2_Release(This->pCallback2);
565
566 if(This->pCallback)
567 ICorDebugManagedCallback_Release(This->pCallback);
568
570 }
571
572 return ref;
573}
574
575/*** ICorDebug methods ***/
577{
579 FIXME("stub %p\n", This);
580 return S_OK;
581}
582
584{
585 struct CorProcess *cursor, *cursor2;
587 TRACE("stub %p\n", This);
588
589 LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, &This->processes, struct CorProcess, entry)
590 {
591 if(cursor->pProcess)
592 {
593 ICorDebugProcess_Terminate(cursor->pProcess, 0);
594 ICorDebugProcess_Release(cursor->pProcess);
595 }
596
597 list_remove(&cursor->entry);
599 }
600
601 return S_OK;
602}
603
605{
607 HRESULT hr;
608 ICorDebugManagedCallback2 *pCallback2;
609
610 TRACE("%p (%p)\n", This, pCallback);
611
612 if(!pCallback)
613 return E_INVALIDARG;
614
615 hr = ICorDebugManagedCallback_QueryInterface(pCallback, &IID_ICorDebugManagedCallback2, (void**)&pCallback2);
616 if(hr == S_OK)
617 {
618 if(This->pCallback2)
619 ICorDebugManagedCallback2_Release(This->pCallback2);
620
621 if(This->pCallback)
622 ICorDebugManagedCallback_Release(This->pCallback);
623
624 This->pCallback = pCallback;
625 This->pCallback2 = pCallback2;
626
627 ICorDebugManagedCallback_AddRef(This->pCallback);
628 }
629 else
630 {
631 WARN("Debugging without interface ICorDebugManagedCallback2 is currently not supported.\n");
632 }
633
634 return hr;
635}
636
638{
640 FIXME("stub %p %p\n", This, pCallback);
641 return E_NOTIMPL;
642}
643
644static HRESULT WINAPI CorDebug_CreateProcess(ICorDebug *iface, LPCWSTR lpApplicationName,
645 LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes,
646 LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
647 DWORD dwCreationFlags, PVOID lpEnvironment,LPCWSTR lpCurrentDirectory,
648 LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation,
649 CorDebugCreateProcessFlags debuggingFlags, ICorDebugProcess **ppProcess)
650{
652 ICorDebugProcess *pDebugProcess;
653 HRESULT hr;
654
655 TRACE("stub %p %s %s %p %p %d %d %p %s %p %p %d %p\n", This, debugstr_w(lpApplicationName),
656 debugstr_w(lpCommandLine), lpProcessAttributes, lpThreadAttributes,
657 bInheritHandles, dwCreationFlags, lpEnvironment, debugstr_w(lpCurrentDirectory),
658 lpStartupInfo, lpProcessInformation, debuggingFlags, ppProcess);
659
660 if(CreateProcessW(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes,
661 bInheritHandles, dwCreationFlags | CREATE_SUSPENDED, lpEnvironment, lpCurrentDirectory,
662 lpStartupInfo, lpProcessInformation))
663 {
664 hr = CorDebugProcess_Create(This, (IUnknown**)&pDebugProcess, lpProcessInformation);
665 if(hr == S_OK)
666 {
667 struct CorProcess *new_process = HeapAlloc( GetProcessHeap(), 0, sizeof(CorProcess) );
668
669 new_process->pProcess = pDebugProcess;
670 list_add_tail(&This->processes, &new_process->entry);
671
672 ICorDebugProcess_AddRef(pDebugProcess);
673 *ppProcess = pDebugProcess;
674
675 if(This->pCallback)
676 ICorDebugManagedCallback_CreateProcess(This->pCallback, pDebugProcess);
677 }
678 else
679 {
680 TerminateProcess(lpProcessInformation->hProcess, 0);
681 }
682 }
683 else
684 hr = E_FAIL;
685
686 return hr;
687}
688
690 ICorDebugProcess **ppProcess)
691{
693 FIXME("stub %p %d %d %p\n", This, id, win32Attach, ppProcess);
694 return E_NOTIMPL;
695}
696
698{
700 TRACE("stub %p %p\n", This, ppProcess);
701
702 if(!ppProcess)
703 return E_INVALIDARG;
704
705 *ppProcess = &This->ICorDebugProcessEnum_iface;
706 ICorDebugProcessEnum_AddRef(*ppProcess);
707
708 return S_OK;
709}
710
711static HRESULT WINAPI CorDebug_GetProcess(ICorDebug *iface, DWORD dwProcessId, ICorDebugProcess **ppProcess)
712{
714 FIXME("stub %p %d %p\n", This, dwProcessId, ppProcess);
715 return E_NOTIMPL;
716}
717
719 BOOL win32DebuggingEnabled)
720{
722 FIXME("stub %p %d %d\n", This, dwProcessId, win32DebuggingEnabled);
723 return S_OK;
724}
725
726static const struct ICorDebugVtbl cordebug_vtbl =
727{
740};
741
743{
744 CorDebug *This;
745
746 This = HeapAlloc( GetProcessHeap(), 0, sizeof *This );
747 if ( !This )
748 return E_OUTOFMEMORY;
749
750 This->ICorDebug_iface.lpVtbl = &cordebug_vtbl;
751 This->ICorDebugProcessEnum_iface.lpVtbl = &processenum_vtbl;
752 This->ref = 1;
753 This->pCallback = NULL;
754 This->pCallback2 = NULL;
755 This->runtimehost = runtimehost;
756
757 list_init(&This->processes);
758
759 if(This->runtimehost)
760 ICLRRuntimeHost_AddRef(This->runtimehost);
761
762 *ppUnk = (IUnknown*)&This->ICorDebug_iface;
763
764 return S_OK;
765}
#define read
Definition: acwin.h:96
static int state
Definition: maze.c:121
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
static void list_init(struct list_entry *head)
Definition: list.h:51
unsigned int ULONG32
Definition: basetsd.h:123
const GUID IID_IUnknown
#define FIXME(fmt,...)
Definition: debug.h:111
#define WARN(fmt,...)
Definition: debug.h:112
#define ERR(fmt,...)
Definition: debug.h:110
static HRESULT WINAPI cordebugprocess_EnumerateObjects(ICorDebugProcess *iface, ICorDebugObjectEnum **ppObjects)
Definition: cordebug.c:233
static HRESULT WINAPI cordebugprocess_Stop(ICorDebugProcess *iface, DWORD dwTimeoutIgnored)
Definition: cordebug.c:109
static HRESULT WINAPI cordebugprocess_ClearCurrentException(ICorDebugProcess *iface, DWORD threadID)
Definition: cordebug.c:291
static HRESULT CorDebugProcess_Create(CorDebug *cordebug, IUnknown **ppUnk, LPPROCESS_INFORMATION lpProcessInformation)
Definition: cordebug.c:383
static CorDebug * impl_from_ICorDebugProcessEnum(ICorDebugProcessEnum *iface)
Definition: cordebug.c:40
static HRESULT WINAPI cordebugprocess_IsTransitionStub(ICorDebugProcess *iface, CORDB_ADDRESS address, BOOL *pbTransitionStub)
Definition: cordebug.c:241
static HRESULT WINAPI cordebugprocess_Continue(ICorDebugProcess *iface, BOOL fIsOutOfBand)
Definition: cordebug.c:116
static HRESULT WINAPI cordebugprocess_EnableLogMessages(ICorDebugProcess *iface, BOOL fOnOff)
Definition: cordebug.c:299
static HRESULT WINAPI cordebugprocess_SetThreadContext(ICorDebugProcess *iface, DWORD threadID, ULONG32 contextSize, BYTE context[])
Definition: cordebug.c:265
static HRESULT WINAPI cordebugprocess_ThreadForFiberCookie(ICorDebugProcess *iface, DWORD fiberCookie, ICorDebugThread **ppThread)
Definition: cordebug.c:331
static HRESULT WINAPI cordebugprocess_EnumerateThreads(ICorDebugProcess *iface, ICorDebugThreadEnum **ppThreads)
Definition: cordebug.c:142
static CorDebug * impl_from_ICorDebug(ICorDebug *iface)
Definition: cordebug.c:35
static HRESULT WINAPI CorDebug_CreateProcess(ICorDebug *iface, LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, PVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation, CorDebugCreateProcessFlags debuggingFlags, ICorDebugProcess **ppProcess)
Definition: cordebug.c:644
static HRESULT WINAPI CorDebug_SetManagedHandler(ICorDebug *iface, ICorDebugManagedCallback *pCallback)
Definition: cordebug.c:604
static HRESULT WINAPI cordebugprocess_CanCommitChanges(ICorDebugProcess *iface, ULONG cSnapshots, ICorDebugEditAndContinueSnapshot *pSnapshots[], ICorDebugErrorInfoEnum **pError)
Definition: cordebug.c:181
static HRESULT WINAPI cordebugprocess_QueryInterface(ICorDebugProcess *iface, REFIID riid, void **ppvObject)
Definition: cordebug.c:51
static HRESULT WINAPI process_enum_GetCount(ICorDebugProcessEnum *iface, ULONG *pcelt)
Definition: cordebug.c:482
static HRESULT WINAPI cordebugprocess_IsRunning(ICorDebugProcess *iface, BOOL *pbRunning)
Definition: cordebug.c:127
static HRESULT WINAPI cordebugprocess_HasQueuedCallbacks(ICorDebugProcess *iface, ICorDebugThread *pThread, BOOL *pbQueued)
Definition: cordebug.c:134
static ULONG WINAPI cordebugprocess_AddRef(ICorDebugProcess *iface)
Definition: cordebug.c:75
static HRESULT WINAPI cordebugprocess_GetHelperThreadID(ICorDebugProcess *iface, DWORD *pThreadID)
Definition: cordebug.c:339
static HRESULT WINAPI cordebugprocess_SetAllThreadsDebugState(ICorDebugProcess *iface, CorDebugThreadState state, ICorDebugThread *pExceptThisThread)
Definition: cordebug.c:150
static const struct ICorDebugProcessEnumVtbl processenum_vtbl
Definition: cordebug.c:503
static HRESULT WINAPI CorDebug_Initialize(ICorDebug *iface)
Definition: cordebug.c:576
static HRESULT WINAPI cordebugprocess_Detach(ICorDebugProcess *iface)
Definition: cordebug.c:158
static HRESULT WINAPI process_enum_Clone(ICorDebugProcessEnum *iface, ICorDebugEnum **ppEnum)
Definition: cordebug.c:475
static HRESULT WINAPI CorDebug_DebugActiveProcess(ICorDebug *iface, DWORD id, BOOL win32Attach, ICorDebugProcess **ppProcess)
Definition: cordebug.c:689
static HRESULT WINAPI CorDebug_CanLaunchOrAttach(ICorDebug *iface, DWORD dwProcessId, BOOL win32DebuggingEnabled)
Definition: cordebug.c:718
static ULONG WINAPI CorDebug_AddRef(ICorDebug *iface)
Definition: cordebug.c:538
static HRESULT WINAPI cordebugprocess_ModifyLogSwitch(ICorDebugProcess *iface, WCHAR *pLogSwitchName, LONG lLevel)
Definition: cordebug.c:307
static HRESULT WINAPI cordebugprocess_GetThread(ICorDebugProcess *iface, DWORD dwThreadId, ICorDebugThread **ppThread)
Definition: cordebug.c:225
static HRESULT WINAPI CorDebug_SetUnmanagedHandler(ICorDebug *iface, ICorDebugUnmanagedCallback *pCallback)
Definition: cordebug.c:637
static const ICorDebugProcessVtbl cordebugprocessVtbl
Definition: cordebug.c:349
static HRESULT WINAPI cordebugprocess_GetID(ICorDebugProcess *iface, DWORD *pdwProcessId)
Definition: cordebug.c:199
static DebugProcess * impl_from_ICorDebugProcess(ICorDebugProcess *iface)
Definition: cordebug.c:45
static HRESULT WINAPI CorDebug_GetProcess(ICorDebug *iface, DWORD dwProcessId, ICorDebugProcess **ppProcess)
Definition: cordebug.c:711
static HRESULT WINAPI cordebugprocess_GetThreadContext(ICorDebugProcess *iface, DWORD threadID, ULONG32 contextSize, BYTE context[])
Definition: cordebug.c:257
static HRESULT WINAPI cordebugprocess_WriteMemory(ICorDebugProcess *iface, CORDB_ADDRESS address, DWORD size, BYTE buffer[], SIZE_T *written)
Definition: cordebug.c:282
static HRESULT WINAPI cordebugprocess_IsOSSuspended(ICorDebugProcess *iface, DWORD threadID, BOOL *pbSuspended)
Definition: cordebug.c:249
static HRESULT WINAPI process_enum_QueryInterface(ICorDebugProcessEnum *iface, REFIID riid, void **ppvObject)
Definition: cordebug.c:422
static HRESULT WINAPI CorDebug_EnumerateProcesses(ICorDebug *iface, ICorDebugProcessEnum **ppProcess)
Definition: cordebug.c:697
static ULONG WINAPI process_enum_AddRef(ICorDebugProcessEnum *iface)
Definition: cordebug.c:445
static HRESULT WINAPI process_enum_Reset(ICorDebugProcessEnum *iface)
Definition: cordebug.c:468
static HRESULT WINAPI process_enum_Skip(ICorDebugProcessEnum *iface, ULONG celt)
Definition: cordebug.c:461
static HRESULT WINAPI process_enum_Next(ICorDebugProcessEnum *iface, ULONG celt, ICorDebugProcess *processes[], ULONG *pceltFetched)
Definition: cordebug.c:495
static HRESULT WINAPI cordebugprocess_Terminate(ICorDebugProcess *iface, UINT exitCode)
Definition: cordebug.c:165
static ULONG WINAPI process_enum_Release(ICorDebugProcessEnum *iface)
Definition: cordebug.c:453
static HRESULT WINAPI CorDebug_QueryInterface(ICorDebug *iface, REFIID riid, void **ppvObject)
Definition: cordebug.c:516
static HRESULT WINAPI cordebugprocess_ReadMemory(ICorDebugProcess *iface, CORDB_ADDRESS address, DWORD size, BYTE buffer[], SIZE_T *read)
Definition: cordebug.c:273
static HRESULT WINAPI cordebugprocess_GetObject(ICorDebugProcess *iface, ICorDebugValue **ppObject)
Definition: cordebug.c:323
static ULONG WINAPI cordebugprocess_Release(ICorDebugProcess *iface)
Definition: cordebug.c:85
HRESULT CorDebug_Create(ICLRRuntimeHost *runtimehost, IUnknown **ppUnk)
Definition: cordebug.c:742
static ULONG WINAPI CorDebug_Release(ICorDebug *iface)
Definition: cordebug.c:548
static HRESULT WINAPI CorDebug_Terminate(ICorDebug *iface)
Definition: cordebug.c:583
static HRESULT WINAPI cordebugprocess_EnumerateAppDomains(ICorDebugProcess *iface, ICorDebugAppDomainEnum **ppAppDomains)
Definition: cordebug.c:315
static HRESULT WINAPI cordebugprocess_CommitChanges(ICorDebugProcess *iface, ULONG cSnapshots, ICorDebugEditAndContinueSnapshot *pSnapshots[], ICorDebugErrorInfoEnum **pError)
Definition: cordebug.c:190
static const struct ICorDebugVtbl cordebug_vtbl
Definition: cordebug.c:726
static HRESULT WINAPI cordebugprocess_GetHandle(ICorDebugProcess *iface, HPROCESS *phProcessHandle)
Definition: cordebug.c:212
ULONG64 CORDB_ADDRESS
Definition: cordebug.idl:90
CorDebugCreateProcessFlags
Definition: cordebug.idl:136
SIZE_T LPSTARTUPINFOW
Definition: cordebug.idl:85
SIZE_T LPPROCESS_INFORMATION
Definition: cordebug.idl:86
CorDebugThreadState
Definition: cordebug.idl:130
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define CloseHandle
Definition: compat.h:739
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define GetCurrentProcess()
Definition: compat.h:759
#define HeapFree(x, y, z)
Definition: compat.h:735
BOOL WINAPI DuplicateHandle(IN HANDLE hSourceProcessHandle, IN HANDLE hSourceHandle, IN HANDLE hTargetProcessHandle, OUT LPHANDLE lpTargetHandle, IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwOptions)
Definition: handle.c:149
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
Definition: proc.c:4592
BOOL WINAPI TerminateProcess(IN HANDLE hProcess, IN UINT uExitCode)
Definition: proc.c:1532
DWORD WINAPI ResumeThread(IN HANDLE hThread)
Definition: thread.c:567
DWORD dwThreadId
Definition: fdebug.c:31
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxPnpStateCallbackInfo * pCallback
GLsizeiptr size
Definition: glext.h:5919
GLuint address
Definition: glext.h:9393
GLuint buffer
Definition: glext.h:5915
const char cursor[]
Definition: icontest.c:13
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
unsigned int UINT
Definition: ndis.h:50
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
__WINE_SERVER_LIST_INLINE unsigned int list_count(const struct list *list)
Definition: list.h:155
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
struct list entry
ICorDebugProcess * pProcess
DWORD dwProcessID
Definition: cordebug.c:28
ICorDebugProcess ICorDebugProcess_iface
Definition: cordebug.c:24
CorDebug * cordebug
Definition: cordebug.c:26
HANDLE handle
Definition: cordebug.c:29
HANDLE thread
Definition: cordebug.c:30
LONG ref
Definition: cordebug.c:32
Definition: http.c:7252
Definition: send.c:48
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
int ret
#define CREATE_SUSPENDED
Definition: winbase.h:178
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:2364
#define DUPLICATE_SAME_ACCESS
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193