/******************************************************** * * * Copyright (C) Microsoft. All rights reserved. * * * *********************************************************/ cpp_quote("/********************************************************") cpp_quote("* *") cpp_quote("* Copyright (C) Microsoft. All rights reserved. *") cpp_quote("* *") cpp_quote("*********************************************************/") import "oaidl.idl"; import "ocidl.idl"; #ifndef DEBUGGER_PIA_BUILD // Any imports go here import "msdbg.idl"; #endif enum enum_EVALFLAGS90 { // --------------------------------------------------------------------- // VS 8.0 values // the return value is interesting EVAL90_RETURNVALUE = 0x0002, // Same as EVAL_RETURNVALUE // don't allow side effects EVAL90_NOSIDEEFFECTS = 0x0004, // Same as EVAL_NOSIDEEFFECTS // stop on breakpoints EVAL90_ALLOWBPS = 0x0008, // Same as EVAL_ALLOWBPS // allow error reporting to the host EVAL90_ALLOWERRORREPORT = 0x0010, // Same as EVAL_ALLOWERRORREPORT // evaluate any functions as address (instead of invoking the function) EVAL90_FUNCTION_AS_ADDRESS = 0x0040, // Same as EVAL_FUNCTION_AS_ADDRESS // don't allow function/property evaluation EVAL90_NOFUNCEVAL = 0x0080, // Same as EVAL_NOFUNCEVAL // don't allow events EVAL90_NOEVENTS = 0x1000, // Same as EVAL_NOEVENTS // design-time expression evaluation EVAL90_DESIGN_TIME_EXPR_EVAL = 0x2000, // Same as EVAL_DESIGN_TIME_EXPR_EVAL // Allow implicit variable creation EVAL90_ALLOW_IMPLICIT_VARS = 0x4000, // Same as EVAL_ALLOW_IMPLICIT_VARS // --------------------------------------------------------------------- // Values added in VS 9.0 // Force eval to occur now. Somebody is requesting it (like the user) EVAL90_FORCE_EVALUATION_NOW = 0x8000 }; enum enum_BP_FLAGS90 { // --------------------------------------------------------------------- // VS 8.0 values BP90_FLAG_NONE = 0x0000, BP90_FLAG_MAP_DOCPOSITION = 0x0001, BP90_FLAG_DONT_STOP = 0x0002, // --------------------------------------------------------------------- // Values added in VS 9.0 // This is used by the native engine to determine if stepping state should be cleared or not. // it is different then BP_FLAG_DONT_STOP because BP_FLAG_DONT_STOP is not set if the tracepoint // executes a macro. BP90_FLAG_TRACEPOINT_CONTINUE = 0x0004, // This flag tells CPDE to not reject breakpoints in non-user code. BP90_FLAG_ALLOW_NON_USER = 0x0008, // This flag tells CPDE is used to tell cpde to ignore use the language from the bp request when evaluating conditions. BP90_FLAG_USE_REQUEST_LANGUAGE = 0x0010 }; enum enum_BPREQI_FIELDS90 { // --------------------------------------------------------------------- // VS 8.0 values BPREQI90_BPLOCATION = 0x0001, BPREQI90_LANGUAGE = 0x0002, BPREQI90_PROGRAM = 0x0004, BPREQI90_PROGRAMNAME = 0x0008, BPREQI90_THREAD = 0x0010, BPREQI90_THREADNAME = 0x0020, BPREQI90_PASSCOUNT = 0x0040, BPREQI90_CONDITION = 0x0080, BPREQI90_FLAGS = 0x0100, BPREQI90_ALLOLDFIELDS = 0x01ff, BPREQI90_VENDOR = 0x0200, BPREQI90_CONSTRAINT = 0x0400, BPREQI90_TRACEPOINT = 0x0800, // --------------------------------------------------------------------- // Values added in VS 9.0 // BPREQI_ALLFIELDS does not include this field in order to avoid making // this a breaking change for v8 consumers BPREQI90_MACROTRACEPOINT = 0x1000, BPREQI90_ALLFIELDS = 0xffff }; enum enum_LAUNCH_FLAGS90 { /********************************************* Defined in msdbg.idl // Launch the process for debugging LAUNCH_DEBUG = 0x0000, // Launch the process without debugging it LAUNCH_NODEBUG = 0x0001, // Launch the process with EnC enabled. LAUNCH_ENABLE_ENC = 0x0002, // Launch the process and merge the environment LAUNCH_MERGE_ENV = 0x0004 ***********************************************/ LAUNCH_WAIT_FOR_EVENT = 0x0008 }; typedef DWORD LAUNCH_FLAGS90; enum enum_ENUMERATED_PROCESS_FLAGS90 { // --------------------------------------------------------------------- // Existing flags EPFLAG90_SHOW_SECURITY_WARNING = 0x01, EPFLAG90_SYSTEM_PROCESS = 0x02, // --------------------------------------------------------------------- // New flags EPFLAG90_INTEGRITY_LEVEL_MASK = (7 << 2), // 11100 EPFLAG90_INTEGRITY_LEVEL_NONE = (0 << 2), // 00000 EPFLAG90_INTEGRITY_LEVEL_UNTRUSTED = (1 << 2), // 00100 EPFLAG90_INTEGRITY_LEVEL_LOW = (2 << 2), // 01000 EPFLAG90_INTEGRITY_LEVEL_MEDIUM = (3 << 2), // 01100 EPFLAG90_INTEGRITY_LEVEL_HIGH = (4 << 2), // 10000 EPFLAG90_INTEGRITY_LEVEL_SYSTEM = (5 << 2), // 10100 EPFLAG90_INTEGRITY_LEVEL_PROTECTED = (6 << 2) // 11000 }; [ object, uuid(1a1b5760-fe45-4958-aa3f-819060b16de9), pointer_default(unique) ] interface IDebugCoreServer90: IUnknown { HRESULT CreateManagedInstanceInServer( [in] LPCWSTR szClass, [in] LPCWSTR szAssembly, [in] WORD wLangId, [in] REFIID riid, [out, iid_is(riid)] void **ppvObject); } // ------------------------------------------------------------------ // IDebugThread90 [ object, uuid(8FD7F3BB-C09E-4c0c-830F-114FFA8BF4F8), pointer_default(unique) ] interface IDebugThread90: IUnknown { enum enum_THREADPROPERTY_FIELDS90 { // --------------------------------------------------------------------- // Existing flags TPF90_ID = 0x0001, TPF90_SUSPENDCOUNT = 0x0002, TPF90_STATE = 0x0004, TPF90_PRIORITY = 0x0008, TPF90_NAME = 0x0010, TPF90_LOCATION = 0x0020, TPF90_ALLFIELDS = 0xffffffff, // --------------------------------------------------------------------- // New flags TPF90_DISPLAY_NAME = 0x0040, TPF90_DISPLAY_NAME_PRIORITY = 0x0080, TPF90_CATEGORY = 0x0100 }; typedef DWORD THREADPROPERTY_FIELDS90; enum enum_DISPLAY_NAME_PRIORITY { // used for generic names DISPLAY_NAME_PRI_LOWEST_CONFIDENCY = 0x1, // used for guessed names for thread poll threads DISPLAY_NAME_PRI_LOW_CONFIDENCY = 0x10, // used for engines that don't implement IDebugThread90 DISPLAY_NAM_PRI_DEFAULT = 0x100, // used for gussed names based on the main thread, the vshost thread or the GC thread DISPLAY_NAME_PRI_NORMAL = 0x1000, // used for names set by the debuggee using the native exception DISPLAY_NAME_PRI_HIGH = 0x10000, // used for names set by the debuggee calling System.Threading.Thread.Name = "bla"; DISPLAY_NAME_PRI_HIGHEST = 0x100000 }; typedef enum enum_DISPLAY_NAME_PRIORITY DISPLAY_NAME_PRIORITY; typedef struct _tagTHREADPROPERTIES90 { // --------------------------------------------------------------------- // Existing fields THREADPROPERTY_FIELDS90 dwFields; DWORD dwThreadId; DWORD dwSuspendCount; DWORD dwThreadState; BSTR bstrPriority; BSTR bstrName; BSTR bstrLocation; // --------------------------------------------------------------------- // New fields BSTR bstrDisplayName; DWORD DisplayNamePriority; DWORD dwThreadCategory; // Should match the THREADCATEGORY as defined in vscommon\idl\Debugger90.idl } THREADPROPERTIES90; HRESULT GetThreadProperties90( [in] THREADPROPERTY_FIELDS90 dwFields, [out] THREADPROPERTIES90 *ptp); } enum enum_DEBUGPROP_INFO_FLAGS90 { // --------------------------------------------------------------------- // VS 8.0 values DEBUGPROP90_INFO_FULLNAME = 0x00000001, DEBUGPROP90_INFO_NAME = 0x00000002, DEBUGPROP90_INFO_TYPE = 0x00000004, DEBUGPROP90_INFO_VALUE = 0x00000008, DEBUGPROP90_INFO_ATTRIB = 0x00000010, DEBUGPROP90_INFO_PROP = 0x00000020, DEBUGPROP90_INFO_VALUE_AUTOEXPAND = 0x00010000, DEBUGPROP90_INFO_NOFUNCEVAL = 0x00020000, // Tell EE not to perform ANY type of func-eval. DEBUGPROP90_INFO_VALUE_RAW = 0x00040000, // Tell EE not to return any beautified values or members. DEBUGPROP90_INFO_VALUE_NO_TOSTRING = 0x00080000, // Tell EE not to return any special synthesized values (ToString() for instance). DEBUGPROP90_INFO_NO_NONPUBLIC_MEMBERS = 0x00100000, // Tell EE to return non-public members for non-user objects. DEBUGPROP90_INFO_NONE = 0x00000000, DEBUGPROP90_INFO_STANDARD = DEBUGPROP90_INFO_ATTRIB | DEBUGPROP90_INFO_NAME | DEBUGPROP90_INFO_TYPE | DEBUGPROP90_INFO_VALUE, DEBUGPROP90_INFO_ALL = 0xffffffff, // --------------------------------------------------------------------- // VS 9.0 values DEBUGPROP90_INFO_NOSIDEEFFECTS = 0x00200000 // Tell EE not to perform any eval that has side effects }; typedef DWORD DEBUGPROP90_INFO_FLAGS; enum enum_STEPSTATUS { //Indicates that we have no idea what the step status is STEPSTATUS_UNKNOWN = 0, //Indicates that the engine stepped in one frame. The callstack must be the original callstack, //plus one additional frame. The PC at the original frame must point to the call site. STEPSTATUS_IN = 1, //Indicates that the callstack did not change during the pending step operation. STEPSTATUS_NORMAL = 2, //Indicates that we stepped out one frame below the original frame and ended up right after the call site. STEPSTATUS_OUT = 4, //Indicates that the thread terminated before the step could complete STEPSTATUS_THREAD_EXIT = 8, //Indicates that the step operation completed successfully, but none of the above criteria apply, for example, //stepping from a thrown exception to a catch block. STEPSTATUS_CUSTOM = 16, }; typedef DWORD STEPSTATUS; // ------------------------------------------------------------------ // IDebugStepper [ object, uuid(c0aa96a2-ae7c-4d80-8831-c7c720f14cca), pointer_default(unique) ] interface IDebugStepper90 : IUnknown { //Performs an abstract "Step" along the specified thread. Specific examples include step in, step over, step out, and step into specific. //A step complete event will be fired when the step completes if it is not interrupted. HRESULT Step([in] IDebugProgram2* pProgram, [in] IDebugThread2* pThread); //Returns the type of step that we are doing. This is used for causality in the SDM. If none of the step kinds make sense, //it is permissible to return a failure code, however, this will prevent causality from working for this step. HRESULT GetStepKind([out] STEPKIND* pSK); } // ------------------------------------------------------------------ // IDebugCodePath90 [ object, uuid(7372dce0-f816-4e35-8b42-64b7f50e6395), pointer_default(unique) ] interface IDebugCodePath90 : IUnknown { //Returns the friendly name HRESULT GetName([out] BSTR* pbstrName); //Returns the stepper to use for step into specific HRESULT GetStepper([out] IDebugStepper90** ppStepper); } // ------------------------------------------------------------------ // IEnumCodePaths3 [ object, uuid(0b6520fb-1417-4599-9806-0d254f3c1869), pointer_default(unique) ] interface IEnumDebugCodePaths90: IUnknown { HRESULT Next( [in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IDebugCodePath90** rgelt, [in, out] ULONG *pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset(void); HRESULT Clone( [out] IEnumDebugCodePaths90** ppEnum); HRESULT GetCount( [out] ULONG* pcelt); }; // ------------------------------------------------------------------ // IDebugEngineEnhancedStep [ object, uuid(6d07112f-b30d-47b4-b5ce-45b26c29205a), pointer_default(unique) ] interface IDebugProgramEnhancedStep90 : IUnknown { //Enumerates the calls available in the current statement of the given thread. Calls should be enumerated in the order //that they are made (what about control flow?) HRESULT EnumCodePaths([in] IDebugThread2* pThread, [in] IDebugCodeContext2* pStart, STEPUNIT stepUnit, [out] IEnumDebugCodePaths90** ppEnum); } // ------------------------------------------------------------------ // IDebugProcessEnhancedStep [ object, uuid(c446ca51-979a-4096-b996-5934b7ab0455), pointer_default(unique) ] interface IDebugProcessEnhancedStep90 : IUnknown { //Performs an abstract "Step" along the specified thread. Specific examples include step in, step over, step out, and step into specific. //A step complete event will be fired when the step completes if it is not interrupted. HRESULT Step(IDebugThread2* pThread, IDebugStepper90* pStepper); } // ------------------------------------------------------------------ // IDebugEngineStepFilterManager90 [ object, uuid(de74abe1-c625-4768-81b3-8eddab72ca20), pointer_default(unique) ] interface IDebugEngineStepFilterManager90 : IUnknown { //Consumes a string representing the contents of the step filter settings file. HRESULT ReceiveStepFilterSettings(BSTR stepFilterSettingsFile); } // ------------------------------------------------------------------ // IDebugStepCompleteEvent90 [ object, uuid(82d3f946-c2f8-495b-8b5f-9c30acdc6c81), pointer_default(unique) ] interface IDebugStepCompleteEvent90 : IUnknown { //Obtains the result of the step operation that just completed (see above). HRESULT GetStepStatus([out] STEPSTATUS* pStatus); //Obtains an enumeration of any breakpoints that got reached at the same time the step was completed. HRESULT EnumBreakpoints([out] IEnumDebugBoundBreakpoints2** ppEnum); } //We need another message type for step filter messages. enum enum_MESSAGETYPE90 { MT_REASON_STEP_FILTER = 0x00000300, //Step filtering-related message MT_REASON_JMC_PROMPT = 0x00000400, //Prompt from engine to turn off JMC (if user clicks "yes", UI will turn off JMC) MT_REASON_STEP_FILTER_PROMPT = 0x00000500, //Message box informing user that we stepped over a property or operator. //UI layer will handle the logic of supressing the dialog if it was already shown //before. };