d3d9/tests: Reenable a VS fog test.
[wine] / include / cordebug.idl
1 /*
2  * Copyright (C) 2011 Alistair Leslie-Hughes
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 import "unknwn.idl";
20 import "objidl.idl";
21
22 cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
23 cpp_quote("#undef CreateProcess")
24 cpp_quote("#endif")
25
26 interface ICorDebugAppDomain;
27 interface ICorDebugAppDomainEnum;
28 interface ICorDebugAssembly;
29 interface ICorDebugAssemblyEnum;
30 interface ICorDebugBreakpoint;
31 interface ICorDebugBreakpointEnum;
32 interface ICorDebugChain;
33 interface ICorDebugChainEnum;
34 interface ICorDebugClass;
35 interface ICorDebugCode;
36 interface ICorDebugContext;
37 interface ICorDebugEditAndContinueSnapshot;
38 interface ICorDebugEditAndContinueErrorInfo;
39 interface ICorDebugEnum;
40 interface ICorDebugErrorInfoEnum;
41 interface ICorDebugEval;
42 interface ICorDebugFrame;
43 interface ICorDebugFrameEnum;
44 interface ICorDebugFunction;
45 interface ICorDebugFunctionBreakpoint;
46 interface ICorDebugManagedCallback;
47 interface ICorDebugManagedCallback2;
48 interface ICorDebugMDA;
49 interface ICorDebugModule;
50 interface ICorDebugModuleBreakpoint;
51 interface ICorDebugModuleEnum;
52 interface ICorDebugObjectEnum;
53 interface ICorDebugObjectValue;
54 interface ICorDebugProcess;
55 interface ICorDebugProcessEnum;
56 interface ICorDebugRegisterSet;
57 interface ICorDebugStepper;
58 interface ICorDebugStepperEnum;
59 interface ICorDebugThreadEnum;
60 interface ICorDebugUnmanagedCallback;
61 interface ICorDebugValue;
62 interface ICorDebugValueBreakpoint;
63
64
65 typedef [wire_marshal(unsigned long)] void *HPROCESS;
66 typedef [wire_marshal(unsigned long)] void *HTHREAD;
67
68 /* These are defined in corhrd.idl but used here. */
69 cpp_quote("#if 0")
70
71 typedef UINT32 mdToken;
72 typedef mdToken mdModule;
73 typedef SIZE_T  mdScope;
74 typedef mdToken mdTypeDef;
75 typedef mdToken mdSourceFile;
76 typedef mdToken mdMemberRef;
77 typedef mdToken mdMethodDef;
78 typedef mdToken mdFieldDef;
79 typedef mdToken mdSignature;
80 typedef ULONG CorElementType;
81 typedef SIZE_T PCCOR_SIGNATURE;
82
83 typedef SIZE_T LPDEBUG_EVENT;
84
85 typedef SIZE_T LPSTARTUPINFOW;
86 typedef SIZE_T LPPROCESS_INFORMATION;
87
88 cpp_quote("#endif")
89
90 typedef ULONG64 CORDB_ADDRESS;
91 typedef ULONG64 CORDB_REGISTER;
92
93 typedef UINT64 TASKID;
94 typedef DWORD CONNID;
95
96
97 cpp_quote("#ifndef _COR_IL_MAP")
98 cpp_quote("#define _COR_IL_MAP")
99
100 typedef struct _COR_IL_MAP
101 {
102     ULONG32 oldOffset;
103     ULONG32 newOffset;
104     BOOL    fAccurate;
105 } COR_IL_MAP;
106
107 cpp_quote("#endif /* _COR_IL_MAP */")
108
109 cpp_quote("#ifndef _COR_DEBUG_IL_TO_NATIVE_MAP_")
110 cpp_quote("#define _COR_DEBUG_IL_TO_NATIVE_MAP_")
111
112 typedef enum CorDebugIlToNativeMappingTypes
113 {
114     NO_MAPPING = -1,
115     PROLOG     = -2,
116     EPILOG     = -3
117 } CorDebugIlToNativeMappingTypes;
118
119 typedef struct COR_DEBUG_IL_TO_NATIVE_MAP
120 {
121     ULONG32 ilOffset;
122     ULONG32 nativeStartOffset;
123     ULONG32 nativeEndOffset;
124 } COR_DEBUG_IL_TO_NATIVE_MAP;
125
126 cpp_quote("#endif /* _COR_DEBUG_IL_TO_NATIVE_MAP_ */")
127
128
129 typedef enum CorDebugThreadState
130 {
131     THREAD_RUN,
132     THREAD_SUSPEND
133 } CorDebugThreadState;
134
135 typedef enum CorDebugCreateProcessFlags
136 {
137     DEBUG_NO_SPECIAL_OPTIONS        = 0x0000
138 } CorDebugCreateProcessFlags;
139
140 [
141     object,
142     local,
143     uuid(CC7BCAF7-8A68-11d2-983C-0000F808342D),
144     pointer_default(unique)
145 ]
146 interface ICorDebugValue : IUnknown
147 {
148     HRESULT GetType([out] CorElementType *pType);
149     HRESULT GetSize([out] ULONG32 *pSize);
150     HRESULT GetAddress([out] CORDB_ADDRESS *pAddress);
151     HRESULT CreateBreakpoint([out] ICorDebugValueBreakpoint **ppBreakpoint);
152 };
153
154 [
155     object,
156     local,
157     uuid(938c6d66-7fb6-4f69-b389-425b8987329b),
158     pointer_default(unique)
159 ]
160 interface ICorDebugThread : IUnknown
161 {
162     HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
163     HRESULT GetID([out] DWORD *pdwThreadId);
164     HRESULT GetHandle([out] HTHREAD *phThreadHandle);
165     HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain);
166     HRESULT SetDebugState([in] CorDebugThreadState state);
167     HRESULT GetDebugState([out] CorDebugThreadState *pState);
168
169     typedef enum CorDebugUserState
170     {
171         USER_STOP_REQUESTED     = 0x01,
172         USER_SUSPEND_REQUESTED  = 0x02,
173         USER_BACKGROUND         = 0x04,
174         USER_UNSTARTED          = 0x08,
175         USER_STOPPED            = 0x10,
176         USER_WAIT_SLEEP_JOIN    = 0x20,
177         USER_SUSPENDED          = 0x40,
178
179         USER_UNSAFE_POINT       = 0x80,
180     } CorDebugUserState;
181
182     HRESULT GetUserState([out] CorDebugUserState *pState);
183     HRESULT GetCurrentException([out] ICorDebugValue **ppExceptionObject);
184     HRESULT ClearCurrentException();
185     HRESULT CreateStepper([out] ICorDebugStepper **ppStepper);
186     HRESULT EnumerateChains([out] ICorDebugChainEnum **ppChains);
187     HRESULT GetActiveChain([out] ICorDebugChain **ppChain);
188     HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame);
189     HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters);
190     HRESULT CreateEval([out] ICorDebugEval **ppEval);
191     HRESULT GetObject([out] ICorDebugValue **ppObject);
192 };
193
194 [
195     object,
196     local,
197     uuid(3d6f5f62-7538-11d3-8d5b-00104b35e7ef),
198     pointer_default(unique)
199 ]
200
201 interface ICorDebugController : IUnknown
202 {
203     HRESULT Stop([in] DWORD dwTimeoutIgnored);
204     HRESULT Continue([in] BOOL fIsOutOfBand);
205     HRESULT IsRunning([out] BOOL *pbRunning);
206     HRESULT HasQueuedCallbacks([in] ICorDebugThread *pThread,
207                                [out] BOOL *pbQueued);
208     HRESULT EnumerateThreads([out] ICorDebugThreadEnum **ppThreads);
209     HRESULT SetAllThreadsDebugState([in] CorDebugThreadState state,
210                                     [in] ICorDebugThread *pExceptThisThread);
211     HRESULT Detach();
212     HRESULT Terminate([in] UINT exitCode);
213     HRESULT CanCommitChanges([in] ULONG cSnapshots,
214                              [in] ICorDebugEditAndContinueSnapshot *pSnapshots[],
215                              [out] ICorDebugErrorInfoEnum **pError);
216     HRESULT CommitChanges([in] ULONG cSnapshots,
217                           [in] ICorDebugEditAndContinueSnapshot *pSnapshots[],
218                           [out] ICorDebugErrorInfoEnum **pError);
219 };
220
221 [
222     object,
223     local,
224     uuid(3d6f5f64-7538-11d3-8d5b-00104b35e7ef),
225     pointer_default(unique)
226 ]
227 interface ICorDebugProcess : ICorDebugController
228 {
229     HRESULT GetID([out] DWORD *pdwProcessId);
230     HRESULT GetHandle([out] HPROCESS *phProcessHandle);
231     HRESULT GetThread([in] DWORD dwThreadId, [out] ICorDebugThread **ppThread);
232     HRESULT EnumerateObjects([out] ICorDebugObjectEnum **ppObjects);
233     HRESULT IsTransitionStub([in] CORDB_ADDRESS address, [out] BOOL *pbTransitionStub);
234     HRESULT IsOSSuspended([in] DWORD threadID, [out] BOOL *pbSuspended);
235     HRESULT GetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize,
236                              [in, out] BYTE context[]);
237     HRESULT SetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize, [in] BYTE context[]);
238     HRESULT ReadMemory([in] CORDB_ADDRESS address, [in] DWORD size, [out] BYTE buffer[], [out] SIZE_T *read);
239     HRESULT WriteMemory([in] CORDB_ADDRESS address, [in] DWORD size, [in] BYTE buffer[], [out] SIZE_T *written);
240     HRESULT ClearCurrentException([in] DWORD threadID);
241     HRESULT EnableLogMessages([in]BOOL fOnOff);
242     HRESULT ModifyLogSwitch([in] WCHAR *pLogSwitchName,
243                             [in]LONG lLevel);
244     HRESULT EnumerateAppDomains([out] ICorDebugAppDomainEnum **ppAppDomains);
245     HRESULT GetObject([out] ICorDebugValue **ppObject);
246     HRESULT ThreadForFiberCookie([in] DWORD fiberCookie, [out] ICorDebugThread **ppThread);
247     HRESULT GetHelperThreadID([out] DWORD *pThreadID);
248 };
249
250 [
251     object,
252     local,
253     uuid(3d6f5f63-7538-11d3-8d5b-00104b35e7ef),
254     pointer_default(unique)
255 ]
256 interface ICorDebugAppDomain : ICorDebugController
257 {
258     HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
259     HRESULT EnumerateAssemblies([out] ICorDebugAssemblyEnum **ppAssemblies);
260     HRESULT GetModuleFromMetaDataInterface([in] IUnknown *pIMetaData,
261                                            [out] ICorDebugModule **ppModule);
262     HRESULT EnumerateBreakpoints([out] ICorDebugBreakpointEnum **ppBreakpoints);
263     HRESULT EnumerateSteppers([out] ICorDebugStepperEnum **ppSteppers);
264     HRESULT IsAttached([out] BOOL *pbAttached);
265     HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
266     HRESULT GetObject([out] ICorDebugValue **ppObject);
267     HRESULT Attach();
268     HRESULT GetID([out] ULONG32 *pId);
269 };
270
271 [
272     object,
273     local,
274     uuid(3d6f5f60-7538-11d3-8d5b-00104b35e7ef),
275     pointer_default(unique)
276 ]
277 interface ICorDebugManagedCallback : IUnknown
278 {
279     HRESULT Breakpoint([in] ICorDebugAppDomain *pAppDomain,
280                        [in] ICorDebugThread *pThread,
281                        [in] ICorDebugBreakpoint *pBreakpoint);
282
283     typedef enum CorDebugStepReason
284     {
285         STEP_NORMAL,
286         STEP_RETURN,
287         STEP_CALL,
288         STEP_EXCEPTION_FILTER,
289         STEP_EXCEPTION_HANDLER,
290         STEP_INTERCEPT,
291         STEP_EXIT
292     } CorDebugStepReason;
293
294     HRESULT StepComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
295                          [in] ICorDebugStepper *pStepper, [in] CorDebugStepReason reason);
296     HRESULT Break([in] ICorDebugAppDomain *pAppDomain,
297                   [in] ICorDebugThread *thread);
298     HRESULT Exception([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
299                       [in] BOOL unhandled);
300     HRESULT EvalComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
301                          [in] ICorDebugEval *pEval);
302     HRESULT EvalException([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
303                           [in] ICorDebugEval *pEval);
304     HRESULT CreateProcess([in] ICorDebugProcess *pProcess);
305     HRESULT ExitProcess([in] ICorDebugProcess *pProcess);
306     HRESULT CreateThread([in] ICorDebugAppDomain *pAppDomain,[in] ICorDebugThread *thread);
307     HRESULT ExitThread([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *thread);
308     HRESULT LoadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule);
309     HRESULT UnloadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule);
310     HRESULT LoadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c);
311     HRESULT UnloadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c);
312     HRESULT DebuggerError([in] ICorDebugProcess *pProcess, [in] HRESULT errorHR,
313                           [in] DWORD errorCode);
314
315     typedef enum LoggingLevelEnum
316     {
317         LTraceLevel0   = 0,
318         LTraceLevel1,
319         LTraceLevel2,
320         LTraceLevel3,
321         LTraceLevel4,
322         LStatusLevel0  = 20,
323         LStatusLevel1,
324         LStatusLevel2,
325         LStatusLevel3,
326         LStatusLevel4,
327         LWarningLevel  = 40,
328         LErrorLevel    = 50,
329         LPanicLevel    = 100
330     } LoggingLevelEnum;
331
332     typedef enum LogSwitchCallReason
333     {
334         SWITCH_CREATE,
335         SWITCH_MODIFY,
336         SWITCH_DELETE
337     } LogSwitchCallReason;
338
339     HRESULT LogMessage([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
340                        [in] LONG lLevel, [in] WCHAR *pLogSwitchName, [in] WCHAR *pMessage);
341     HRESULT LogSwitch([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
342                       [in] LONG lLevel, [in] ULONG ulReason, [in] WCHAR *pLogSwitchName,
343                       [in] WCHAR *pParentName);
344     HRESULT CreateAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain);
345     HRESULT ExitAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain);
346     HRESULT LoadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly);
347     HRESULT UnloadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly);
348     HRESULT ControlCTrap([in] ICorDebugProcess *pProcess);
349     HRESULT NameChange([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread);
350     HRESULT UpdateModuleSymbols([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule,
351                                 [in] IStream *pSymbolStream);
352     HRESULT EditAndContinueRemap([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
353                                  [in] ICorDebugFunction *pFunction, [in] BOOL fAccurate);
354
355     HRESULT BreakpointSetError([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
356                                [in] ICorDebugBreakpoint *pBreakpoint, [in] DWORD dwError);
357 };
358
359 [
360     object,
361     local,
362     uuid(250E5EEA-DB5C-4C76-B6F3-8C46F12E3203),
363     pointer_default(unique)
364 ]
365 interface ICorDebugManagedCallback2 : IUnknown
366 {
367     HRESULT FunctionRemapOpportunity([in] ICorDebugAppDomain *pAppDomain,
368                    [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pOldFunction,
369                    [in] ICorDebugFunction *pNewFunction, [in] ULONG32 oldILOffset);
370
371     HRESULT CreateConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId,
372                                 [in] WCHAR *pConnName);
373
374     HRESULT ChangeConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId );
375
376     HRESULT DestroyConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId );
377
378
379     typedef enum CorDebugExceptionCallbackType
380     {
381         DEBUG_EXCEPTION_FIRST_CHANCE = 1,
382         DEBUG_EXCEPTION_USER_FIRST_CHANCE = 2,
383         DEBUG_EXCEPTION_CATCH_HANDLER_FOUND = 3,
384         DEBUG_EXCEPTION_UNHANDLED = 4
385     } CorDebugExceptionCallbackType;
386
387     typedef enum CorDebugExceptionFlags
388     {
389         DEBUG_EXCEPTION_CAN_BE_INTERCEPTED = 0x0001
390     } CorDebugExceptionFlags;
391
392     HRESULT Exception( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
393                        [in] ICorDebugFrame *pFrame, [in] ULONG32 nOffset,
394                        [in] CorDebugExceptionCallbackType dwEventType, [in] DWORD dwFlags );
395
396     typedef enum CorDebugExceptionUnwindCallbackType
397     {
398         DEBUG_EXCEPTION_UNWIND_BEGIN = 1,
399         DEBUG_EXCEPTION_INTERCEPTED = 2
400     } CorDebugExceptionUnwindCallbackType;
401
402     HRESULT ExceptionUnwind( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
403                              [in] CorDebugExceptionUnwindCallbackType dwEventType,
404                              [in] DWORD dwFlags );
405
406     HRESULT FunctionRemapComplete([in] ICorDebugAppDomain *pAppDomain,
407                              [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pFunction);
408
409     HRESULT MDANotification([in] ICorDebugController * pController,
410                             [in] ICorDebugThread *pThread, [in] ICorDebugMDA * pMDA
411     );
412
413 };
414 [
415     object,
416     local,
417     uuid(3d6f5f61-7538-11d3-8d5b-00104b35e7ef),
418     pointer_default(unique)
419 ]
420 interface ICorDebug : IUnknown
421 {
422     HRESULT Initialize();
423     HRESULT Terminate();
424     HRESULT SetManagedHandler([in] ICorDebugManagedCallback *pCallback);
425     HRESULT SetUnmanagedHandler([in] ICorDebugUnmanagedCallback *pCallback);
426     HRESULT CreateProcess([in] LPCWSTR lpApplicationName, [in] LPWSTR lpCommandLine,
427                           [in] LPSECURITY_ATTRIBUTES lpProcessAttributes,
428                           [in] LPSECURITY_ATTRIBUTES lpThreadAttributes,
429                           [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags,
430                           [in] PVOID lpEnvironment, [in] LPCWSTR lpCurrentDirectory,
431                           [in] LPSTARTUPINFOW lpStartupInfo,
432                           [in] LPPROCESS_INFORMATION lpProcessInformation,
433                           [in] CorDebugCreateProcessFlags debuggingFlags,
434                           [out] ICorDebugProcess **ppProcess);
435
436     HRESULT DebugActiveProcess([in] DWORD id, [in] BOOL win32Attach,
437                                [out] ICorDebugProcess **ppProcess);
438     HRESULT EnumerateProcesses([out] ICorDebugProcessEnum **ppProcess);
439     HRESULT GetProcess([in] DWORD dwProcessId, [out] ICorDebugProcess **ppProcess);
440     HRESULT CanLaunchOrAttach([in] DWORD dwProcessId, [in] BOOL win32DebuggingEnabled);
441 };
442
443
444 [
445     object,
446     local,
447     uuid(CC7BCAE8-8A68-11d2-983C-0000F808342D),
448     pointer_default(unique)
449 ]
450 interface ICorDebugBreakpoint : IUnknown
451 {
452     HRESULT Activate([in] BOOL bActive);
453     HRESULT IsActive([out] BOOL *pbActive);
454 };
455
456 [
457     object,
458     local,
459     uuid(CC7BCAE9-8A68-11d2-983C-0000F808342D),
460     pointer_default(unique)
461 ]
462 interface ICorDebugFunctionBreakpoint : ICorDebugBreakpoint
463 {
464     HRESULT GetFunction([out] ICorDebugFunction **ppFunction);
465     HRESULT GetOffset([out] ULONG32 *pnOffset);
466 };
467
468 [
469     object,
470     local,
471     uuid(CC7BCAEA-8A68-11d2-983C-0000F808342D),
472     pointer_default(unique)
473 ]
474 interface ICorDebugModuleBreakpoint : ICorDebugBreakpoint
475 {
476     HRESULT GetModule([out] ICorDebugModule **ppModule);
477 };
478
479 [
480     object,
481     local,
482     uuid(CC7BCAEB-8A68-11d2-983C-0000F808342D),
483     pointer_default(unique)
484 ]
485 interface ICorDebugValueBreakpoint : ICorDebugBreakpoint
486 {
487     HRESULT GetValue([out] ICorDebugValue **ppValue);
488 };
489
490 [
491     object,
492     local,
493     uuid(CC7BCAEC-8A68-11d2-983C-0000F808342D),
494     pointer_default(unique)
495 ]
496 interface ICorDebugStepper : IUnknown
497 {
498     HRESULT IsActive([out] BOOL *pbActive);
499     HRESULT Deactivate();
500
501     typedef enum CorDebugIntercept
502     {
503           INTERCEPT_NONE                = 0x0 ,
504           INTERCEPT_CLASS_INIT          = 0x01,
505           INTERCEPT_EXCEPTION_FILTER    = 0x02,
506           INTERCEPT_SECURITY            = 0x04,
507           INTERCEPT_CONTEXT_POLICY      = 0x08,
508           INTERCEPT_INTERCEPTION        = 0x10,
509           INTERCEPT_ALL                 = 0xffff
510     } CorDebugIntercept;
511
512     HRESULT SetInterceptMask([in] CorDebugIntercept mask);
513
514     typedef enum CorDebugUnmappedStop
515     {
516         STOP_NONE               = 0x0,
517         STOP_PROLOG             = 0x01,
518         STOP_EPILOG             = 0x02,
519         STOP_NO_MAPPING_INFO    = 0x04,
520         STOP_OTHER_UNMAPPED     = 0x08,
521         STOP_UNMANAGED          = 0x10,
522
523         STOP_ALL                = 0xffff,
524
525     } CorDebugUnmappedStop;
526
527     HRESULT SetUnmappedStopMask([in] CorDebugUnmappedStop mask);
528     HRESULT Step([in] BOOL bStepIn);
529
530     typedef struct COR_DEBUG_STEP_RANGE
531     {
532         ULONG32 startOffset, endOffset;
533     } COR_DEBUG_STEP_RANGE;
534
535     HRESULT StepRange([in] BOOL bStepIn, [in] COR_DEBUG_STEP_RANGE ranges[], [in] ULONG32 cRangeCount);
536     HRESULT StepOut();
537     HRESULT SetRangeIL([in] BOOL bIL);
538 };
539
540 [
541     object,
542     local,
543     uuid(CC7BCB01-8A68-11d2-983C-0000F808342D),
544     pointer_default(unique)
545 ]
546 interface ICorDebugEnum : IUnknown
547 {
548     HRESULT Skip([in] ULONG celt);
549     HRESULT Reset();
550     HRESULT Clone([out] ICorDebugEnum **ppEnum);
551     HRESULT GetCount([out] ULONG *pcelt);
552 };
553
554 [
555     object,
556     local,
557     uuid(63ca1b24-4359-4883-bd57-13f815f58744),
558     pointer_default(unique)
559 ]
560
561 interface ICorDebugAppDomainEnum : ICorDebugEnum
562 {
563     HRESULT Next([in] ULONG celt, [out] ICorDebugAppDomain *values[], [out] ULONG *pceltFetched);
564
565 };
566
567 [
568     object,
569     local,
570     uuid(4a2a1ec9-85ec-4bfb-9f15-a89fdfe0fe83),
571     pointer_default(unique)
572 ]
573 interface ICorDebugAssemblyEnum : ICorDebugEnum
574 {
575     HRESULT Next([in] ULONG celt, [out] ICorDebugAssembly *values[], [out] ULONG *pceltFetched);
576
577 };
578
579 [
580     object,
581     local,
582     uuid(CC7BCB03-8A68-11d2-983C-0000F808342D),
583     pointer_default(unique)
584 ]
585 interface ICorDebugBreakpointEnum : ICorDebugEnum
586 {
587     HRESULT Next([in] ULONG celt, [out] ICorDebugBreakpoint *breakpoints[], [out] ULONG *pceltFetched);
588 };
589
590 [
591     object,
592     local,
593     uuid(CC7BCB08-8A68-11d2-983C-0000F808342D),
594     pointer_default(unique)
595 ]
596 interface ICorDebugChainEnum : ICorDebugEnum
597 {
598     HRESULT Next([in] ULONG celt, [out] ICorDebugChain *chains[], [out] ULONG *pceltFetched);
599 };
600
601 [
602     object,
603     local,
604     uuid(F0E18809-72B5-11d2-976F-00A0C9B4D50C),
605     pointer_default(unique)
606 ]
607 interface ICorDebugErrorInfoEnum : ICorDebugEnum
608 {
609     HRESULT Next([in] ULONG celt, [out] ICorDebugEditAndContinueErrorInfo *errors[],
610                  [out] ULONG *pceltFetched);
611 };
612
613 [
614     object,
615     local,
616     uuid(CC7BCB07-8A68-11d2-983C-0000F808342D),
617     pointer_default(unique)
618 ]
619 interface ICorDebugFrameEnum : ICorDebugEnum
620 {
621     HRESULT Next([in] ULONG celt, [out] ICorDebugFrame *frames[], [out] ULONG *pceltFetched);
622 };
623
624 [
625     object,
626     local,
627     uuid(CC7BCB09-8A68-11d2-983C-0000F808342D),
628     pointer_default(unique)
629 ]
630 interface ICorDebugModuleEnum : ICorDebugEnum
631 {
632     HRESULT Next([in] ULONG celt, [out] ICorDebugModule *modules[], [out] ULONG *pceltFetched);
633 };
634
635 [
636     object,
637     local,
638     uuid(CC7BCB02-8A68-11d2-983C-0000F808342D),
639     pointer_default(unique)
640 ]
641 interface ICorDebugObjectEnum : ICorDebugEnum
642 {
643     HRESULT Next([in] ULONG celt, [out] CORDB_ADDRESS objects[], [out] ULONG *pceltFetched);
644 };
645
646 [
647     object,
648     local,
649     uuid(CC7BCB05-8A68-11d2-983C-0000F808342D),
650     pointer_default(unique)
651 ]
652 interface ICorDebugProcessEnum : ICorDebugEnum
653 {
654     HRESULT Next([in] ULONG celt, [out] ICorDebugProcess *processes[], [out] ULONG *pceltFetched);
655 };
656
657 [
658     object,
659     local,
660     uuid(CC7BCB04-8A68-11d2-983C-0000F808342D),
661     pointer_default(unique)
662 ]
663 interface ICorDebugStepperEnum : ICorDebugEnum
664 {
665     HRESULT Next([in] ULONG celt, [out] ICorDebugStepper *steppers[], [out] ULONG *pceltFetched);
666 };
667
668 [
669     object,
670     local,
671     uuid(CC7BCB06-8A68-11d2-983C-0000F808342D),
672     pointer_default(unique)
673 ]
674 interface ICorDebugThreadEnum : ICorDebugEnum
675 {
676     HRESULT Next([in] ULONG celt, [out] ICorDebugThread *threads[], [out] ULONG *pceltFetched);
677 };
678
679 [
680     object,
681     local,
682     uuid(CC7BCAEE-8A68-11d2-983C-0000F808342D),
683     pointer_default(unique)
684 ]
685 interface ICorDebugChain : IUnknown
686 {
687     HRESULT GetThread([out] ICorDebugThread **ppThread);
688     HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd);
689     HRESULT GetContext([out] ICorDebugContext **ppContext);
690     HRESULT GetCaller([out] ICorDebugChain **ppChain);
691     HRESULT GetCallee([out] ICorDebugChain **ppChain);
692     HRESULT GetPrevious([out] ICorDebugChain **ppChain);
693     HRESULT GetNext([out] ICorDebugChain **ppChain);
694     HRESULT IsManaged([out] BOOL *pManaged);
695     HRESULT EnumerateFrames([out] ICorDebugFrameEnum **ppFrames);
696     HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame);
697     HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters);
698     typedef enum CorDebugChainReason
699     {
700         CHAIN_NONE              = 0x000,
701         CHAIN_CLASS_INIT        = 0x001,
702         CHAIN_EXCEPTION_FILTER  = 0x002,
703         CHAIN_SECURITY          = 0x004,
704         CHAIN_CONTEXT_POLICY    = 0x008,
705         CHAIN_INTERCEPTION      = 0x010,
706         CHAIN_PROCESS_START     = 0x020,
707         CHAIN_THREAD_START      = 0x040,
708         CHAIN_ENTER_MANAGED     = 0x080,
709         CHAIN_ENTER_UNMANAGED   = 0x100,
710         CHAIN_DEBUGGER_EVAL     = 0x200,
711         CHAIN_CONTEXT_SWITCH    = 0x400,
712         CHAIN_FUNC_EVAL         = 0x800,
713     } CorDebugChainReason;
714
715     HRESULT GetReason([out] CorDebugChainReason *pReason);
716 };
717
718 [
719     object,
720     local,
721     uuid(CC7BCAEF-8A68-11d2-983C-0000F808342D),
722     pointer_default(unique)
723 ]
724 interface ICorDebugFrame : IUnknown
725 {
726     HRESULT GetChain([out] ICorDebugChain **ppChain);
727     HRESULT GetCode([out] ICorDebugCode **ppCode);
728     HRESULT GetFunction([out] ICorDebugFunction **ppFunction);
729     HRESULT GetFunctionToken([out] mdMethodDef *pToken);
730     HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd);
731     HRESULT GetCaller([out] ICorDebugFrame **ppFrame);
732     HRESULT GetCallee([out] ICorDebugFrame **ppFrame);
733     HRESULT CreateStepper([out] ICorDebugStepper **ppStepper);
734 };
735
736
737 [
738     object,
739     local,
740     uuid(CC7BCB0B-8A68-11d2-983C-0000F808342D),
741     pointer_default(unique)
742 ]
743 interface ICorDebugRegisterSet : IUnknown
744 {
745     typedef enum CorDebugRegister
746     {
747         REGISTER_INSTRUCTION_POINTER = 0,
748         REGISTER_STACK_POINTER,
749         REGISTER_FRAME_POINTER,
750
751         REGISTER_X86_EIP = 0,
752         REGISTER_X86_ESP,
753         REGISTER_X86_EBP,
754
755         REGISTER_X86_EAX,
756         REGISTER_X86_ECX,
757         REGISTER_X86_EDX,
758         REGISTER_X86_EBX,
759
760         REGISTER_X86_ESI,
761         REGISTER_X86_EDI,
762
763         REGISTER_X86_FPSTACK_0,
764         REGISTER_X86_FPSTACK_1,
765         REGISTER_X86_FPSTACK_2,
766         REGISTER_X86_FPSTACK_3,
767         REGISTER_X86_FPSTACK_4,
768         REGISTER_X86_FPSTACK_5,
769         REGISTER_X86_FPSTACK_6,
770         REGISTER_X86_FPSTACK_7,
771
772         REGISTER_AMD64_RIP = 0,
773         REGISTER_AMD64_RSP,
774         REGISTER_AMD64_RBP,
775
776         REGISTER_AMD64_RAX,
777         REGISTER_AMD64_RCX,
778         REGISTER_AMD64_RDX,
779         REGISTER_AMD64_RBX,
780
781         REGISTER_AMD64_RSI,
782         REGISTER_AMD64_RDI,
783
784         REGISTER_AMD64_R8,
785         REGISTER_AMD64_R9,
786         REGISTER_AMD64_R10,
787         REGISTER_AMD64_R11,
788         REGISTER_AMD64_R12,
789         REGISTER_AMD64_R13,
790         REGISTER_AMD64_R14,
791         REGISTER_AMD64_R15,
792
793         REGISTER_AMD64_XMM0,
794         REGISTER_AMD64_XMM1,
795         REGISTER_AMD64_XMM2,
796         REGISTER_AMD64_XMM3,
797         REGISTER_AMD64_XMM4,
798         REGISTER_AMD64_XMM5,
799         REGISTER_AMD64_XMM6,
800         REGISTER_AMD64_XMM7,
801         REGISTER_AMD64_XMM8,
802         REGISTER_AMD64_XMM9,
803         REGISTER_AMD64_XMM10,
804         REGISTER_AMD64_XMM11,
805         REGISTER_AMD64_XMM12,
806         REGISTER_AMD64_XMM13,
807         REGISTER_AMD64_XMM14,
808         REGISTER_AMD64_XMM15,
809
810         REGISTER_IA64_BSP = REGISTER_FRAME_POINTER,
811
812         REGISTER_IA64_R0  = REGISTER_IA64_BSP + 1,
813         REGISTER_IA64_F0  = REGISTER_IA64_R0  + 128,
814
815     } CorDebugRegister;
816
817     HRESULT GetRegistersAvailable([out] ULONG64 *pAvailable);
818
819     HRESULT GetRegisters([in] ULONG64 mask, [in] ULONG32 regCount,
820                          [out] CORDB_REGISTER regBuffer[]);
821     HRESULT SetRegisters([in] ULONG64 mask, [in] ULONG32 regCount,
822                          [in] CORDB_REGISTER regBuffer[]);
823     HRESULT GetThreadContext([in] ULONG32 contextSize, [in, out] BYTE context[]);
824     HRESULT SetThreadContext([in] ULONG32 contextSize, [in] BYTE context[]);
825 }
826
827 [
828     object,
829     local,
830     uuid(CC7BCAF6-8A68-11d2-983C-0000F808342D),
831     pointer_default(unique)
832 ]
833 interface ICorDebugEval : IUnknown
834 {
835     HRESULT CallFunction([in] ICorDebugFunction *pFunction, [in] ULONG32 nArgs,
836                          [in] ICorDebugValue *ppArgs[]);
837     HRESULT NewObject([in] ICorDebugFunction *pConstructor, [in] ULONG32 nArgs,
838                       [in] ICorDebugValue *ppArgs[]);
839     HRESULT NewObjectNoConstructor([in] ICorDebugClass *pClass);
840     HRESULT NewString([in] LPCWSTR string);
841     HRESULT NewArray([in] CorElementType elementType, [in] ICorDebugClass *pElementClass,
842                      [in] ULONG32 rank, [in] ULONG32 dims[], [in] ULONG32 lowBounds[]);
843     HRESULT IsActive([out] BOOL *pbActive);
844     HRESULT Abort();
845     HRESULT GetResult([out] ICorDebugValue **ppResult);
846     HRESULT GetThread([out] ICorDebugThread **ppThread);
847     HRESULT CreateValue([in] CorElementType elementType, [in] ICorDebugClass *pElementClass,
848                         [out] ICorDebugValue **ppValue);
849 };
850
851 [
852     object,
853     local,
854     uuid(6DC3FA01-D7CB-11d2-8A95-0080C792E5D8),
855     pointer_default(unique)
856 ]
857 interface ICorDebugEditAndContinueSnapshot : IUnknown
858 {
859     HRESULT CopyMetaData([in] IStream *pIStream, [out] GUID *pMvid);
860     HRESULT GetMvid([out] GUID *pMvid);
861     HRESULT GetRoDataRVA([out] ULONG32 *pRoDataRVA);
862     HRESULT GetRwDataRVA([out] ULONG32 *pRwDataRVA);
863     HRESULT SetPEBytes([in] IStream *pIStream);
864     HRESULT SetILMap([in] mdToken mdFunction, [in] ULONG cMapSize, [in] COR_IL_MAP map[]);
865     HRESULT SetPESymbolBytes([in] IStream *pIStream);
866 };
867
868 [
869     object,
870     local,
871     uuid(dba2d8c1-e5c5-4069-8c13-10a7c6abf43d),
872     pointer_default(unique)
873 ]
874 interface ICorDebugModule : IUnknown
875 {
876     HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
877     HRESULT GetBaseAddress([out] CORDB_ADDRESS *pAddress);
878     HRESULT GetAssembly([out] ICorDebugAssembly **ppAssembly);
879     HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
880     HRESULT EnableJITDebugging([in] BOOL bTrackJITInfo, [in] BOOL bAllowJitOpts);
881     HRESULT EnableClassLoadCallbacks([in] BOOL bClassLoadCallbacks);
882     HRESULT GetFunctionFromToken([in] mdMethodDef methodDef, [out] ICorDebugFunction **ppFunction);
883     HRESULT GetFunctionFromRVA([in] CORDB_ADDRESS rva, [out] ICorDebugFunction **ppFunction);
884     HRESULT GetClassFromToken([in] mdTypeDef typeDef, [out] ICorDebugClass **ppClass);
885     HRESULT CreateBreakpoint([out] ICorDebugModuleBreakpoint **ppBreakpoint);
886     HRESULT GetEditAndContinueSnapshot([out] ICorDebugEditAndContinueSnapshot **ppEditAndContinueSnapshot);
887     HRESULT GetMetaDataInterface([in] REFIID riid, [out] IUnknown **ppObj);
888     HRESULT GetToken([out] mdModule *pToken);
889     HRESULT IsDynamic([out] BOOL *pDynamic);
890     HRESULT GetGlobalVariableValue([in] mdFieldDef fieldDef, [out] ICorDebugValue **ppValue);
891     HRESULT GetSize([out] ULONG32 *pcBytes);
892     HRESULT IsInMemory([out] BOOL *pInMemory);
893 };
894
895 [
896     object,
897     local,
898     uuid(CC7BCAF5-8A68-11d2-983C-0000F808342D),
899     pointer_default(unique)
900 ]
901 interface ICorDebugClass : IUnknown
902 {
903     HRESULT GetModule([out] ICorDebugModule **pModule);
904     HRESULT GetToken([out] mdTypeDef *pTypeDef);
905     HRESULT GetStaticFieldValue([in] mdFieldDef fieldDef, [in] ICorDebugFrame *pFrame,
906                                 [out] ICorDebugValue **ppValue);
907 };
908
909 [
910     object,
911     local,
912     uuid(df59507c-d47a-459e-bce2-6427eac8fd06),
913     pointer_default(unique)
914 ]
915 interface ICorDebugAssembly : IUnknown
916 {
917     HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
918     HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain);
919     HRESULT EnumerateModules([out] ICorDebugModuleEnum **ppModules);
920     HRESULT GetCodeBase([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
921     HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
922 };
923
924
925 [
926     object,
927     local,
928     uuid(CC7BCAF3-8A68-11d2-983C-0000F808342D),
929     pointer_default(unique)
930 ]
931 interface ICorDebugFunction : IUnknown
932 {
933     HRESULT GetModule([out] ICorDebugModule **ppModule);
934     HRESULT GetClass([out] ICorDebugClass **ppClass);
935     HRESULT GetToken([out] mdMethodDef *pMethodDef);
936     HRESULT GetILCode([out] ICorDebugCode **ppCode);
937     HRESULT GetNativeCode([out] ICorDebugCode **ppCode);
938     HRESULT CreateBreakpoint([out] ICorDebugFunctionBreakpoint **ppBreakpoint);
939     HRESULT GetLocalVarSigToken([out] mdSignature *pmdSig);
940     HRESULT GetCurrentVersionNumber([out] ULONG32 *pnCurrentVersion);
941 };
942
943 [
944     object,
945     local,
946     uuid(5263E909-8CB5-11d3-BD2F-0000F80849BD),
947     pointer_default(unique)
948 ]
949 interface ICorDebugUnmanagedCallback : IUnknown
950 {
951     HRESULT DebugEvent([in] LPDEBUG_EVENT pDebugEvent, [in] BOOL fOutOfBand);
952 };
953
954 [
955     object,
956     local,
957     uuid(8D600D41-F4F6-4cb3-B7EC-7BD164944036),
958     pointer_default(unique)
959 ]
960 interface ICorDebugEditAndContinueErrorInfo : IUnknown
961 {
962     HRESULT GetModule([out] ICorDebugModule **ppModule);
963     HRESULT GetToken([out]mdToken *pToken);
964     HRESULT GetErrorCode([out]HRESULT *pHr);
965     HRESULT GetString([in] ULONG32 cchString, [out] ULONG32 *pcchString,
966                       [out] WCHAR szString[]);
967 }
968
969 [
970     object,
971     local,
972     uuid(18AD3D6E-B7D2-11d2-BD04-0000F80849BD),
973     pointer_default(unique)
974 ]
975 interface ICorDebugObjectValue : ICorDebugValue
976 {
977     HRESULT GetClass([out] ICorDebugClass **ppClass);
978     HRESULT GetFieldValue([in] ICorDebugClass *pClass, [in] mdFieldDef fieldDef,
979                           [out] ICorDebugValue **ppValue);
980     HRESULT GetVirtualMethod([in] mdMemberRef memberRef, [out] ICorDebugFunction **ppFunction);
981     HRESULT GetContext([out] ICorDebugContext **ppContext);
982     HRESULT IsValueClass([out] BOOL *pbIsValueClass);
983     HRESULT GetManagedCopy([out] IUnknown **ppObject);
984     HRESULT SetFromManagedCopy([in] IUnknown *pObject);
985 };
986
987 [
988     object,
989     local,
990     uuid(CC7BCB00-8A68-11d2-983C-0000F808342D),
991     pointer_default(unique)
992 ]
993 interface ICorDebugContext : ICorDebugObjectValue
994 {
995 };
996
997 [
998     object,
999     local,
1000     uuid(CC7BCAF4-8A68-11d2-983C-0000F808342D),
1001     pointer_default(unique)
1002 ]
1003 interface ICorDebugCode : IUnknown
1004 {
1005     HRESULT IsIL([out] BOOL *pbIL);
1006     HRESULT GetFunction([out] ICorDebugFunction **ppFunction);
1007     HRESULT GetAddress([out] CORDB_ADDRESS *pStart);
1008     HRESULT GetSize([out] ULONG32 *pcBytes);
1009     HRESULT CreateBreakpoint([in] ULONG32 offset, [out] ICorDebugFunctionBreakpoint **ppBreakpoint);
1010     HRESULT GetCode([in] ULONG32 startOffset, [in] ULONG32 endOffset,
1011                     [in] ULONG32 cBufferAlloc, [out] BYTE buffer[], [out] ULONG32 *pcBufferSize);
1012     HRESULT GetVersionNumber([out] ULONG32 *nVersion);
1013     HRESULT GetILToNativeMapping([in] ULONG32 cMap, [out] ULONG32 *pcMap,
1014                                  [out] COR_DEBUG_IL_TO_NATIVE_MAP map[]);
1015     HRESULT GetEnCRemapSequencePoints([in] ULONG32 cMap,[out] ULONG32 *pcMap,
1016                                       [out] ULONG32 offsets[]);
1017 };
1018
1019 [
1020     object,
1021     local,
1022     uuid(CC726F2F-1DB7-459b-B0EC-05F01D841B42),
1023     pointer_default(unique)
1024 ]
1025 interface ICorDebugMDA : IUnknown
1026 {
1027     HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);
1028
1029     HRESULT GetDescription([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);
1030
1031     HRESULT GetXML([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);
1032
1033     typedef enum CorDebugMDAFlags
1034     {
1035         MDA_FLAG_SLIP = 0x2
1036     } CorDebugMDAFlags;
1037
1038     HRESULT GetFlags([in] CorDebugMDAFlags * pFlags);
1039
1040     HRESULT GetOSThreadId([out] DWORD * pOsTid);
1041 };