ReactOS  0.4.14-dev-55-g2da92ac
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 
22 typedef struct DebugProcess
23 {
25 
27 
31 
33 } DebugProcess;
34 
35 static 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 
109 static HRESULT WINAPI cordebugprocess_Stop(ICorDebugProcess *iface, DWORD dwTimeoutIgnored)
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 /***************************************/
349 static const ICorDebugProcessVtbl cordebugprocessVtbl = {
380 };
381 
382 
383 static 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 
503 static const struct ICorDebugProcessEnumVtbl processenum_vtbl =
504 {
513 };
514 
515 /*** IUnknown methods ***/
517 {
518  CorDebug *This = impl_from_ICorDebug( iface );
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 {
540  CorDebug *This = impl_from_ICorDebug( iface );
542 
543  TRACE("%p ref=%u\n", This, ref);
544 
545  return ref;
546 }
547 
549 {
550  CorDebug *This = impl_from_ICorDebug( iface );
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 {
578  CorDebug *This = impl_from_ICorDebug( iface );
579  FIXME("stub %p\n", This);
580  return S_OK;
581 }
582 
584 {
585  struct CorProcess *cursor, *cursor2;
586  CorDebug *This = impl_from_ICorDebug( iface );
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 {
606  CorDebug *This = impl_from_ICorDebug( iface );
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 {
639  CorDebug *This = impl_from_ICorDebug( iface );
640  FIXME("stub %p %p\n", This, pCallback);
641  return E_NOTIMPL;
642 }
643 
644 static 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 {
651  CorDebug *This = impl_from_ICorDebug( iface );
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 {
692  CorDebug *This = impl_from_ICorDebug( iface );
693  FIXME("stub %p %d %d %p\n", This, id, win32Attach, ppProcess);
694  return E_NOTIMPL;
695 }
696 
698 {
699  CorDebug *This = impl_from_ICorDebug( iface );
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 
711 static HRESULT WINAPI CorDebug_GetProcess(ICorDebug *iface, DWORD dwProcessId, ICorDebugProcess **ppProcess)
712 {
713  CorDebug *This = impl_from_ICorDebug( iface );
714  FIXME("stub %p %d %p\n", This, dwProcessId, ppProcess);
715  return E_NOTIMPL;
716 }
717 
719  BOOL win32DebuggingEnabled)
720 {
721  CorDebug *This = impl_from_ICorDebug( iface );
722  FIXME("stub %p %d %d\n", This, dwProcessId, win32DebuggingEnabled);
723  return S_OK;
724 }
725 
726 static 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 }
static ULONG WINAPI CorDebug_AddRef(ICorDebug *iface)
Definition: cordebug.c:538
static HRESULT CorDebugProcess_Create(CorDebug *cordebug, IUnknown **ppUnk, LPPROCESS_INFORMATION lpProcessInformation)
Definition: cordebug.c:383
static const struct ICorDebugVtbl cordebug_vtbl
Definition: cordebug.c:726
struct DebugProcess DebugProcess
static HRESULT WINAPI process_enum_Reset(ICorDebugProcessEnum *iface)
Definition: cordebug.c:468
HRESULT CorDebug_Create(ICLRRuntimeHost *runtimehost, IUnknown **ppUnk)
Definition: cordebug.c:742
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
static HRESULT WINAPI cordebugprocess_EnumerateObjects(ICorDebugProcess *iface, ICorDebugObjectEnum **ppObjects)
Definition: cordebug.c:233
static HRESULT WINAPI cordebugprocess_ThreadForFiberCookie(ICorDebugProcess *iface, DWORD fiberCookie, ICorDebugThread **ppThread)
Definition: cordebug.c:331
#define CloseHandle
Definition: compat.h:398
static HRESULT WINAPI process_enum_Clone(ICorDebugProcessEnum *iface, ICorDebugEnum **ppEnum)
Definition: cordebug.c:475
static HRESULT WINAPI CorDebug_CanLaunchOrAttach(ICorDebug *iface, DWORD dwProcessId, BOOL win32DebuggingEnabled)
Definition: cordebug.c:718
static CorDebug * impl_from_ICorDebugProcessEnum(ICorDebugProcessEnum *iface)
Definition: cordebug.c:40
#define E_NOINTERFACE
Definition: winerror.h:2364
unsigned int ULONG32
Definition: basetsd.h:125
static HRESULT WINAPI CorDebug_QueryInterface(ICorDebug *iface, REFIID riid, void **ppvObject)
Definition: cordebug.c:516
HRESULT hr
Definition: shlfolder.c:183
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
static HRESULT WINAPI cordebugprocess_Detach(ICorDebugProcess *iface)
Definition: cordebug.c:158
static HRESULT WINAPI CorDebug_EnumerateProcesses(ICorDebug *iface, ICorDebugProcessEnum **ppProcess)
Definition: cordebug.c:697
Definition: http.c:6587
static HRESULT WINAPI cordebugprocess_Stop(ICorDebugProcess *iface, DWORD dwTimeoutIgnored)
Definition: cordebug.c:109
REFIID riid
Definition: precomp.h:44
static HRESULT WINAPI process_enum_QueryInterface(ICorDebugProcessEnum *iface, REFIID riid, void **ppvObject)
Definition: cordebug.c:422
static HRESULT WINAPI cordebugprocess_CommitChanges(ICorDebugProcess *iface, ULONG cSnapshots, ICorDebugEditAndContinueSnapshot *pSnapshots[], ICorDebugErrorInfoEnum **pError)
Definition: cordebug.c:190
#define WARN(fmt,...)
Definition: debug.h:111
SIZE_T LPPROCESS_INFORMATION
Definition: cordebug.idl:86
static HRESULT WINAPI cordebugprocess_GetID(ICorDebugProcess *iface, DWORD *pdwProcessId)
Definition: cordebug.c:199
static HRESULT WINAPI cordebugprocess_EnumerateAppDomains(ICorDebugProcess *iface, ICorDebugAppDomainEnum **ppAppDomains)
Definition: cordebug.c:315
GLuint buffer
Definition: glext.h:5915
SIZE_T LPSTARTUPINFOW
Definition: cordebug.idl:85
LONG ref
Definition: cordebug.c:32
static ULONG WINAPI process_enum_AddRef(ICorDebugProcessEnum *iface)
Definition: cordebug.c:445
#define E_FAIL
Definition: ddrawi.h:102
static HRESULT WINAPI CorDebug_SetUnmanagedHandler(ICorDebug *iface, ICorDebugUnmanagedCallback *pCallback)
Definition: cordebug.c:637
Definition: send.c:47
static HRESULT WINAPI process_enum_GetCount(ICorDebugProcessEnum *iface, ULONG *pcelt)
Definition: cordebug.c:482
ICorDebugProcess * pProcess
static HRESULT WINAPI cordebugprocess_ReadMemory(ICorDebugProcess *iface, CORDB_ADDRESS address, DWORD size, BYTE buffer[], SIZE_T *read)
Definition: cordebug.c:273
static HRESULT WINAPI process_enum_Skip(ICorDebugProcessEnum *iface, ULONG celt)
Definition: cordebug.c:461
static HRESULT WINAPI CorDebug_DebugActiveProcess(ICorDebug *iface, DWORD id, BOOL win32Attach, ICorDebugProcess **ppProcess)
Definition: cordebug.c:689
static HRESULT WINAPI cordebugprocess_ModifyLogSwitch(ICorDebugProcess *iface, WCHAR *pLogSwitchName, LONG lLevel)
Definition: cordebug.c:307
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
Definition: list.h:102
static HRESULT WINAPI cordebugprocess_SetAllThreadsDebugState(ICorDebugProcess *iface, CorDebugThreadState state, ICorDebugThread *pExceptThisThread)
Definition: cordebug.c:150
static HRESULT WINAPI CorDebug_Initialize(ICorDebug *iface)
Definition: cordebug.c:576
#define CREATE_SUSPENDED
Definition: winbase.h:178
static HRESULT WINAPI cordebugprocess_IsRunning(ICorDebugProcess *iface, BOOL *pbRunning)
Definition: cordebug.c:127
static HRESULT WINAPI cordebugprocess_GetThreadContext(ICorDebugProcess *iface, DWORD threadID, ULONG32 contextSize, BYTE context[])
Definition: cordebug.c:257
#define DUPLICATE_SAME_ACCESS
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static HRESULT WINAPI cordebugprocess_CanCommitChanges(ICorDebugProcess *iface, ULONG cSnapshots, ICorDebugEditAndContinueSnapshot *pSnapshots[], ICorDebugErrorInfoEnum **pError)
Definition: cordebug.c:181
unsigned int BOOL
Definition: ntddk_ex.h:94
__WINE_SERVER_LIST_INLINE unsigned int list_count(const struct list *list)
Definition: list.h:155
long LONG
Definition: pedump.c:60
static HRESULT WINAPI cordebugprocess_IsTransitionStub(ICorDebugProcess *iface, CORDB_ADDRESS address, BOOL *pbTransitionStub)
Definition: cordebug.c:241
static HRESULT WINAPI cordebugprocess_Terminate(ICorDebugProcess *iface, UINT exitCode)
Definition: cordebug.c:165
static HRESULT WINAPI CorDebug_SetManagedHandler(ICorDebug *iface, ICorDebugManagedCallback *pCallback)
Definition: cordebug.c:604
#define debugstr_w
Definition: kernel32.h:32
GLenum GLint ref
Definition: glext.h:6028
#define FIXME(fmt,...)
Definition: debug.h:110
ICorDebugProcess ICorDebugProcess_iface
Definition: cordebug.c:24
static HRESULT WINAPI process_enum_Next(ICorDebugProcessEnum *iface, ULONG celt, ICorDebugProcess *processes[], ULONG *pceltFetched)
Definition: cordebug.c:495
#define E_INVALIDARG
Definition: ddrawi.h:101
CorDebug * cordebug
Definition: cordebug.c:26
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
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:4593
HANDLE handle
Definition: cordebug.c:29
DWORD dwProcessID
Definition: cordebug.c:28
static HRESULT WINAPI cordebugprocess_ClearCurrentException(ICorDebugProcess *iface, DWORD threadID)
Definition: cordebug.c:291
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static HRESULT WINAPI cordebugprocess_Continue(ICorDebugProcess *iface, BOOL fIsOutOfBand)
Definition: cordebug.c:116
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
const GUID IID_IUnknown
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1138
#define WINAPI
Definition: msvc.h:8
static HRESULT WINAPI cordebugprocess_HasQueuedCallbacks(ICorDebugProcess *iface, ICorDebugThread *pThread, BOOL *pbQueued)
Definition: cordebug.c:134
static HRESULT WINAPI cordebugprocess_GetObject(ICorDebugProcess *iface, ICorDebugValue **ppObject)
Definition: cordebug.c:323
CorDebugThreadState
Definition: cordebug.idl:129
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint address
Definition: glext.h:9393
static HRESULT WINAPI cordebugprocess_QueryInterface(ICorDebugProcess *iface, REFIID riid, void **ppvObject)
Definition: cordebug.c:51
static ULONG WINAPI cordebugprocess_AddRef(ICorDebugProcess *iface)
Definition: cordebug.c:75
static HRESULT WINAPI cordebugprocess_GetHandle(ICorDebugProcess *iface, HPROCESS *phProcessHandle)
Definition: cordebug.c:212
int ret
static HRESULT WINAPI cordebugprocess_EnableLogMessages(ICorDebugProcess *iface, BOOL fOnOff)
Definition: cordebug.c:299
DWORD dwThreadId
Definition: fdebug.c:31
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 CorDebug * impl_from_ICorDebug(ICorDebug *iface)
Definition: cordebug.c:35
#define InterlockedDecrement
Definition: armddk.h:52
static HRESULT WINAPI cordebugprocess_GetHelperThreadID(ICorDebugProcess *iface, DWORD *pThreadID)
Definition: cordebug.c:339
static int state
Definition: maze.c:121
static HRESULT WINAPI CorDebug_Terminate(ICorDebug *iface)
Definition: cordebug.c:583
uint32_t entry
Definition: isohybrid.c:63
static ULONG WINAPI CorDebug_Release(ICorDebug *iface)
Definition: cordebug.c:548
unsigned char BYTE
Definition: mem.h:68
REFIID LPVOID * ppvObject
Definition: precomp.h:44
static HRESULT WINAPI cordebugprocess_SetThreadContext(ICorDebugProcess *iface, DWORD threadID, ULONG32 contextSize, BYTE context[])
Definition: cordebug.c:265
struct list entry
static HRESULT WINAPI cordebugprocess_WriteMemory(ICorDebugProcess *iface, CORDB_ADDRESS address, DWORD size, BYTE buffer[], SIZE_T *written)
Definition: cordebug.c:282
static const struct ICorDebugProcessEnumVtbl processenum_vtbl
Definition: cordebug.c:503
#define ERR(fmt,...)
Definition: debug.h:109
static HRESULT WINAPI cordebugprocess_IsOSSuspended(ICorDebugProcess *iface, DWORD threadID, BOOL *pbSuspended)
Definition: cordebug.c:249
CorDebugCreateProcessFlags
Definition: cordebug.idl:135
ULONG_PTR SIZE_T
Definition: typedefs.h:78
__WINE_SERVER_LIST_INLINE int list_empty(const struct list *list)
Definition: list.h:143
#define S_OK
Definition: intsafe.h:59
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
#define InterlockedIncrement
Definition: armddk.h:53
const char cursor[]
Definition: icontest.c:13
HANDLE thread
Definition: cordebug.c:30
ULONG64 CORDB_ADDRESS
Definition: cordebug.idl:90
BOOL WINAPI TerminateProcess(IN HANDLE hProcess, IN UINT uExitCode)
Definition: proc.c:1532
#define E_NOTIMPL
Definition: ddrawi.h:99
static const ICorDebugProcessVtbl cordebugprocessVtbl
Definition: cordebug.c:349
static ULONG WINAPI cordebugprocess_Release(ICorDebugProcess *iface)
Definition: cordebug.c:85
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4021
static HRESULT WINAPI cordebugprocess_EnumerateThreads(ICorDebugProcess *iface, ICorDebugThreadEnum **ppThreads)
Definition: cordebug.c:142
static HRESULT WINAPI CorDebug_GetProcess(ICorDebug *iface, DWORD dwProcessId, ICorDebugProcess **ppProcess)
Definition: cordebug.c:711
__WINE_SERVER_LIST_INLINE void list_init(struct list *list)
Definition: list.h:149
DWORD WINAPI ResumeThread(IN HANDLE hThread)
Definition: thread.c:566
unsigned int ULONG
Definition: retypes.h:1
static HRESULT WINAPI cordebugprocess_GetThread(ICorDebugProcess *iface, DWORD dwThreadId, ICorDebugThread **ppThread)
Definition: cordebug.c:225
static ULONG WINAPI process_enum_Release(ICorDebugProcessEnum *iface)
Definition: cordebug.c:453
WCHAR * LPWSTR
Definition: xmlstorage.h:184
static DebugProcess * impl_from_ICorDebugProcess(ICorDebugProcess *iface)
Definition: cordebug.c:45
#define HeapFree(x, y, z)
Definition: compat.h:394
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
_CRTIMP int __cdecl read(_In_ int _FileHandle, _Out_writes_bytes_(_MaxCharCount) void *_DstBuf, _In_ unsigned int _MaxCharCount)