1 // File generated by idl2d from 2 // msdbg.idl 3 //module sdk.win32.msdbg; 4 module ddebug.windows.msdbg; 5 6 version(Windows): 7 version(USE_MAGO): 8 9 10 //import sdk.port.base; 11 public import win32.windows; 12 public import win32.wtypes; 13 public import win32.oaidl; 14 public import win32.ocidl; 15 public import win32.objidl; 16 public import win32.objbase; 17 //import ddebug.windows.servprov; 18 19 // msdbg.idl : Microsoft Debug API 20 21 // notes: 22 // 23 // - define AD7_NO_LIB to exclude library statement 24 // - define AD7_NO_ENC to exclude ENC interfaces 25 26 //import win32.ocidl; 27 28 //public import sdk.win32.ocidl; 29 //public import sdk.port.oleidl; 30 //public import sdk.port.basetsd; 31 // _BASETSD_H_ 32 33 version(pp_ifdef) /* #ifdef VS_IDL_BUILD */ { 34 // Just to get rup 35 public import sdk.port.sdk_version; 36 } 37 38 const DWORD MSDBG_VERSION = 7126; 39 40 // Use uuid_constant to keep the specified guid constant. This is a note that this guid must be kept constant. 41 // #define uuid_constant uuid 42 43 // Use uuid_jdate to embed the jdate in the GUID 44 // #define uuid_jdate(first, jdate, last) uuid_constant(first-jdate-last) 45 46 version(pp_ifdef) /* #ifdef BUILDING_DEBUGGGER_IDL_MAKEAPI */ { 47 public import sdk.port.ad7.hrc; 48 } 49 50 /+ interface IDebugCoreServer2; +/ 51 /+ interface IDebugCoreServer3; +/ 52 /+ interface IDebugPortSupplier2; +/ 53 /+ interface IDebugPort2; +/ 54 /+ interface IDebugPortNotify2; +/ 55 /+ interface IDebugPortRequest2; +/ 56 /+ interface IDebugSession2; +/ 57 /+ interface IDebugSession3; +/ 58 /+ interface IDebugEngine2; +/ 59 /+ interface IDebugEngine3; +/ 60 /+ interface IDebugEventCallback2; +/ 61 /+ interface IDebugEvent2; +/ 62 /+ interface IDebugProcess2; +/ 63 /+ interface IDebugProgram2; +/ 64 /+ interface IDebugProgramNode2; +/ 65 /+ interface IDebugThread2; +/ 66 /+ interface IDebugThread3; +/ 67 /+ interface IDebugLogicalThread2; +/ 68 /+ interface IDebugStackFrame2; +/ 69 /+ interface IDebugMemoryContext2; +/ 70 /+ interface IDebugCodeContext2; +/ 71 /+ interface IDebugMemoryBytes2; +/ 72 /+ interface IDebugDisassemblyStream2; +/ 73 /+ interface IDebugDocumentContext2; +/ 74 /+ interface IDebugExpressionContext2; +/ 75 /+ interface IDebugBreakpointRequest2; +/ 76 /+ interface IDebugBreakpointResolution2; +/ 77 /+ interface IDebugBoundBreakpoint2; +/ 78 /+ interface IDebugPendingBreakpoint2; +/ 79 /+ interface IDebugErrorBreakpoint2; +/ 80 /+ interface IDebugExpression2; +/ 81 /+ interface IDebugModule2; +/ 82 /+ interface IDebugModule3; +/ 83 /+ interface IDebugDocument2; +/ 84 /+ interface IDebugDocumentText2; +/ 85 /+ interface IDebugDocumentPosition2; +/ 86 /+ interface IDebugFunctionPosition2; +/ 87 /+ interface IDebugDocumentTextEvents2; +/ 88 /+ interface IDebugSimpleProperty2; +/ 89 /+ interface IDebugMDMUtil2_V7; +/ 90 /+ interface IDebugReference2; +/ 91 /+ interface IDebugProperty2; +/ 92 /+ interface IDebugExceptionCallback2; +/ 93 /+ interface IEnumDebugProcesses2; +/ 94 /+ interface IEnumDebugPrograms2; +/ 95 /+ interface IEnumDebugThreads2; +/ 96 /+ interface IEnumDebugStackFrames2; +/ 97 /+ interface IEnumDebugCodeContexts2; +/ 98 /+ interface IEnumDebugBoundBreakpoints2; +/ 99 /+ interface IEnumDebugPendingBreakpoints2; +/ 100 /+ interface IEnumDebugErrorBreakpoints2; +/ 101 /+ interface IEnumDebugExceptionInfo2; +/ 102 /+ interface IEnumDebugFrameInfo2; +/ 103 /+ interface IEnumDebugFrameInfoFilter2; +/ 104 /+ interface IEnumDebugMachines2__deprecated; +/ 105 /+ interface IEnumCodePaths2; +/ 106 /+ interface IEnumDebugModules2; +/ 107 /+ interface IEnumDebugPortSuppliers2; +/ 108 /+ interface IEnumDebugPorts2; +/ 109 /+ interface IEnumDebugReferenceInfo2; +/ 110 /+ interface IEnumDebugPropertyInfo2; +/ 111 112 /+ interface IDebugProgramPublisher2; +/ 113 /+ interface IDebugProgramProvider2; +/ 114 /+ interface IDebugProviderProgramNode2; +/ 115 116 version(pp_ifdef) /* #ifdef AD7_NO_ENC */ { 117 alias IUnknown IDebugENCUpdate; 118 } else { 119 120 //public import ddebug.windows.enc; 121 } 122 123 // #define IDebugMachine2_V7 IDebugCoreServer2 124 125 extern GUID guidVBLang; 126 extern GUID guidVBScriptLang; 127 extern GUID guidJScriptLang; 128 extern GUID guidCLang; 129 extern GUID guidCPPLang; 130 extern GUID guidSQLLang; 131 extern GUID guidScriptLang; 132 extern GUID guidSafeCLang; 133 extern GUID guidJSharpLang; 134 extern GUID guidManagedCLang; 135 extern GUID guidManagedCPPLang; 136 extern GUID guidCausalityBreakpointLang; 137 extern GUID guidFortranLang; 138 extern GUID guidMethodIdLang; 139 extern GUID guidClientScriptLang; 140 141 extern GUID guidScriptEng; 142 extern GUID guidSQLEng; 143 extern GUID guidCOMPlusNativeEng; 144 extern GUID guidCOMPlusOnlyEng; 145 extern GUID guidNativeOnlyEng; 146 extern GUID guidMsOrclEng; 147 extern GUID guidEmbeddedCLREng; 148 extern GUID guidSQLEng2; 149 extern GUID guidCOMPlusSQLLocalEng; 150 extern GUID guidCOMPlusSQLRemoteEng; 151 extern GUID guidSilverlightEng; 152 extern GUID GUID_WorkflowDebugEngine; 153 extern GUID guidMACSilverlightEng; 154 extern GUID guidCoreSystemClrEng; 155 156 extern GUID guidMicrosoftVendor; 157 158 // Port suppliers 159 extern GUID guidLocalPortSupplier; 160 extern GUID guidNativePortSupplier; 161 extern GUID guidNativePipePortSupplier; 162 extern GUID guidEmbeddedCLRPortSupplier; 163 164 // IDebugProperty2 GUID filters 165 extern GUID guidFilterLocals; 166 extern GUID guidFilterAllLocals; 167 extern GUID guidFilterArgs; 168 extern GUID guidFilterLocalsPlusArgs; 169 extern GUID guidFilterAllLocalsPlusArgs; 170 extern GUID guidFilterRegisters; 171 extern GUID guidFilterThis; 172 extern GUID guidFilterAutoRegisters; 173 174 // GUIDs for GetExtendedInfo 175 // GUIDs for GetExtendedInfo 176 extern GUID guidDocument; 177 // TODO: remove this one once everyone implements IDebugProperty2::GetMemoryContext 178 extern GUID guidCodeContext; 179 extern GUID guidCustomViewerSupported; 180 extern GUID guidSimpleGridViewer; 181 182 extern GUID guidExtendedInfoSlot; 183 extern GUID guidExtendedInfoSignature; 184 185 // Document checksum algorithms 186 extern GUID guidSourceHashMD5; 187 extern GUID guidSourceHashSHA1; 188 189 // Other GUIDs 190 extern GUID guidMDANotification; 191 192 enum /+ enum_GETNAME_TYPE+/ : DWORD 193 { 194 GN_NAME, // Gets the (as friendly as possible) name of the document or context 195 GN_FILENAME, // Gets the full path file name (drive+path+filename+ext or as much as possible) of the document or context 196 GN_BASENAME, // Gets the basename+ext part of the file name 197 GN_MONIKERNAME, // Gets the unique, monikerized name of the document or context 198 GN_URL, // Gets the URL name of the document or context 199 GN_TITLE, // Gets the title of the document if possible. 200 GN_STARTPAGEURL, 201 } 202 alias DWORD enum_GETNAME_TYPE; 203 alias DWORD GETNAME_TYPE; 204 205 enum /+ enum_TEXT_POSITION_MAX+/ : int 206 { 207 TEXT_POSITION_MAX_LINE = 0xffffffff, 208 TEXT_POSITION_MAX_COLUMN = 0xffffffff, 209 } 210 alias int enum_TEXT_POSITION_MAX; 211 212 struct _tagTEXT_POSITION 213 { 214 DWORD dwLine; 215 DWORD dwColumn; 216 } 217 alias _tagTEXT_POSITION TEXT_POSITION; 218 219 struct tagBSTR_ARRAY 220 { 221 DWORD dwCount; 222 /+[size_is(dwCount)]+/ BSTR *Members; 223 } 224 alias tagBSTR_ARRAY BSTR_ARRAY; 225 226 struct tagCONST_GUID_ARRAY 227 { 228 DWORD dwCount; 229 /+[size_is(dwCount)]+/ const( GUID)*Members; 230 } 231 alias tagCONST_GUID_ARRAY CONST_GUID_ARRAY; 232 233 struct tagGUID_ARRAY 234 { 235 DWORD dwCount; 236 /+[size_is(dwCount)]+/ GUID *Members; 237 } 238 alias tagGUID_ARRAY GUID_ARRAY; 239 240 // ------------------------------------------------------------------ 241 // IDebugCoreServer2 242 const GUID IID_IDebugCoreServer2 = IDebugCoreServer2.iid; 243 244 interface IDebugCoreServer2 : IUnknown 245 { 246 static const GUID iid = { 0x17bf8fa3,0x4c5a,0x49a3,[ 0xb2,0xf8,0x59,0x42,0xe1,0xea,0x28,0x7e ] }; 247 248 HRESULT GetMachineInfo( 249 in MACHINE_INFO_FIELDS Fields, 250 /+[out]+/ MACHINE_INFO* pMachineInfo); 251 252 HRESULT GetMachineName( 253 /+[out]+/ BSTR* pbstrName); 254 255 // Get a port supplier that exists on this machine 256 HRESULT GetPortSupplier( 257 in GUID* guidPortSupplier, 258 /+[out]+/ IDebugPortSupplier2 * ppPortSupplier); 259 260 // Get a port that already exists on this machine 261 HRESULT GetPort( 262 in GUID* guidPort, 263 /+[out]+/ IDebugPort2 * ppPort); 264 265 // Enum all the ports on this machine 266 HRESULT EnumPorts( 267 /+[out]+/ IEnumDebugPorts2 * ppEnum); 268 269 // Enum all the port suppliers on this machine 270 HRESULT EnumPortSuppliers( 271 /+[out]+/ IEnumDebugPortSuppliers2 * ppEnum); 272 273 HRESULT GetMachineUtilities_V7( 274 /+[out]+/ IDebugMDMUtil2_V7 * ppUtil); 275 } 276 enum /+ enum_MACHINE_INFO_FLAGS+/ : DWORD 277 { 278 MCIFLAG_TERMINAL_SERVICES_AVAILABLE = 0x00000001, 279 } 280 alias DWORD enum_MACHINE_INFO_FLAGS; 281 alias DWORD MACHINE_INFO_FLAGS; 282 enum /+ enum_MACHINE_INFO_FIELDS+/ : DWORD 283 { 284 MCIF_NAME = 0x00000001, 285 MCIF_FLAGS = 0x00000002, 286 287 MCIF_ALL = 0x00000003, 288 } 289 alias DWORD enum_MACHINE_INFO_FIELDS; 290 alias DWORD MACHINE_INFO_FIELDS; 291 struct tagMACHINE_INFO 292 { 293 // Valid fields 294 MACHINE_INFO_FIELDS Fields; 295 // Machine name 296 BSTR bstrName; 297 // Flags 298 MACHINE_INFO_FLAGS Flags; 299 } 300 alias tagMACHINE_INFO MACHINE_INFO;; 301 302 const GUID IID_IDebugCoreServer3 = IDebugCoreServer3.iid; 303 304 interface IDebugCoreServer3 : IDebugCoreServer2 305 { 306 static const GUID iid = { 0x12c1180e,0xc257,0x4485,[ 0x98,0x00,0xaf,0x48,0x4b,0x69,0x97,0x13 ] }; 307 308 HRESULT GetServerName( 309 /+[out]+/ BSTR *pbstrName); 310 311 HRESULT GetServerFriendlyName( 312 /+[out]+/ BSTR *pbstrName); 313 314 HRESULT EnableAutoAttach( 315 /+[ size_is (celtSpecificEngines), ptr]+/ in GUID* rgguidSpecificEngines, 316 in DWORD celtSpecificEngines, 317 /+[ ptr]+/ in LPCOLESTR pszStartPageUrl, 318 /+[out]+/ BSTR* pbstrSessionId); 319 320 HRESULT DiagnoseWebDebuggingError( 321 /+[ ptr]+/ in LPCWSTR pszUrl); 322 323 HRESULT CreateInstanceInServer( 324 /+[ ptr]+/ in LPCWSTR szDll, 325 in WORD wLangId, 326 in CLSID* clsidObject, 327 in IID* riid, 328 /+[out, iid_is(riid)]+/ void **ppvObject); 329 330 HRESULT QueryIsLocal( 331 ); 332 333 HRESULT GetConnectionProtocol( 334 /+[out]+/ CONNECTION_PROTOCOL *pProtocol); 335 336 HRESULT DisableAutoAttach( 337 ); 338 } 339 enum /+ tagCONNECTION_PROTOCOL+/ 340 { 341 CONNECTION_NONE = 0, 342 CONNECTION_UNKNOWN = 1, 343 CONNECTION_LOCAL = 2, 344 CONNECTION_PIPE = 3, 345 CONNECTION_TCPIP = 4, 346 CONNECTION_HTTP = 5, 347 CONNECTION_OTHER = 6 348 } 349 alias int tagCONNECTION_PROTOCOL; 350 alias int CONNECTION_PROTOCOL;; 351 352 // ------------------------------------------------------------------ 353 // IDebugMachine2_V7 354 // 355 // This interface has been renamed since more than one remote debugging 356 // host (msvsmon) can be running on a machine 357 // #define IDebugMachine2_V7 IDebugCoreServer2 358 alias IID_IDebugCoreServer2 IID_IDebugMachine2_V7; 359 360 // ------------------------------------------------------------------ 361 // IDebugMachineEx2_V7 362 // This interface was added after the Office 10 Fork 363 const GUID IID_IDebugMachineEx2_V7 = IDebugMachineEx2_V7.iid; 364 365 interface IDebugMachineEx2_V7 : IUnknown 366 { 367 static const GUID iid = { 0xae27b230,0xa0bf,0x47ff,[ 0xa2,0xd1,0x22,0xc2,0x9a,0x17,0x8e,0xac ] }; 368 HRESULT EnableAutoAttachOnProgramCreate( 369 in LPCWSTR pszProcessNames, // process names seperated by semicolons ex: "foo.exe;bar.exe;bigname.exe" 370 in GUID* guidEngine, // auto attach when 'guidEngine' is added to the process, use GUID_NULL for 'any engine' 371 in LPCWSTR pszSessionId, // session id to attach to 372 /+[out]+/ DWORD* pdwCookie); // cookie returned that is used to call 'DisableAutoAttachOnEvent' 373 374 HRESULT DisableAutoAttachOnEvent( 375 in DWORD dwCookie); 376 377 // Get a port supplier that exists on this machine 378 HRESULT GetPortSupplierEx( 379 in LPCOLESTR wstrRegistryRoot, 380 in GUID* guidPortSupplier, 381 /+[out]+/ IDebugPortSupplier2 * ppPortSupplier); 382 383 // Get a port that already exists on this machine 384 HRESULT GetPortEx( 385 in LPCOLESTR wstrRegistryRoot, 386 in GUID* guidPort, 387 /+[out]+/ IDebugPort2 * ppPort); 388 389 // Enum all the ports on this machine 390 HRESULT EnumPortsEx( 391 in LPCOLESTR wstrRegistryRoot, 392 /+[out]+/ IEnumDebugPorts2 * ppEnum); 393 394 // Enum all the port suppliers on this machine 395 HRESULT EnumPortSuppliersEx( 396 in LPCOLESTR wstrRegistryRoot, 397 /+[out]+/ IEnumDebugPortSuppliers2 * ppEnum); 398 }; 399 400 // -------------------------------------------------------- 401 // IDebugPortSupplier2 402 403 const GUID IID_IDebugPortSupplier2 = IDebugPortSupplier2.iid; 404 405 interface IDebugPortSupplier2 : IUnknown 406 { 407 static const GUID iid = { 0x53f68191,0x7b2f,0x4f14,[ 0x8e,0x55,0x40,0xb1,0xb6,0xe5,0xdf,0x66 ] }; 408 HRESULT GetPortSupplierName( 409 /+[out]+/ BSTR* pbstrName); 410 411 HRESULT GetPortSupplierId( 412 /+[out]+/ GUID* pguidPortSupplier); 413 414 // Get a port from this port supplier 415 HRESULT GetPort( 416 in GUID* guidPort, 417 /+[out]+/ IDebugPort2 * ppPort); 418 419 // Enum the ports that already exist 420 HRESULT EnumPorts( 421 /+[out]+/ IEnumDebugPorts2 * ppEnum); 422 423 // Does this port supplier support adding new ports? S_OK == yes; S_FALSE == no 424 HRESULT CanAddPort(); 425 426 // Add a port 427 HRESULT AddPort( 428 /+[in]+/ IDebugPortRequest2 pRequest, 429 /+[out]+/ IDebugPort2 * ppPort); 430 431 // Remove a port 432 HRESULT RemovePort( 433 /+[in]+/ IDebugPort2 pPort); 434 }; 435 436 // -------------------------------------------------------- 437 // IDebugPortSupplier3 438 const GUID IID_IDebugPortSupplier3 = IDebugPortSupplier3.iid; 439 440 interface IDebugPortSupplier3 : IDebugPortSupplier2 441 { 442 static const GUID iid = { 0x5b5eec44,0x51aa,0x4210,[ 0xb8,0x4f,0x19,0x38,0xb8,0x57,0x6d,0x8d ] }; 443 // Can the port supplier remember new ports? S_OK == yes; S_FALSE == no 444 HRESULT CanPersistPorts(); 445 446 // Enum the ports that the SDM remembered for the port supplier 447 HRESULT EnumPersistedPorts( 448 in BSTR_ARRAY PortNames, 449 /+[out]+/ IEnumDebugPorts2 * ppEnum); 450 }; 451 452 // -------------------------------------------------------- 453 // IDebugPortPicker 454 const GUID IID_IDebugPortPicker = IDebugPortPicker.iid; 455 456 interface IDebugPortPicker : IUnknown 457 { 458 static const GUID iid = { 0x8d6eed60,0x2737,0x4425,[ 0xb3,0x8a,0x49,0x0e,0xf2,0x73,0xac,0xbb ] }; 459 // SetSite() will be called before any other methods are called 460 HRESULT SetSite(/+[in]+/ IServiceProvider pSP); 461 462 // Display a dialog that allows the user to select a port. 463 // A return value of S_FALSE (or a return value of S_OK with the 464 // BSTR set to NULL) indicates that the user canceled the dialog. 465 HRESULT DisplayPortPicker( 466 in HWND hwndParentDialog, 467 /+[out]+/ BSTR* pbstrPortId); 468 }; 469 470 // -------------------------------------------------------- 471 // IDebugPortSupplierDescription2 472 const GUID IID_IDebugPortSupplierDescription2 = IDebugPortSupplierDescription2.iid; 473 474 interface IDebugPortSupplierDescription2 : IUnknown 475 { 476 static const GUID iid = { 0xd0785faa,0x91d7,0x4ca2,[ 0xa3,0x02,0x65,0x55,0x48,0x77,0x19,0xf7 ] }; 477 478 // Get an extended description of the port supplier 479 HRESULT GetDescription( 480 /+[out]+/ PORT_SUPPLIER_DESCRIPTION_FLAGS *pdwFlags, 481 /+[out]+/ BSTR *pbstrText 482 ); 483 } 484 enum /+ enum_PORT_SUPPLIER_DESCRIPTION_FLAGS+/ : DWORD 485 { 486 PSDFLAG_SHOW_WARNING_ICON = 0x00000001 487 } 488 alias DWORD enum_PORT_SUPPLIER_DESCRIPTION_FLAGS; 489 alias DWORD PORT_SUPPLIER_DESCRIPTION_FLAGS;; 490 491 // -------------------------------------------------------- 492 // IDebugPort2 493 494 const GUID IID_IDebugPort2 = IDebugPort2.iid; 495 496 interface IDebugPort2 : IUnknown 497 { 498 static const GUID iid = { 0x79293cc8,0xd9d9,0x43f5,[ 0x97,0xad,0x0b,0xcc,0x5a,0x68,0x87,0x76 ] }; 499 500 HRESULT GetPortName( 501 /+[out]+/ BSTR* pbstrName); 502 503 HRESULT GetPortId( 504 /+[out]+/ GUID* pguidPort); 505 506 // Get the request used to create this port (if available) 507 HRESULT GetPortRequest( 508 /+[out]+/ IDebugPortRequest2 * ppRequest); 509 510 // Get the port supplier that supplied this port 511 HRESULT GetPortSupplier( 512 /+[out]+/ IDebugPortSupplier2 * ppSupplier); 513 514 // Get an IDebugProcess2 for a PID running on this port 515 HRESULT GetProcess( 516 in AD_PROCESS_ID ProcessId, 517 /+[out]+/ IDebugProcess2 * ppProcess); 518 519 // Enum all the processes running on this port 520 HRESULT EnumProcesses( 521 /+[out]+/ IEnumDebugProcesses2 * ppEnum); 522 } 523 enum /+ enum_AD_PROCESS_ID+/ : DWORD 524 { 525 AD_PROCESS_ID_SYSTEM, 526 AD_PROCESS_ID_GUID 527 } 528 alias DWORD enum_AD_PROCESS_ID; 529 alias DWORD AD_PROCESS_ID_TYPE; 530 union AD_PROCESS_ID /+switch(AD_PROCESS_ID_TYPE ProcessIdType) ProcessId +/ { 531 /+[case AD_PROCESS_ID_SYSTEM:]+/ 532 DWORD dwProcessId; 533 /+[case AD_PROCESS_ID_GUID:]+/ 534 GUID guidProcessId; 535 /+[default:]+/ 536 DWORD dwUnused; };; 537 538 // -------------------------------------------------------- 539 // IDebugDefaultPort2 540 541 const GUID IID_IDebugDefaultPort2 = IDebugDefaultPort2.iid; 542 543 interface IDebugDefaultPort2 : IDebugPort2 544 { 545 static const GUID iid = { 0x302f0f55,0x1ede,0x4777,[ 0x9b,0x38,0x11,0x5e,0x1f,0x22,0x9d,0x56 ] }; 546 HRESULT GetPortNotify( 547 /+[out]+/ IDebugPortNotify2 *ppPortNotify); 548 549 HRESULT GetServer( 550 /+[out]+/ IDebugCoreServer3 *ppServer); 551 552 HRESULT QueryIsLocal( 553 ); 554 }; 555 556 // -------------------------------------------------------- 557 // IDebugWindowsComputerPort2 558 559 const GUID IID_IDebugWindowsComputerPort2 = IDebugWindowsComputerPort2.iid; 560 561 interface IDebugWindowsComputerPort2 : IUnknown 562 { 563 static const GUID iid = { 0x5fbb8ed3,0xecdb,0x412a,[ 0xbf,0xa3,0x3a,0x54,0xbe,0xb5,0xb2,0xd1 ] }; 564 565 HRESULT GetComputerInfo( 566 /+[out]+/ COMPUTER_INFO * pInfo); 567 } 568 struct tagCOMPUTER_INFO 569 { 570 // PROCESSOR_ARCHITECTURE_INTEL (0), PROCESSOR_ARCHITECTURE_IA64 (6), or PROCESSOR_ARCHITECTURE_AMD64 (9) 571 WORD wProcessorArchitecture; 572 // See MSDN. Important value is VER_SUITE_TERMINAL 573 WORD wSuiteMask; 574 // { platform id -- 1 for 9x, 2 for NT, major version, minor version, service pack major } 575 DWORD dwOperatingSystemVersion; 576 } 577 alias tagCOMPUTER_INFO COMPUTER_INFO;; 578 579 // -------------------------------------------------------- 580 // IDebugPortRequest2 581 const GUID IID_IDebugPortRequest2 = IDebugPortRequest2.iid; 582 583 interface IDebugPortRequest2 : IUnknown 584 { 585 static const GUID iid = { 0x8d36beb8,0x9bfe,0x47dd,[ 0xa1,0x1b,0x7b,0xa1,0xde,0x18,0xe4,0x49 ] }; 586 HRESULT GetPortName( 587 /+[out]+/ BSTR* pbstrPortName); 588 }; 589 590 // ------------------------------------------------------------------ 591 // IDebugPortNotify2 592 const GUID IID_IDebugPortNotify2 = IDebugPortNotify2.iid; 593 594 interface IDebugPortNotify2 : IUnknown 595 { 596 static const GUID iid = { 0xfb8d2032,0x2858,0x414c,[ 0x83,0xd9,0xf7,0x32,0x66,0x4e,0x0c,0x7a ] }; 597 HRESULT AddProgramNode( 598 /+[in]+/ IDebugProgramNode2 pProgramNode); 599 600 HRESULT RemoveProgramNode( 601 /+[in]+/ IDebugProgramNode2 pProgramNode); 602 }; 603 604 // ------------------------------------------------------------------ 605 // IDebugPortEvents2 606 const GUID IID_IDebugPortEvents2 = IDebugPortEvents2.iid; 607 608 interface IDebugPortEvents2 : IUnknown 609 { 610 static const GUID iid = { 0x564fa275,0x12e1,0x4b5f,[ 0x83,0x16,0x4d,0x79,0xbc,0xef,0x72,0x46 ] }; 611 HRESULT Event( 612 /+[in]+/ IDebugCoreServer2 pServer, 613 /+[in]+/ IDebugPort2 pPort, 614 /+[in]+/ IDebugProcess2 pProcess, 615 /+[in]+/ IDebugProgram2 pProgram, 616 /+[in]+/ IDebugEvent2 pEvent, 617 in IID* riidEvent); 618 }; 619 620 // ------------------------------------------------------------------ 621 // IDebugMDMUtil2_V7 622 const GUID IID_IDebugMDMUtil2_V7 = IDebugMDMUtil2_V7.iid; 623 624 interface IDebugMDMUtil2_V7 : IUnknown 625 { 626 static const GUID iid = { 0xf3062547,0x43d8,0x4dc2,[ 0xb1,0x8e,0xe1,0x46,0x0f,0xf2,0xc4,0x22 ] }; 627 // For the following methods guidEngine specifies the debug engine the 628 // call applies to. Use GUID_NULL to specify all engines. 629 630 // Add or remove a process that the VM should NOT ever debug 631 // (i.e. DON'T use the debugger interpreter loop for a specified process). 632 HRESULT AddPIDToIgnore( 633 in GUID* guidEngine, 634 in DWORD dwPid); 635 HRESULT RemovePIDToIgnore( 636 in GUID* guidEngine, 637 in DWORD dwPid); 638 639 // Add or remove a process that the VM should debug 640 // (i.e. DO use the debugger interpreter loop for a specified process). 641 HRESULT AddPIDToDebug( 642 in GUID* guidEngine, 643 in DWORD dwPid); 644 HRESULT RemovePIDToDebug( 645 in GUID* guidEngine, 646 in DWORD dwPid); 647 648 alias DWORD DYNDEBUGFLAGS; 649 enum /+ enum_DYNDEBUGFLAGS+/ : int 650 { 651 DYNDEBUG_ATTACH = 1, 652 DYNDEBUG_JIT = 2, 653 DYNDEBUG_REMOTEJIT = 4 654 } 655 alias int enum_DYNDEBUGFLAGS; 656 657 // Access to dynamic debugging flags (JIT, attach, ...). 658 // Settings are on a per Engine basis for the entire machine. 659 // Users of these two APIs should always call GetDynamicDebuggingFlags, 660 // set or clear specific bits, then call SetDynamicDebuggingFlags 661 HRESULT SetDynamicDebuggingFlags( 662 in GUID* guidEngine, 663 in DYNDEBUGFLAGS dwFlags); 664 HRESULT GetDynamicDebuggingFlags( 665 in GUID* guidEngine, 666 /+[out]+/ DYNDEBUGFLAGS *pdwFlags); 667 668 // Set the clsid as the default JIT Server 669 HRESULT SetDefaultJITServer( 670 in CLSID* clsidJITServer); 671 // Retrieve the default JIT Server (CLSID_NULL if there isn't one) 672 HRESULT GetDefaultJITServer( 673 /+[out]+/ CLSID *pClsidJITServer); 674 // Register debug engines for a JIT debugger. 675 // arrRemoteFlags may be NULL if remote JIT is not supported for any engine. 676 // arrguidEngines and arrRemoteFlags are ignored if fRegister is FALSE. 677 HRESULT RegisterJITDebugEngines( 678 in CLSID* clsidJITServer, 679 /+[size_is (celtEngs)]+/ in GUID *arrguidEngines, 680 /+[ptr ,size_is(celtEngs)]+/ in BOOL *arrRemoteFlags, 681 in DWORD celtEngs, 682 in BOOL fRegister); 683 684 enum DWORD S_UNKNOWN = 0x3; 685 686 // Should the VM use the debugger loop for this pid? 687 HRESULT CanDebugPID( 688 in GUID* guidEngine, 689 in DWORD pid); 690 } 691 692 const GUID IID_IDebugMDMUtil3_V7 = IDebugMDMUtil3_V7.iid; 693 694 interface IDebugMDMUtil3_V7 : IDebugMDMUtil2_V7 695 { 696 static const GUID iid = { 0xaf598dea,0xce92,0x443b,[ 0xa0,0xb5,0x99,0x92,0xff,0x66,0x0b,0xc4 ] }; 697 698 HRESULT DiagnoseScriptDebuggingError( 699 in DWORD dwDebuggeeProcessId); 700 701 HRESULT DiagnoseWebDebuggingError( 702 in WEB_DEBUG_TYPE dwWebType, 703 /+[ ptr]+/ in LPCWSTR pszUrl); 704 705 HRESULT DiagnoseASPDebugging( 706 /+[ ptr]+/ in LPCWSTR szASPUserAccount 707 ); 708 } 709 enum 710 { 711 WEB_DEBUG_ASP_NET = 0x0001, 712 }; 713 alias DWORD WEB_DEBUG_TYPE;; 714 715 // ------------------------------------------------------------------ 716 // IDebugSession2 717 const GUID IID_IDebugSession2 = IDebugSession2.iid; 718 719 // avoid using enc 720 interface IDebugENCUpdate : IUnknown { 721 } 722 723 interface IDebugSession2 : IUnknown 724 { 725 static const GUID iid = { 0x8948300f,0x8bd5,0x4728,[ 0xa1,0xd8,0x83,0xd1,0x72,0x29,0x5a,0x9d ] }; 726 727 HRESULT GetName( 728 /+[out]+/ BSTR* pbstrName); 729 730 HRESULT SetName( 731 in LPCOLESTR pszName); 732 733 HRESULT EnumProcesses( 734 /+[out]+/ IEnumDebugProcesses2 * ppEnum); 735 736 HRESULT Launch( 737 /+[ ptr]+/ in LPCOLESTR pszMachine, 738 /+[in]+/ IDebugPort2 pPort, 739 /+[ ptr]+/ in LPCOLESTR pszExe, 740 /+[ ptr]+/ in LPCOLESTR pszArgs, 741 /+[ ptr]+/ in LPCOLESTR pszDir, 742 /+[ ptr]+/ in BSTR bstrEnv, 743 /+[ ptr]+/ in LPCOLESTR pszOptions, 744 in LAUNCH_FLAGS dwLaunchFlags, 745 in DWORD hStdInput, 746 in DWORD hStdOutput, 747 in DWORD hStdError, 748 in GUID* guidLaunchingEngine, 749 /+[in]+/ IDebugEventCallback2 pCallback, 750 /+[ size_is (celtSpecificEngines)]+/ in GUID* rgguidSpecificEngines, 751 in DWORD celtSpecificEngines, 752 /+[out]+/ IDebugProcess2 * ppProcess); 753 754 HRESULT RegisterJITServer( 755 in CLSID* clsidJITServer); 756 757 HRESULT Terminate( 758 in BOOL fForce); 759 760 HRESULT Detach(); 761 762 HRESULT CauseBreak(); 763 764 HRESULT CreatePendingBreakpoint( 765 /+[in]+/ IDebugBreakpointRequest2 pBPRequest, 766 /+[out]+/ IDebugPendingBreakpoint2 * ppPendingBP); 767 768 HRESULT EnumPendingBreakpoints( 769 /+[in]+/ IDebugProgram2 pProgram, 770 /+[ ptr]+/ in LPCOLESTR pszProgram, 771 /+[out]+/ IEnumDebugPendingBreakpoints2 * ppEnumBPs); 772 773 HRESULT EnumMachines__deprecated( 774 /+[out]+/ IEnumDebugMachines2__deprecated * ppEnum); 775 776 HRESULT ConnectToServer( 777 /+[ ptr]+/ in LPCOLESTR szServerName, 778 /+[out]+/ IDebugCoreServer2 * ppServer); 779 780 HRESULT DisconnectServer( 781 /+[in]+/ IDebugCoreServer2 pServer); 782 783 HRESULT ShutdownSession(); 784 785 HRESULT EnumCodeContexts( 786 /+[in]+/ IDebugProgram2 pProgram, 787 /+[in]+/ IDebugDocumentPosition2 pDocPos, 788 /+[out]+/ IEnumDebugCodeContexts2 *ppEnum); 789 790 HRESULT SetException( 791 in EXCEPTION_INFO* pException); 792 793 HRESULT EnumSetExceptions( 794 /+[in]+/ IDebugProgram2 pProgram, 795 /+[ ptr]+/ in LPCOLESTR pszProgram, 796 // Either guidLang or guidEng 797 in GUID* guidType, 798 /+[out]+/ IEnumDebugExceptionInfo2 * ppEnum); 799 800 HRESULT RemoveSetException( 801 in EXCEPTION_INFO* pException); 802 803 HRESULT RemoveAllSetExceptions( 804 // Either guidLang or guidEng 805 in GUID* guidType); 806 807 // The top-level default exceptions are pseudo-exceptions that describe the 808 // default exception handling behavior for a given language or runtime architecture. 809 // Example: "C++": EXCEPTION_STOP_SECOND_CHANCE 810 // EXCEPTION_STOP_FIRST_CHANCE_USE_PARENT and EXCEPTION_STOP_SECOND_CHANCE_USE_PARENT 811 // are invalid for these top-level pseudo-exceptions. 812 HRESULT EnumDefaultExceptions( 813 /+[ ptr]+/ in EXCEPTION_INFO* pParentException, 814 /+[out]+/ IEnumDebugExceptionInfo2 * ppEnum); 815 816 HRESULT GetENCUpdate( 817 /+[in]+/ IDebugProgram2 pProgram, 818 /+[out]+/ IDebugENCUpdate** ppUpdate); 819 820 HRESULT SetLocale( 821 in WORD wLangID); 822 823 HRESULT SetRegistryRoot( 824 /+[ ptr]+/ in LPCOLESTR pszRegistryRoot); 825 826 HRESULT IsAlive(); 827 828 HRESULT ClearAllSessionThreadStackFrames(); 829 830 HRESULT __deprecated_GetSessionId( 831 /+[in]+/ IDebugEventCallback2 pCallback, 832 /+[ size_is (celtSpecificEngines), ptr]+/ in GUID* rgguidSpecificEngines, 833 in DWORD celtSpecificEngines, 834 /+[ ptr]+/ in LPCOLESTR pszStartPageUrl, 835 /+[out]+/ BSTR* pbstrSessionId); 836 837 HRESULT SetEngineMetric( 838 in GUID* guidEngine, 839 in LPCOLESTR pszMetric, 840 in VARIANT varValue); 841 842 HRESULT SetStoppingModel( 843 in STOPPING_MODEL dwStoppingModel); 844 845 HRESULT GetStoppingModel( 846 /+[out]+/ STOPPING_MODEL* pdwStoppingModel); 847 848 HRESULT __deprecated_RegisterSessionWithServer( 849 in LPCOLESTR pwszServerName); 850 } 851 enum /+ enum_LAUNCH_FLAGS+/ : DWORD 852 { 853 // Launch the process for debugging 854 LAUNCH_DEBUG = 0x0000, 855 // Launch the process without debugging it 856 LAUNCH_NODEBUG = 0x0001, 857 // Launch the process with EnC enabled. 858 LAUNCH_ENABLE_ENC = 0x0002, 859 // Launch the process and merge the environment 860 LAUNCH_MERGE_ENV = 0x0004 861 } 862 alias DWORD enum_LAUNCH_FLAGS; 863 alias DWORD LAUNCH_FLAGS; 864 enum /+ enum_EXCEPTION_STATE+/ : DWORD 865 { 866 EXCEPTION_NONE = 0x0000, 867 EXCEPTION_STOP_FIRST_CHANCE = 0x0001, 868 EXCEPTION_STOP_SECOND_CHANCE = 0x0002, 869 EXCEPTION_STOP_USER_FIRST_CHANCE = 0x0010, 870 EXCEPTION_STOP_USER_UNCAUGHT = 0x0020, 871 872 // These are no longer used: 873 EXCEPTION_STOP_FIRST_CHANCE_USE_PARENT = 0x0004, 874 EXCEPTION_STOP_SECOND_CHANCE_USE_PARENT = 0x0008, 875 EXCEPTION_STOP_USER_FIRST_CHANCE_USE_PARENT = 0x0040, 876 EXCEPTION_STOP_USER_UNCAUGHT_USE_PARENT = 0x0080, 877 878 EXCEPTION_STOP_ALL = 0x00FF, 879 880 EXCEPTION_CANNOT_BE_CONTINUED = 0x0100, 881 882 // the following flags are for exception types only 883 EXCEPTION_CODE_SUPPORTED = 0x1000, 884 EXCEPTION_CODE_DISPLAY_IN_HEX = 0x2000, 885 EXCEPTION_JUST_MY_CODE_SUPPORTED = 0x4000, 886 EXCEPTION_MANAGED_DEBUG_ASSISTANT = 0x8000, 887 } 888 alias DWORD enum_EXCEPTION_STATE; 889 alias DWORD EXCEPTION_STATE; 890 struct tagEXCEPTION_INFO 891 { 892 IDebugProgram2 pProgram; 893 BSTR bstrProgramName; 894 BSTR bstrExceptionName; 895 DWORD dwCode; 896 EXCEPTION_STATE dwState; 897 // Either guidLang or guidEng 898 GUID guidType; 899 } 900 alias tagEXCEPTION_INFO EXCEPTION_INFO; 901 enum /+ enum_STOPPING_MODEL+/ : DWORD 902 { 903 STOPPING_MODEL_STOP_ALL = 0x0001, 904 STOPPING_MODEL_STOP_ONE = 0x0002, 905 } 906 alias DWORD enum_STOPPING_MODEL; 907 alias DWORD STOPPING_MODEL;; 908 909 // Support for JustMyCode 910 struct _JMC_CODE_SPEC 911 { 912 BOOL fIsUserCode; // TRUE implies "user" code 913 BSTR bstrModuleName; 914 } 915 alias _JMC_CODE_SPEC JMC_CODE_SPEC; 916 917 // ------------------------------------------------------------------ 918 // IDebugSession3 919 const GUID IID_IDebugSession3 = IDebugSession3.iid; 920 921 interface IDebugSession3 : IDebugSession2 922 { 923 static const GUID iid = { 0xBBF74DB9,0x39D5,0x406e,[ 0x8B,0xC3,0x3B,0xA9,0xDD,0x34,0xC0,0x2E ] }; 924 925 // szSymbolSearchPath uses the unicode delimiting character to seperate 926 // search paths. 927 HRESULT SetSymbolPath( 928 /+[ ptr]+/ in LPCOLESTR szSymbolSearchPath, 929 /+[ ptr]+/ in LPCOLESTR szSymbolCachePath, 930 in LOAD_SYMBOLS_FLAGS Flags); 931 932 // Load symbols for all modules that do not have them Returns S_OK if at 933 // least one module loaded symbols returns S_FALSE if no modules loaded symbols. 934 HRESULT LoadSymbols(); 935 936 HRESULT RegisterCallback( 937 /+[in]+/ IDebugEventCallback2 pCallback); 938 939 HRESULT ConnectToServerEx( 940 /+[ ptr]+/ in LPCOLESTR szServerName, 941 in CONNECT_REASON ConnectReason, 942 /+[out]+/ IDebugCoreServer3 * ppServer); 943 944 // Pass on the JustMyCode info to the engines 945 HRESULT SetJustMyCodeState( 946 in BOOL fUpdate, // TRUE = update; FALSE = reset (ignore everything sent earlier) 947 in DWORD dwModules, // count 948 /+[ size_is (dwModules), ptr]+/ in JMC_CODE_SPEC* rgJMCSpec); // array of info about modules 949 950 // Get the most recently used server names 951 HRESULT GetRecentServerNames( 952 /+[out]+/ BSTR_ARRAY *pServers); 953 954 // Set how many server names should be remembered 955 HRESULT SetMaxRecentServerNames( 956 in DWORD dwNewMax); 957 958 HRESULT InitializeFeatures( 959 in SESSION_FEATURES EnabledFeatures 960 ); 961 962 HRESULT SetAllExceptions( 963 in EXCEPTION_STATE dwState 964 ); 965 966 // return E_FAIL if we are breaking on specific exceptions 967 HRESULT GetStateForAllExceptions( 968 /+[out]+/ EXCEPTION_STATE *pdwState 969 ); 970 971 HRESULT AddExceptionCallback( 972 in EXCEPTION_INFO* pException, 973 /+[in]+/ IDebugExceptionCallback2 pCallback 974 ); 975 976 HRESULT RemoveExceptionCallback( 977 in EXCEPTION_INFO* pException, 978 /+[in]+/ IDebugExceptionCallback2 pCallback 979 ); 980 981 HRESULT BlockingShutdownSession( 982 in DWORD dwTimeout 983 ); 984 } 985 enum 986 { 987 CONNECT_LOCAL, 988 CONNECT_ATTACH, 989 CONNECT_LAUNCH, 990 CONNECT_WEB_AUTO_ATTACH, 991 CONNECT_SQL_AUTO_ATTACH, 992 CONNECT_CAUSALITY, 993 CONNECT_DIAGNOSE_WEB_ERROR 994 } 995 alias int CONNECT_REASON; 996 enum /+ enum_SESSION_FEATURES+/ : DWORD 997 { 998 FEATURE_REMOTE_DEBUGGING = 0x1, 999 FEATURE_CAUSALITY = 0x2 1000 } 1001 alias DWORD enum_SESSION_FEATURES; 1002 alias DWORD SESSION_FEATURES; 1003 alias DWORD LOAD_SYMBOLS_FLAGS;; 1004 1005 // ------------------------------------------------------------------ 1006 // IDebugEngine2 1007 const GUID IID_IDebugEngine2 = IDebugEngine2.iid; 1008 1009 interface IDebugEngine2 : IUnknown 1010 { 1011 static const GUID iid = { 0xba105b52,0x12f1,0x4038,[ 0xae,0x64,0xd9,0x57,0x85,0x87,0x4c,0x47 ] }; 1012 1013 HRESULT EnumPrograms( 1014 /+[out]+/ IEnumDebugPrograms2 * ppEnum); 1015 1016 HRESULT Attach( 1017 /+[ size_is (celtPrograms), length_is(celtPrograms)]+/ /+[in]+/ IDebugProgram2 * rgpPrograms, 1018 /+[ size_is (celtPrograms), length_is(celtPrograms)]+/ /+[in]+/ IDebugProgramNode2 * rgpProgramNodes, 1019 in DWORD celtPrograms, 1020 /+[in]+/ IDebugEventCallback2 pCallback, 1021 in ATTACH_REASON dwReason); 1022 1023 HRESULT CreatePendingBreakpoint( 1024 /+[in]+/ IDebugBreakpointRequest2 pBPRequest, 1025 /+[out]+/ IDebugPendingBreakpoint2 * ppPendingBP); 1026 1027 HRESULT SetException( 1028 in EXCEPTION_INFO* pException); 1029 1030 HRESULT RemoveSetException( 1031 in EXCEPTION_INFO* pException); 1032 1033 HRESULT RemoveAllSetExceptions( 1034 // Either guidlang or guidEng 1035 in GUID* guidType); 1036 1037 HRESULT GetEngineId( 1038 /+[out]+/ GUID *pguidEngine); 1039 1040 HRESULT DestroyProgram( 1041 /+[in]+/ IDebugProgram2 pProgram); 1042 1043 HRESULT ContinueFromSynchronousEvent( 1044 /+[in]+/ IDebugEvent2 pEvent); 1045 1046 HRESULT SetLocale( 1047 in WORD wLangID); 1048 1049 HRESULT SetRegistryRoot( 1050 /+[ ptr]+/ in LPCOLESTR pszRegistryRoot); 1051 1052 HRESULT SetMetric( 1053 in LPCOLESTR pszMetric, 1054 in VARIANT varValue); 1055 1056 // These methods were added after the Office fork 1057 HRESULT CauseBreak(); 1058 } 1059 enum /+ enum_ATTACH_REASON+/ : DWORD 1060 { 1061 // Attaching because we launched the process 1062 // (prog create and thread create can be stopping events; send entry point, not attach complete) 1063 ATTACH_REASON_LAUNCH = 0x0001, 1064 // Attaching because the user requested an attach 1065 // (prog create and thread create cannot be stopping events; send attach complete) 1066 ATTACH_REASON_USER = 0x0002, 1067 // Attaching because we're already debugging the process 1068 // (prog create and thread create can be stopping events; send attach complete) 1069 ATTACH_REASON_AUTO = 0x0003, 1070 } 1071 alias DWORD enum_ATTACH_REASON; 1072 alias DWORD ATTACH_REASON;; 1073 1074 // ------------------------------------------------------------------ 1075 // IDebugEngineLaunch2 1076 const GUID IID_IDebugEngineLaunch2 = IDebugEngineLaunch2.iid; 1077 1078 interface IDebugEngineLaunch2 : IUnknown 1079 { 1080 static const GUID iid = { 0xc7c1462f,0x9736,0x466c,[ 0xb2,0xc1,0xb6,0xb2,0xde,0xdb,0xf4,0xa7 ] }; 1081 HRESULT LaunchSuspended( 1082 /+[ ptr]+/ in LPCOLESTR pszServer, 1083 /+[in]+/ IDebugPort2 pPort, 1084 /+[ ptr]+/ in LPCOLESTR pszExe, 1085 /+[ ptr]+/ in LPCOLESTR pszArgs, 1086 /+[ ptr]+/ in LPCOLESTR pszDir, 1087 /+[ ptr]+/ in BSTR bstrEnv, 1088 /+[ ptr]+/ in LPCOLESTR pszOptions, 1089 in LAUNCH_FLAGS dwLaunchFlags, 1090 in DWORD hStdInput, 1091 in DWORD hStdOutput, 1092 in DWORD hStdError, 1093 /+[in]+/ IDebugEventCallback2 pCallback, 1094 /+[out]+/ IDebugProcess2 *ppProcess); 1095 1096 HRESULT ResumeProcess( 1097 /+[in]+/ IDebugProcess2 pProcess); 1098 1099 HRESULT CanTerminateProcess( 1100 /+[in]+/ IDebugProcess2 pProcess); 1101 1102 HRESULT TerminateProcess( 1103 /+[in]+/ IDebugProcess2 pProcess); 1104 }; 1105 1106 // ------------------------------------------------------------------ 1107 // IDebugEngine3 1108 const GUID IID_IDebugEngine3 = IDebugEngine3.iid; 1109 1110 interface IDebugEngine3 : IDebugEngine2 1111 { 1112 static const GUID iid = { 0xA60384F6,0x3712,0x4cb3,[ 0xBC,0x46,0x81,0xE6,0x40,0x2F,0xEE,0x99 ] }; 1113 // szSymbolSearchPath uses the unicode delimiting character to seperate 1114 // search paths. 1115 HRESULT SetSymbolPath( 1116 in LPCOLESTR szSymbolSearchPath, 1117 in LPCOLESTR szSymbolCachePath, 1118 in LOAD_SYMBOLS_FLAGS Flags); 1119 1120 // Load symbols for all modules that do not have any Returns S_OK if at 1121 // least one module loaded symbols returns S_FALSE if no modules loaded symbols. 1122 HRESULT LoadSymbols(); 1123 1124 // Pass on the JustMyCode info to the engines 1125 HRESULT SetJustMyCodeState( 1126 in BOOL fUpdate, // TRUE = update; FALSE = reset (ignore everything sent earlier) 1127 in DWORD dwModules, // count 1128 /+[ size_is (dwModules), ptr]+/ in JMC_CODE_SPEC* rgJMCSpec); // array of info about modules 1129 1130 // Pass the guid of the engine from the METRICs. 1131 HRESULT SetEngineGuid( 1132 in GUID *guidEngine); 1133 1134 HRESULT SetAllExceptions( 1135 in EXCEPTION_STATE dwState); 1136 } 1137 1138 // ------------------------------------------------------------------ 1139 // IDebugEventCallback2 1140 const GUID IID_IDebugEventCallback2 = IDebugEventCallback2.iid; 1141 1142 interface IDebugEventCallback2 : IUnknown 1143 { 1144 static const GUID iid = { 0xade2eeb9,0xfc85,0x4f5b,[ 0xb5,0xd9,0xd4,0x31,0xb4,0xaa,0xc3,0x1a ] }; 1145 1146 HRESULT Event( 1147 /+[in]+/ IDebugEngine2 pEngine, 1148 /+[in]+/ IDebugProcess2 pProcess, 1149 /+[in]+/ IDebugProgram2 pProgram, 1150 /+[in]+/ IDebugThread2 pThread, 1151 /+[in]+/ IDebugEvent2 pEvent, 1152 in IID* riidEvent, 1153 in DWORD dwAttrib); 1154 } 1155 enum /+ enum_EVENTATTRIBUTES+/ : DWORD 1156 { 1157 // The event is asynchronous; no reply is necessary 1158 EVENT_ASYNCHRONOUS = 0x0000, 1159 // The event is synchronous; reply via IDebugEngine2::ContinueFromSynchronousEvent 1160 EVENT_SYNCHRONOUS = 0x0001, 1161 // The event is stopping; reply via IDebugThread2::ContinueFromStoppingEvent 1162 EVENT_STOPPING = 0x0002, 1163 EVENT_ASYNC_STOP = 0x0002, // (not currently supported) 1164 EVENT_SYNC_STOP = 0x0003, 1165 // The event is sent immediately and synchronously to the IDE 1166 // (even if the IDE is currently handling an event) 1167 EVENT_IMMEDIATE = 0x0004, 1168 // The event is for expression evaluation 1169 EVENT_EXPRESSION_EVALUATION = 0x0008 1170 } 1171 alias DWORD enum_EVENTATTRIBUTES; 1172 alias DWORD EVENTATTRIBUTES;; 1173 1174 // ------------------------------------------------------------------ 1175 // IDebugSettingsCallback2 1176 1177 const GUID IID_IDebugSettingsCallback2 = IDebugSettingsCallback2.iid; 1178 1179 interface IDebugSettingsCallback2 : IUnknown 1180 { 1181 static const GUID iid = { 0x050b1813,0x91db,0x47a0,[ 0x89,0x87,0xfc,0x55,0xbd,0xd6,0x36,0x2b ] }; 1182 HRESULT GetMetricGuid( 1183 in LPCWSTR pszType, 1184 in GUID* guidSection, 1185 in LPCWSTR pszMetric, 1186 /+[out]+/ GUID* pguidValue 1187 ); 1188 1189 HRESULT GetMetricDword( 1190 in LPCWSTR pszType, 1191 in GUID* guidSection, 1192 in LPCWSTR pszMetric, 1193 /+[out]+/ DWORD* pdwValue 1194 ); 1195 1196 HRESULT GetEEMetricString( 1197 in GUID* guidLang, 1198 in GUID* guidVendor, 1199 in LPCWSTR pszMetric, 1200 /+[out]+/ BSTR* pbstrValue 1201 ); 1202 1203 HRESULT GetEEMetricGuid( 1204 in GUID* guidLang, 1205 in GUID* guidVendor, 1206 in LPCWSTR pszMetric, 1207 /+[out]+/ GUID* pguidValue 1208 ); 1209 1210 HRESULT GetEEMetricFile( 1211 in GUID* guidLang, 1212 in GUID* guidVendor, 1213 in LPCWSTR pszMetric, 1214 /+[out]+/ BSTR* pbstrValue 1215 ); 1216 1217 HRESULT EnumEEs( 1218 in DWORD celtBuffer, 1219 /+[in, out, ptr, size_is(celtBuffer), length_is(*pceltEEs)]+/ GUID* rgguidLang, 1220 /+[in, out, ptr, size_is(celtBuffer), length_is(*pceltEEs)]+/ GUID* rgguidVendor, 1221 /+[in, out]+/ DWORD* pceltEEs 1222 ); 1223 1224 HRESULT GetEEMetricDword( 1225 in GUID* guidLang, 1226 in GUID* guidVendor, 1227 in LPCWSTR pszMetric, 1228 /+[out]+/ DWORD* pdwValue 1229 ); 1230 1231 HRESULT GetEELocalObject( 1232 in GUID* guidLang, 1233 in GUID* guidVendor, 1234 in LPCWSTR pszMetric, 1235 /+[out]+/ IUnknown * ppUnk 1236 ); 1237 1238 HRESULT GetMetricString( 1239 in LPCWSTR pszType, 1240 in GUID* guidSection, 1241 in LPCWSTR pszMetric, 1242 /+[out]+/ BSTR* pbstrValue 1243 ); 1244 }; 1245 1246 // ------------------------------------------------------------------ 1247 // IDebugEvent2 1248 const GUID IID_IDebugEvent2 = IDebugEvent2.iid; 1249 1250 interface IDebugEvent2 : IUnknown 1251 { 1252 static const GUID iid = { 0x423238d6,0xda42,0x4989,[ 0x96,0xfb,0x6b,0xba,0x26,0xe7,0x2e,0x09 ] }; 1253 HRESULT GetAttributes( 1254 /+[out]+/ DWORD* pdwAttrib); 1255 }; 1256 1257 // ------------------------------------------------------------------ 1258 // IDebugSessionCreateEvent2 1259 const GUID IID_IDebugSessionCreateEvent2 = IDebugSessionCreateEvent2.iid; 1260 1261 interface IDebugSessionCreateEvent2 : IUnknown 1262 { 1263 static const GUID iid = { 0x2c2b15b7,0xfc6d,0x45b3,[ 0x96,0x22,0x29,0x66,0x5d,0x96,0x4a,0x76 ] }; 1264 }; 1265 1266 // ------------------------------------------------------------------ 1267 // IDebugSessionDestroyEvent2 1268 const GUID IID_IDebugSessionDestroyEvent2 = IDebugSessionDestroyEvent2.iid; 1269 1270 interface IDebugSessionDestroyEvent2 : IUnknown 1271 { 1272 static const GUID iid = { 0xf199b2c2,0x88fe,0x4c5d,[ 0xa0,0xfd,0xaa,0x04,0x6b,0x0d,0xc0,0xdc ] }; 1273 }; 1274 1275 // ------------------------------------------------------------------ 1276 // IDebugEngineCreateEvent2 1277 const GUID IID_IDebugEngineCreateEvent2 = IDebugEngineCreateEvent2.iid; 1278 1279 interface IDebugEngineCreateEvent2 : IUnknown 1280 { 1281 static const GUID iid = { 0xfe5b734c,0x759d,0x4e59,[ 0xab,0x04,0xf1,0x03,0x34,0x3b,0xdd,0x06 ] }; 1282 HRESULT GetEngine( 1283 /+[out]+/ IDebugEngine2 *pEngine); 1284 }; 1285 1286 // ------------------------------------------------------------------ 1287 // IDebugProcessCreateEvent2 1288 const GUID IID_IDebugProcessCreateEvent2 = IDebugProcessCreateEvent2.iid; 1289 1290 interface IDebugProcessCreateEvent2 : IUnknown 1291 { 1292 static const GUID iid = { 0xbac3780f,0x04da,0x4726,[ 0x90,0x1c,0xba,0x6a,0x46,0x33,0xe1,0xca ] }; 1293 }; 1294 1295 // ------------------------------------------------------------------ 1296 // IDebugProcessDestroyEvent2 1297 const GUID IID_IDebugProcessDestroyEvent2 = IDebugProcessDestroyEvent2.iid; 1298 1299 interface IDebugProcessDestroyEvent2 : IUnknown 1300 { 1301 static const GUID iid = { 0x3e2a0832,0x17e1,0x4886,[ 0x8c,0x0e,0x20,0x4d,0xa2,0x42,0x99,0x5f ] }; 1302 }; 1303 1304 // ------------------------------------------------------------------ 1305 // IDebugProgramCreateEvent2 1306 const GUID IID_IDebugProgramCreateEvent2 = IDebugProgramCreateEvent2.iid; 1307 1308 interface IDebugProgramCreateEvent2 : IUnknown 1309 { 1310 static const GUID iid = { 0x96cd11ee,0xecd4,0x4e89,[ 0x95,0x7e,0xb5,0xd4,0x96,0xfc,0x41,0x39 ] }; 1311 }; 1312 1313 // ------------------------------------------------------------------ 1314 // IDebugProgramDestroyEvent2 1315 const GUID IID_IDebugProgramDestroyEvent2 = IDebugProgramDestroyEvent2.iid; 1316 1317 interface IDebugProgramDestroyEvent2 : IUnknown 1318 { 1319 static const GUID iid = { 0xe147e9e3,0x6440,0x4073,[ 0xa7,0xb7,0xa6,0x55,0x92,0xc7,0x14,0xb5 ] }; 1320 HRESULT GetExitCode( 1321 /+[out]+/ DWORD* pdwExit); 1322 }; 1323 1324 // ------------------------------------------------------------------ 1325 // IDebugProgramDestroyEventFlags2 1326 const GUID IID_IDebugProgramDestroyEventFlags2 = IDebugProgramDestroyEventFlags2.iid; 1327 1328 interface IDebugProgramDestroyEventFlags2 : IUnknown 1329 { 1330 static const GUID iid = { 0x7e072bee,0x24e7,0x43eb,[ 0x9b,0xce,0x06,0x40,0x2c,0x70,0xe0,0x18 ] }; 1331 1332 HRESULT GetFlags( 1333 /+[out]+/ PROGRAM_DESTROY_FLAGS* pdwFlags); 1334 } 1335 enum /+ enum_PROGRAM_DESTROY_FLAGS+/ : DWORD 1336 { 1337 // continue debugging even if no programs are left 1338 PROGRAM_DESTROY_CONTINUE_DEBUGGING = 0x1 1339 } 1340 alias DWORD enum_PROGRAM_DESTROY_FLAGS; 1341 alias DWORD PROGRAM_DESTROY_FLAGS; 1342 1343 // ------------------------------------------------------------------ 1344 // IDebugThreadCreateEvent2 1345 const GUID IID_IDebugThreadCreateEvent2 = IDebugThreadCreateEvent2.iid; 1346 1347 interface IDebugThreadCreateEvent2 : IUnknown 1348 { 1349 static const GUID iid = { 0x2090ccfc,0x70c5,0x491d,[ 0xa5,0xe8,0xba,0xd2,0xdd,0x9e,0xe3,0xea ] }; 1350 }; 1351 1352 // ------------------------------------------------------------------ 1353 // IDebugThreadDestroyEvent2 1354 const GUID IID_IDebugThreadDestroyEvent2 = IDebugThreadDestroyEvent2.iid; 1355 1356 interface IDebugThreadDestroyEvent2 : IUnknown 1357 { 1358 static const GUID iid = { 0x2c3b7532,0xa36f,0x4a6e,[ 0x90,0x72,0x49,0xbe,0x64,0x9b,0x85,0x41 ] }; 1359 HRESULT GetExitCode( 1360 /+[out]+/ DWORD* pdwExit); 1361 }; 1362 1363 // ------------------------------------------------------------------ 1364 // IDebugLoadCompleteEvent2 1365 const GUID IID_IDebugLoadCompleteEvent2 = IDebugLoadCompleteEvent2.iid; 1366 1367 interface IDebugLoadCompleteEvent2 : IUnknown 1368 { 1369 static const GUID iid = { 0xb1844850,0x1349,0x45d4,[ 0x9f,0x12,0x49,0x52,0x12,0xf5,0xeb,0x0b ] }; 1370 }; 1371 1372 // ------------------------------------------------------------------ 1373 // IDebugEntryPointEvent2 1374 const GUID IID_IDebugEntryPointEvent2 = IDebugEntryPointEvent2.iid; 1375 1376 interface IDebugEntryPointEvent2 : IUnknown 1377 { 1378 static const GUID iid = { 0xe8414a3e,0x1642,0x48ec,[ 0x82,0x9e,0x5f,0x40,0x40,0xe1,0x6d,0xa9 ] }; 1379 }; 1380 1381 // ------------------------------------------------------------------ 1382 // IDebugStepCompleteEvent2 1383 const GUID IID_IDebugStepCompleteEvent2 = IDebugStepCompleteEvent2.iid; 1384 1385 interface IDebugStepCompleteEvent2 : IUnknown 1386 { 1387 static const GUID iid = { 0x0f7f24c1,0x74d9,0x4ea6,[ 0xa3,0xea,0x7e,0xdb,0x2d,0x81,0x44,0x1d ] }; 1388 }; 1389 1390 // ------------------------------------------------------------------ 1391 // IDebugCanStopEvent2 1392 const GUID IID_IDebugCanStopEvent2 = IDebugCanStopEvent2.iid; 1393 1394 interface IDebugCanStopEvent2 : IUnknown 1395 { 1396 static const GUID iid = { 0xb5b0d747,0xd4d2,0x4e2d,[ 0x87,0x2d,0x74,0xda,0x22,0x03,0x78,0x26 ] }; 1397 1398 HRESULT GetReason( 1399 /+[out]+/ CANSTOP_REASON *pcr); 1400 1401 HRESULT CanStop( 1402 in BOOL fCanStop); 1403 1404 HRESULT GetDocumentContext( 1405 /+[out]+/ IDebugDocumentContext2 *ppDocCxt); 1406 1407 HRESULT GetCodeContext( 1408 /+[out]+/ IDebugCodeContext2 * ppCodeContext); 1409 } 1410 enum /+ enum_CANSTOP_REASON+/ : DWORD 1411 { 1412 CANSTOP_ENTRYPOINT = 0x0000, 1413 CANSTOP_STEPIN = 0x0001 1414 } 1415 alias DWORD enum_CANSTOP_REASON; 1416 alias DWORD CANSTOP_REASON;; 1417 1418 // ------------------------------------------------------------------ 1419 // IDebugBreakEvent2 1420 const GUID IID_IDebugBreakEvent2 = IDebugBreakEvent2.iid; 1421 1422 interface IDebugBreakEvent2 : IUnknown 1423 { 1424 static const GUID iid = { 0xc7405d1d,0xe24b,0x44e0,[ 0xb7,0x07,0xd8,0xa5,0xa4,0xe1,0x64,0x1b ] }; 1425 }; 1426 1427 // ------------------------------------------------------------------ 1428 // IDebugBreakpointEvent2 1429 const GUID IID_IDebugBreakpointEvent2 = IDebugBreakpointEvent2.iid; 1430 1431 interface IDebugBreakpointEvent2 : IUnknown 1432 { 1433 static const GUID iid = { 0x501c1e21,0xc557,0x48b8,[ 0xba,0x30,0xa1,0xea,0xb0,0xbc,0x4a,0x74 ] }; 1434 HRESULT EnumBreakpoints( 1435 /+[out]+/ IEnumDebugBoundBreakpoints2 * ppEnum); 1436 }; 1437 1438 // ------------------------------------------------------------------ 1439 // IDebugExceptionEvent2 1440 const GUID IID_IDebugExceptionEvent2 = IDebugExceptionEvent2.iid; 1441 1442 interface IDebugExceptionEvent2 : IUnknown 1443 { 1444 static const GUID iid = { 0x51a94113,0x8788,0x4a54,[ 0xae,0x15,0x08,0xb7,0x4f,0xf9,0x22,0xd0 ] }; 1445 HRESULT GetException( 1446 /+[out]+/ EXCEPTION_INFO* pExceptionInfo); 1447 1448 HRESULT GetExceptionDescription( 1449 /+[out]+/ BSTR* pbstrDescription); 1450 1451 HRESULT CanPassToDebuggee(); 1452 1453 HRESULT PassToDebuggee( 1454 in BOOL fPass); 1455 }; 1456 1457 // based on EXCEPTION_RECORD only Win32/64-agnostic 1458 struct _NATIVE_EXCEPTION_INFO 1459 { 1460 DWORD ExceptionCode; 1461 DWORD ExceptionFlags; 1462 DWORD NumberOfParameters; 1463 UINT64[15] ExceptionInformation; 1464 } 1465 alias _NATIVE_EXCEPTION_INFO NATIVE_EXCEPTION_INFO; 1466 1467 // ------------------------------------------------------------------ 1468 // IDebugNativeExceptionInfo 1469 // 1470 // Not an event as such, but QI-able from an IDebugExceptionEvent2 1471 // to get more information 1472 const GUID IID_IDebugNativeExceptionInfo = IDebugNativeExceptionInfo.iid; 1473 1474 interface IDebugNativeExceptionInfo : IUnknown 1475 { 1476 static const GUID iid = { 0x3d320710,0x06c0,0x437b,[ 0xa5,0x5f,0x82,0x6f,0x48,0xcc,0x7e,0xe7 ] }; 1477 HRESULT GetNativeException( 1478 /+[out]+/ NATIVE_EXCEPTION_INFO* pExceptionInfo); 1479 }; 1480 1481 // ------------------------------------------------------------------ 1482 // IDebugManagedExceptionInfo2 1483 // 1484 // Not an event as such, but QI-able from an IDebugExceptionEvent2 1485 // to get more information 1486 const GUID IID_IDebugManagedExceptionInfo2 = IDebugManagedExceptionInfo2.iid; 1487 1488 interface IDebugManagedExceptionInfo2 : IUnknown 1489 { 1490 static const GUID iid = { 0xd288564a,0xedb2,0x4214,[ 0x86,0x90,0xff,0x9a,0x82,0x87,0x03,0x79 ] }; 1491 1492 HRESULT GetExceptionMessage( 1493 /+[out]+/ BSTR* pbstrExceptionMessage); 1494 1495 HRESULT GetExceptionBoundaryType( 1496 /+[out]+/ EXCEPTION_BOUNDARY_TYPE *pType); 1497 } 1498 enum /+ tagEXCEPTION_BOUNDARY_TYPE+/ : int 1499 { 1500 EXCEPTION_BOUNDARY_NONE, 1501 EXCEPTION_BOUNDARY_APPDOMAIN, 1502 EXCEPTION_BOUNDARY_UNMANAGED, 1503 } 1504 alias int tagEXCEPTION_BOUNDARY_TYPE; 1505 alias tagEXCEPTION_BOUNDARY_TYPE EXCEPTION_BOUNDARY_TYPE;; 1506 1507 // ------------------------------------------------------------------ 1508 // IDebugOutputStringEvent2 1509 const GUID IID_IDebugOutputStringEvent2 = IDebugOutputStringEvent2.iid; 1510 1511 interface IDebugOutputStringEvent2 : IUnknown 1512 { 1513 static const GUID iid = { 0x569c4bb1,0x7b82,0x46fc,[ 0xae,0x28,0x45,0x36,0xdd,0xad,0x75,0x3e ] }; 1514 HRESULT GetString( 1515 /+[out]+/ BSTR* pbstrString); 1516 }; 1517 1518 // ------------------------------------------------------------------ 1519 // IDebugModuleLoadEvent2 1520 const GUID IID_IDebugModuleLoadEvent2 = IDebugModuleLoadEvent2.iid; 1521 1522 interface IDebugModuleLoadEvent2 : IUnknown 1523 { 1524 static const GUID iid = { 0x989db083,0x0d7c,0x40d1,[ 0xa9,0xd9,0x92,0x1b,0xf6,0x11,0xa4,0xb2 ] }; 1525 HRESULT GetModule( 1526 /+[out]+/ IDebugModule2 * pModule, 1527 // Optional message that describes the event 1528 /+[in, out]+/ BSTR* pbstrDebugMessage, 1529 // Set to TRUE if the module's loading; FALSE if unloading 1530 /+[in, out]+/ BOOL* pbLoad); 1531 }; 1532 1533 // ------------------------------------------------------------------ 1534 // IDebugSymbolSearchEvent2 1535 const GUID IID_IDebugSymbolSearchEvent2 = IDebugSymbolSearchEvent2.iid; 1536 1537 interface IDebugSymbolSearchEvent2 : IUnknown 1538 { 1539 static const GUID iid = { 0x638F7C54,0xC160,0x4c7b,[ 0xB2,0xD0,0xE0,0x33,0x7B,0xC6,0x1F,0x8C ] }; 1540 1541 // Notify the package that an attempt was made to load symbols 1542 // for pModule 1543 HRESULT GetSymbolSearchInfo( 1544 /+[out]+/ IDebugModule3 * pModule, 1545 // Optional message that describes the event 1546 /+[in, out]+/ BSTR* pbstrDebugMessage, 1547 // Flag denoting if symbols were loaded 1548 /+[out]+/ MODULE_INFO_FLAGS* pdwModuleInfoFlags); 1549 } 1550 enum /+ enum_MODULE_INFO_FLAGS+/ : DWORD 1551 { 1552 MIF_SYMBOLS_LOADED = 0x0001, 1553 } 1554 alias DWORD enum_MODULE_INFO_FLAGS; 1555 alias DWORD MODULE_INFO_FLAGS;; 1556 1557 // ------------------------------------------------------------------ 1558 // 1559 // IDebugBeforeSymbolSearchEvent2 1560 const GUID IID_IDebugBeforeSymbolSearchEvent2 = IDebugBeforeSymbolSearchEvent2.iid; 1561 1562 interface IDebugBeforeSymbolSearchEvent2 : IUnknown 1563 { 1564 static const GUID iid = { 0xB15C8149,0x2B81,0x40ae,[ 0x93,0x88,0x62,0xFA,0x27,0x6A,0xE1,0x4C ] }; 1565 HRESULT GetModuleName( 1566 /+[out]+/ BSTR* pbstrModuleName 1567 ); 1568 }; 1569 1570 // ------------------------------------------------------------------ 1571 // IDebugPropertyCreateEvent2 1572 const GUID IID_IDebugPropertyCreateEvent2 = IDebugPropertyCreateEvent2.iid; 1573 1574 interface IDebugPropertyCreateEvent2 : IUnknown 1575 { 1576 static const GUID iid = { 0xded6d613,0xa3db,0x4e35,[ 0xbb,0x5b,0xa9,0x23,0x91,0x13,0x3f,0x03 ] }; 1577 HRESULT GetDebugProperty( 1578 /+[out]+/ IDebugProperty2 * ppProperty); 1579 }; 1580 1581 // ------------------------------------------------------------------ 1582 // IDebugPropertyDestroyEvent2 1583 const GUID IID_IDebugPropertyDestroyEvent2 = IDebugPropertyDestroyEvent2.iid; 1584 1585 interface IDebugPropertyDestroyEvent2 : IUnknown 1586 { 1587 static const GUID iid = { 0xf3765f18,0xf395,0x4b8c,[ 0x8e,0x95,0xdc,0xb3,0xfe,0x8e,0x7e,0xc8 ] }; 1588 HRESULT GetDebugProperty( 1589 /+[out]+/ IDebugProperty2 * ppProperty); 1590 }; 1591 1592 // ------------------------------------------------------------------ 1593 // IDebugBreakpointBoundEvent2 1594 1595 const GUID IID_IDebugBreakpointBoundEvent2 = IDebugBreakpointBoundEvent2.iid; 1596 1597 interface IDebugBreakpointBoundEvent2 : IUnknown 1598 { 1599 static const GUID iid = { 0x1dddb704,0xcf99,0x4b8a,[ 0xb7,0x46,0xda,0xbb,0x01,0xdd,0x13,0xa0 ] }; 1600 HRESULT GetPendingBreakpoint( 1601 /+[out]+/ IDebugPendingBreakpoint2 * ppPendingBP); 1602 1603 HRESULT EnumBoundBreakpoints( 1604 /+[out]+/ IEnumDebugBoundBreakpoints2 * ppEnum); 1605 }; 1606 1607 // ------------------------------------------------------------------ 1608 // IDebugBreakpointUnboundEvent2 1609 1610 const GUID IID_IDebugBreakpointUnboundEvent2 = IDebugBreakpointUnboundEvent2.iid; 1611 1612 interface IDebugBreakpointUnboundEvent2 : IUnknown 1613 { 1614 static const GUID iid = { 0x78d1db4f,0xc557,0x4dc5,[ 0xa2,0xdd,0x53,0x69,0xd2,0x1b,0x1c,0x8c ] }; 1615 1616 HRESULT GetBreakpoint( 1617 /+[out]+/ IDebugBoundBreakpoint2 * ppBP); 1618 1619 HRESULT GetReason( 1620 /+[out]+/ BP_UNBOUND_REASON* pdwUnboundReason); 1621 } 1622 enum /+ enum_BP_UNBOUND_REASON+/ : DWORD 1623 { 1624 BPUR_UNKNOWN = 0x0001, 1625 BPUR_CODE_UNLOADED = 0x0002, 1626 // BPUR_BREAKPOINT_REBIND means the breakpoint is being unbound 1627 // because it is being rebound to a different location. (For example, 1628 // this can happen after an ENC when the breakpoint moves, or if this 1629 // breakpoint was originally bound with a less than perfect file 1630 // name match.) Generally, the IDE will discard any persisted information 1631 // about this breakpoint. 1632 BPUR_BREAKPOINT_REBIND = 0x0003, 1633 // BPUR_BREAKPOINT_ERROR means that the breakpoint was deemed to be in error 1634 // after it was bound. This will happen for managed bps whose condition is 1635 // not valid. 1636 BPUR_BREAKPOINT_ERROR = 0x0004 1637 } 1638 alias DWORD enum_BP_UNBOUND_REASON; 1639 alias DWORD BP_UNBOUND_REASON;; 1640 1641 // ------------------------------------------------------------------ 1642 // IDebugBreakpointErrorEvent2 1643 1644 const GUID IID_IDebugBreakpointErrorEvent2 = IDebugBreakpointErrorEvent2.iid; 1645 1646 interface IDebugBreakpointErrorEvent2 : IUnknown 1647 { 1648 static const GUID iid = { 0xabb0ca42,0xf82b,0x4622,[ 0x84,0xe4,0x69,0x03,0xae,0x90,0xf2,0x10 ] }; 1649 HRESULT GetErrorBreakpoint( 1650 /+[out]+/ IDebugErrorBreakpoint2 * ppErrorBP); 1651 }; 1652 1653 // ------------------------------------------------------------------ 1654 // IDebugExpressionEvaluationCompleteEvent2 1655 const GUID IID_IDebugExpressionEvaluationCompleteEvent2 = IDebugExpressionEvaluationCompleteEvent2.iid; 1656 1657 interface IDebugExpressionEvaluationCompleteEvent2 : IUnknown 1658 { 1659 static const GUID iid = { 0xc0e13a85,0x238a,0x4800,[ 0x83,0x15,0xd9,0x47,0xc9,0x60,0xa8,0x43 ] }; 1660 HRESULT GetExpression( 1661 /+[out]+/ IDebugExpression2 * ppExpr); 1662 1663 HRESULT GetResult( 1664 /+[out]+/ IDebugProperty2 * ppResult); 1665 }; 1666 1667 // ------------------------------------------------------------------ 1668 // IDebugReturnValueEvent2 1669 const GUID IID_IDebugReturnValueEvent2 = IDebugReturnValueEvent2.iid; 1670 1671 interface IDebugReturnValueEvent2 : IUnknown 1672 { 1673 static const GUID iid = { 0x0da4d4cc,0x2d0b,0x410f,[ 0x8d,0x5d,0xb6,0xb7,0x3a,0x5d,0x35,0xd8 ] }; 1674 HRESULT GetReturnValue( 1675 /+[out]+/ IDebugProperty2 * ppReturnValue); 1676 }; 1677 1678 // ------------------------------------------------------------------ 1679 // IDebugNoSymbolsEvent2 1680 const GUID IID_IDebugNoSymbolsEvent2 = IDebugNoSymbolsEvent2.iid; 1681 1682 interface IDebugNoSymbolsEvent2 : IUnknown 1683 { 1684 static const GUID iid = { 0x3ad4fb48,0x647e,0x4b03,[ 0x9c,0x1e,0x52,0x75,0x4e,0x80,0xc8,0x80 ] }; 1685 }; 1686 1687 // ------------------------------------------------------------------ 1688 // IDebugProgramNameChangedEvent2 1689 const GUID IID_IDebugProgramNameChangedEvent2 = IDebugProgramNameChangedEvent2.iid; 1690 1691 interface IDebugProgramNameChangedEvent2 : IUnknown 1692 { 1693 static const GUID iid = { 0xe05c2dfd,0x59d5,0x46d3,[ 0xa7,0x1c,0x5d,0x07,0x66,0x5d,0x85,0xaf ] }; 1694 }; 1695 1696 // ------------------------------------------------------------------ 1697 // IDebugThreadNameChangedEvent2 1698 const GUID IID_IDebugThreadNameChangedEvent2 = IDebugThreadNameChangedEvent2.iid; 1699 1700 interface IDebugThreadNameChangedEvent2 : IUnknown 1701 { 1702 static const GUID iid = { 0x1ef4ef78,0x2c44,0x4b7a,[ 0x84,0x73,0x8f,0x43,0x57,0x61,0x17,0x29 ] }; 1703 }; 1704 1705 // ------------------------------------------------------------------ 1706 // IDebugMessageEvent2 1707 const GUID IID_IDebugMessageEvent2 = IDebugMessageEvent2.iid; 1708 1709 interface IDebugMessageEvent2 : IUnknown 1710 { 1711 static const GUID iid = { 0x3bdb28cf,0xdbd2,0x4d24,[ 0xaf,0x03,0x01,0x07,0x2b,0x67,0xeb,0x9e ] }; 1712 1713 HRESULT GetMessage( 1714 /+[out]+/ MESSAGETYPE* pMessageType, 1715 /+[out]+/ BSTR* pbstrMessage, 1716 // Use the MB_* constants 1717 /+[out]+/ DWORD* pdwType, 1718 /+[out]+/ BSTR* pbstrHelpFileName, 1719 /+[out]+/ DWORD* pdwHelpId); 1720 1721 HRESULT SetResponse( 1722 in DWORD dwResponse); 1723 } 1724 enum /+ enum_MESSAGETYPE+/ : DWORD 1725 { 1726 // the following values indicate the how to display the message 1727 MT_OUTPUTSTRING = 0x00000001, // output a message to the Output window 1728 MT_MESSAGEBOX = 0x00000002, // display a message box 1729 MT_TYPE_MASK = 0x000000FF, 1730 1731 // the following values provides reasons for the message 1732 MT_REASON_EXCEPTION = 0x00000100, 1733 MT_REASON_TRACEPOINT = 0x00000200, 1734 MT_REASON_MASK = 0x0000FF00, 1735 } 1736 alias DWORD enum_MESSAGETYPE; 1737 alias DWORD MESSAGETYPE;; 1738 1739 // ------------------------------------------------------------------ 1740 // IDebugErrorEvent2 1741 const GUID IID_IDebugErrorEvent2 = IDebugErrorEvent2.iid; 1742 1743 interface IDebugErrorEvent2 : IUnknown 1744 { 1745 static const GUID iid = { 0xfdb7a36c,0x8c53,0x41da,[ 0xa3,0x37,0x8b,0xd8,0x6b,0x14,0xd5,0xcb ] }; 1746 // Note: format should be of the form: 1747 // "Unable to stand on my head. %1" 1748 HRESULT GetErrorMessage( 1749 /+[out]+/ MESSAGETYPE* pMessageType, 1750 /+[out]+/ BSTR* pbstrErrorFormat, 1751 /+[out]+/ HRESULT* phrErrorReason, 1752 // Use the MB_* constants 1753 /+[out]+/ DWORD* pdwType, 1754 /+[out]+/ BSTR* pbstrHelpFileName, 1755 /+[out]+/ DWORD* pdwHelpId); 1756 }; 1757 1758 // ------------------------------------------------------------------ 1759 // IDebugActivateDocumentEvent2 1760 const GUID IID_IDebugActivateDocumentEvent2 = IDebugActivateDocumentEvent2.iid; 1761 1762 interface IDebugActivateDocumentEvent2 : IUnknown 1763 { 1764 static const GUID iid = { 0x58f36c3d,0x7d07,0x4eba,[ 0xa0,0x41,0x62,0xf6,0x3e,0x18,0x80,0x37 ] }; 1765 HRESULT GetDocument( 1766 /+[out]+/ IDebugDocument2 * ppDoc); 1767 1768 HRESULT GetDocumentContext( 1769 /+[out]+/ IDebugDocumentContext2 * ppDocContext); 1770 }; 1771 1772 // ------------------------------------------------------------------ 1773 // IDebugInterceptExceptionCompleteEvent2 1774 const GUID IID_IDebugInterceptExceptionCompleteEvent2 = IDebugInterceptExceptionCompleteEvent2.iid; 1775 1776 interface IDebugInterceptExceptionCompleteEvent2 : IUnknown 1777 { 1778 static const GUID iid = { 0x44FCEACA,0x7F56,0x4d2c,[ 0xA6,0x37,0x60,0x05,0x2B,0x1B,0x9C,0xBE ] }; 1779 HRESULT GetInterceptCookie( 1780 /+[out]+/ UINT64* pqwCookie); 1781 }; 1782 1783 // ------------------------------------------------------------------ 1784 // IDebugAttachCompleteEvent2 1785 const GUID IID_IDebugAttachCompleteEvent2 = IDebugAttachCompleteEvent2.iid; 1786 1787 interface IDebugAttachCompleteEvent2 : IUnknown 1788 { 1789 static const GUID iid = { 0xfe1fd9ea,0x6413,0x4183,[ 0xa6,0x7d,0x58,0x88,0x70,0x01,0x4e,0x97 ] }; 1790 }; 1791 1792 // ------------------------------------------------------------------ 1793 // IDebugFuncEvalAbortedEvent2 1794 const GUID IID_IDebugFuncEvalAbortedEvent2 = IDebugFuncEvalAbortedEvent2.iid; 1795 1796 interface IDebugFuncEvalAbortedEvent2 : IUnknown 1797 { 1798 static const GUID iid = { 0x3f3be369,0x0b78,0x4511,[ 0x91,0xe5,0x08,0xf9,0xfc,0x5c,0xae,0x0d ] }; 1799 1800 HRESULT GetAbortResult( 1801 /+[out]+/ FUNC_EVAL_ABORT_RESULT* pResult); 1802 1803 HRESULT GetFunctionName( 1804 /+[out]+/ BSTR* pbstrFunctionName); 1805 } 1806 enum /+ tagFUNC_EVAL_ABORT_RESULT+/ : int 1807 { 1808 ABORT_SUCCEEDED = 0, 1809 RUDE_ABORT_SUCCEEDED = 1, 1810 ABORT_FAILED = 2, 1811 ABORT_HUNG = 3, 1812 PROCESS_TERMINATED = 4 1813 } 1814 alias int tagFUNC_EVAL_ABORT_RESULT; 1815 alias tagFUNC_EVAL_ABORT_RESULT FUNC_EVAL_ABORT_RESULT;; 1816 1817 // ------------------------------------------------------------------ 1818 // IDebugStopCompleteEvent2 1819 const GUID IID_IDebugStopCompleteEvent2 = IDebugStopCompleteEvent2.iid; 1820 1821 interface IDebugStopCompleteEvent2 : IUnknown 1822 { 1823 static const GUID iid = { 0x3dca9dcd,0xfb09,0x4af1,[ 0xa9,0x26,0x45,0xf2,0x93,0xd4,0x8b,0x2d ] }; 1824 }; 1825 1826 enum /+ tagEncUnavailableReason+/ : int 1827 { 1828 ENCUN_NONE, 1829 ENCUN_INTEROP, 1830 ENCUN_SQLCLR, 1831 ENCUN_MINIDUMP, 1832 ENCUN_EMBEDDED, 1833 ENCUN_ATTACH, 1834 ENCUN_WIN64, 1835 ENCUN_STOPONEMODE, 1836 ENCUN_MODULENOTLOADED, 1837 ENCUN_MODULERELOADED, 1838 ENCUN_INRUNMODE, 1839 ENCUN_NOTBUILT, 1840 ENCUN_REMOTE, 1841 ENCUN_SILVERLIGHT, 1842 ENCUN_ENGINE_METRIC_FALSE, 1843 ENCUN_NOT_ALLOWED_FOR_MODULE, 1844 ENCUN_NOT_SUPPORTED_FOR_CLR64_VERSION 1845 } 1846 alias int tagEncUnavailableReason; 1847 alias tagEncUnavailableReason EncUnavailableReason; 1848 1849 // The VSdebug Package implements this interface. 1850 const GUID IID_IDebugEncNotify = IDebugEncNotify.iid; 1851 1852 interface IDebugEncNotify : IUnknown 1853 { 1854 static const GUID iid = { 0x347C45E1,0x5C42,0x4e0e,[ 0x9E,0x15,0xDE,0xFF,0x9C,0xFC,0x78,0x41 ] }; 1855 // This method allows the ENCManager to tell the package that ENC 1856 // is not available as soon as it can be determined rather than waiting for a call from the package. 1857 HRESULT NotifyEncIsUnavailable( 1858 in EncUnavailableReason reason, 1859 in BOOL fEditWasApplied); 1860 1861 // This method allows the Lang Serice to Notify the package that the Current Statement 1862 // must be updated due to an edit. 1863 HRESULT NotifyEncUpdateCurrentStatement(); 1864 1865 // This method allows the Lang Service to Notify the package that an edit was attempted 1866 // when the debuggee is in a state that cannot accept changes. 1867 HRESULT NotifyEncEditAttemptedAtInvalidStopState(); 1868 1869 // This allows the Lang Service or project to tell the package that it prevented 1870 // an edit from occuring. 1871 // The package is responsible for asking the ENC manager why ENC would not be 1872 // allowed at this point. 1873 HRESULT NotifyEncEditDisallowedByProject( 1874 /+[in]+/ IUnknown pProject); 1875 } 1876 1877 // ------------------------------------------------------------------ 1878 // IDebugSessionEvent2 - implemented by all SDM events (such as session 1879 // create/destroy) 1880 const GUID IID_IDebugSessionEvent2 = IDebugSessionEvent2.iid; 1881 1882 interface IDebugSessionEvent2 : IUnknown 1883 { 1884 static const GUID iid = { 0xfd1a378c,0xf117,0x4f43,[ 0x91,0x7c,0xda,0xdc,0xa1,0x30,0x86,0x06 ] }; 1885 HRESULT GetSession( 1886 /+[out]+/ IDebugSession2 *ppSession); 1887 }; 1888 1889 // ------------------------------------------------------------------ 1890 // IDebugProcess2 1891 const GUID IID_IDebugProcess2 = IDebugProcess2.iid; 1892 1893 interface IDebugProcess2 : IUnknown 1894 { 1895 static const GUID iid = { 0x43286fea,0x6997,0x4543,[ 0x80,0x3e,0x60,0xa2,0x0c,0x47,0x3d,0xe5 ] }; 1896 1897 HRESULT GetInfo( 1898 in PROCESS_INFO_FIELDS Fields, 1899 /+[out]+/ PROCESS_INFO* pProcessInfo); 1900 1901 HRESULT EnumPrograms( 1902 /+[out]+/ IEnumDebugPrograms2 * ppEnum); 1903 1904 HRESULT GetName( 1905 in GETNAME_TYPE gnType, 1906 /+[out]+/ BSTR* pbstrName); 1907 1908 HRESULT GetServer( 1909 /+[out]+/ IDebugCoreServer2 * ppServer); 1910 1911 HRESULT Terminate(); 1912 1913 HRESULT Attach( 1914 /+[in]+/ IDebugEventCallback2 pCallback, 1915 /+[ size_is (celtSpecificEngines)]+/ in GUID* rgguidSpecificEngines, 1916 in DWORD celtSpecificEngines, 1917 /+[out, size_is(celtSpecificEngines), length_is(celtSpecificEngines)]+/ HRESULT* rghrEngineAttach); 1918 1919 HRESULT CanDetach(); 1920 1921 HRESULT Detach(); 1922 1923 HRESULT GetPhysicalProcessId( 1924 /+[out]+/ AD_PROCESS_ID* pProcessId); 1925 1926 HRESULT GetProcessId( 1927 /+[out]+/ GUID* pguidProcessId); 1928 1929 HRESULT GetAttachedSessionName( 1930 /+[out]+/ BSTR* pbstrSessionName); 1931 1932 // Get a list of threads in this process (no duplicates) 1933 HRESULT EnumThreads( 1934 /+[out]+/ IEnumDebugThreads2 * ppEnum); 1935 1936 HRESULT CauseBreak(); 1937 1938 HRESULT GetPort( 1939 /+[out]+/ IDebugPort2 * ppPort); 1940 } 1941 enum /+ enum_PROCESS_INFO_FLAGS+/ : DWORD 1942 { 1943 PIFLAG_SYSTEM_PROCESS = 0x00000001, 1944 PIFLAG_DEBUGGER_ATTACHED = 0x00000002, 1945 // The flags below are only valid in VS8 and above 1946 // and are only set when PIFLAG_DEBUGGER_ATTACHED 1947 // is set. 1948 PIFLAG_PROCESS_STOPPED = 0x00000004, 1949 PIFLAG_PROCESS_RUNNING = 0x00000008, 1950 } 1951 alias DWORD enum_PROCESS_INFO_FLAGS; 1952 alias DWORD PROCESS_INFO_FLAGS; 1953 enum /+ enum_PROCESS_INFO_FIELDS+/ : DWORD 1954 { 1955 PIF_FILE_NAME = 0x00000001, 1956 PIF_BASE_NAME = 0x00000002, 1957 PIF_TITLE = 0x00000004, 1958 PIF_PROCESS_ID = 0x00000008, 1959 PIF_SESSION_ID = 0x00000010, 1960 PIF_ATTACHED_SESSION_NAME = 0x00000020, 1961 PIF_CREATION_TIME = 0x00000040, 1962 PIF_FLAGS = 0x00000080, 1963 1964 PIF_ALL = 0x000000ff, 1965 } 1966 alias DWORD enum_PROCESS_INFO_FIELDS; 1967 alias DWORD PROCESS_INFO_FIELDS; 1968 struct tagPROCESS_INFO 1969 { 1970 // Valid fields 1971 PROCESS_INFO_FIELDS Fields; 1972 // Full path+file name+extension; equivalent to calling GetName(GN_FILENAME, ...) 1973 BSTR bstrFileName; 1974 // File name+extension; equivalent to calling GetName(GN_BASENAME, ...) 1975 BSTR bstrBaseName; 1976 // Title (if one exists); equivalent to calling GetName(GN_TITLE, ...) 1977 BSTR bstrTitle; 1978 // Process id; equivalent to calling GetPhysicalProcessId 1979 AD_PROCESS_ID ProcessId; 1980 // Session id: the system session that this process is running in 1981 DWORD dwSessionId; 1982 // Attached session name (if one exists); equivalent to calling GetAttachedSessionName 1983 BSTR bstrAttachedSessionName; 1984 // Time the process was created 1985 FILETIME CreationTime; 1986 // Flags 1987 PROCESS_INFO_FLAGS Flags; 1988 } 1989 alias tagPROCESS_INFO PROCESS_INFO;; 1990 1991 const GUID IID_IDebugProcess3 = IDebugProcess3.iid; 1992 1993 interface IDebugProcess3 : IDebugProcess2 1994 { 1995 static const GUID iid = { 0x83ab1712,0x18a6,0x47a1,[ 0x8d,0xa6,0x8c,0x7b,0x0f,0x96,0x09,0x2e ] }; 1996 1997 // Execute the process. The thread is given so that the debugger 1998 // knows which thread the user is viewing when executing. 1999 HRESULT Execute( 2000 /+[in]+/ IDebugThread2 pThread); 2001 2002 // Continue the process in whatever state is was previously in. If 2003 // the process was stepping, then continue the step; otherwise, 2004 // continue execution. 2005 HRESULT Continue( 2006 /+[in]+/ IDebugThread2 pThread); 2007 2008 // Step the process. The thread specified is stepped and all other 2009 // threads in the process run. 2010 HRESULT Step( 2011 /+[in]+/ IDebugThread2 pThread, 2012 in STEPKIND sk, 2013 in STEPUNIT step); 2014 2015 HRESULT GetDebugReason( 2016 /+[out]+/ DEBUG_REASON *pReason); 2017 2018 // Provide a way to indicate the HostingProcessLanguage so that the managed 2019 // debug engine can preload the right EE. 2020 HRESULT SetHostingProcessLanguage(in GUID* guidLang); 2021 HRESULT GetHostingProcessLanguage(/+[out]+/ GUID* pguidLang); 2022 2023 // Provide a mechanism for the Package to explicitly disable ENC. 2024 // EncUnavailableReason is defined in enc.idl 2025 HRESULT DisableENC( 2026 in EncUnavailableReason reason); 2027 HRESULT GetENCAvailableState( 2028 /+[out]+/EncUnavailableReason* preason); 2029 2030 HRESULT GetEngineFilter( 2031 /+[out]+/ GUID_ARRAY *pEngineArray); 2032 } 2033 enum /+ enum_STEPKIND+/ : DWORD 2034 { 2035 STEP_INTO, 2036 STEP_OVER, 2037 STEP_OUT, 2038 STEP_BACKWARDS 2039 } 2040 alias DWORD enum_STEPKIND; 2041 alias DWORD STEPKIND; 2042 enum /+ enum_STEPUNIT+/ : DWORD 2043 { 2044 STEP_STATEMENT, 2045 STEP_LINE, 2046 STEP_INSTRUCTION, 2047 } 2048 alias DWORD enum_STEPUNIT; 2049 alias DWORD STEPUNIT; 2050 enum /+ enum_DEBUG_REASON+/ : DWORD 2051 { 2052 DEBUG_REASON_ERROR, 2053 DEBUG_REASON_USER_LAUNCHED, 2054 DEBUG_REASON_USER_ATTACHED, 2055 DEBUG_REASON_AUTO_ATTACHED, 2056 DEBUG_REASON_CAUSALITY 2057 } 2058 alias DWORD enum_DEBUG_REASON; 2059 alias DWORD DEBUG_REASON;; 2060 2061 const GUID IID_IDebugProcessSecurity2 = IDebugProcessSecurity2.iid; 2062 2063 interface IDebugProcessSecurity2 : IUnknown 2064 { 2065 static const GUID iid = { 0xfca0c35c,0x4c02,0x432b,[ 0x88,0xf7,0xeb,0x27,0x7b,0xe2,0xba,0x55 ] }; 2066 HRESULT QueryCanSafelyAttach( 2067 ); 2068 2069 HRESULT GetUserName( 2070 /+[out]+/ BSTR *pbstrUserName 2071 ); 2072 }; 2073 2074 // ------------------------------------------------------------------ 2075 // IDebugProgram2 2076 const GUID IID_IDebugProgram2 = IDebugProgram2.iid; 2077 2078 interface IDebugProgram2 : IUnknown 2079 { 2080 static const GUID iid = { 0x69d172ef,0xf2c4,0x44e1,[ 0x89,0xf7,0xc8,0x62,0x31,0xe7,0x06,0xe9 ] }; 2081 2082 HRESULT EnumThreads( 2083 /+[out]+/ IEnumDebugThreads2 * ppEnum); 2084 2085 HRESULT GetName( 2086 /+[out]+/ BSTR* pbstrName); 2087 2088 HRESULT GetProcess( 2089 /+[out]+/ IDebugProcess2 * ppProcess); 2090 2091 HRESULT Terminate(); 2092 2093 HRESULT Attach( 2094 /+[in]+/ IDebugEventCallback2 pCallback); 2095 2096 HRESULT CanDetach(); 2097 2098 HRESULT Detach(); 2099 2100 HRESULT GetProgramId( 2101 /+[out]+/ GUID* pguidProgramId); 2102 2103 HRESULT GetDebugProperty( 2104 /+[out]+/ IDebugProperty2 * ppProperty); 2105 2106 // To execute during an expression evaluation, use IDebugProcess3:: 2107 // Execute. Execution during expression evaluation requires 2108 // a thread so that the correct expression evaluation can be continued. 2109 HRESULT Execute(); 2110 2111 // Continue, preserving state 2112 HRESULT Continue( 2113 /+[in]+/ IDebugThread2 pThread); 2114 2115 HRESULT Step( 2116 /+[in]+/ IDebugThread2 pThread, 2117 in STEPKIND sk, 2118 in STEPUNIT step); 2119 2120 HRESULT CauseBreak(); 2121 2122 HRESULT GetEngineInfo( 2123 /+[out]+/ BSTR* pbstrEngine, 2124 /+[out]+/ GUID* pguidEngine); 2125 2126 HRESULT EnumCodeContexts( 2127 /+[in]+/ IDebugDocumentPosition2 pDocPos, 2128 /+[out]+/ IEnumDebugCodeContexts2 * ppEnum); 2129 2130 HRESULT GetMemoryBytes( 2131 /+[out]+/ IDebugMemoryBytes2 * ppMemoryBytes); 2132 2133 HRESULT GetDisassemblyStream( 2134 in DISASSEMBLY_STREAM_SCOPE dwScope, 2135 /+[in]+/ IDebugCodeContext2 pCodeContext, 2136 /+[out]+/ IDebugDisassemblyStream2 * ppDisassemblyStream); 2137 2138 HRESULT EnumModules( 2139 /+[out]+/ IEnumDebugModules2 * ppEnum); 2140 2141 HRESULT GetENCUpdate( 2142 /+[out]+/ IDebugENCUpdate** ppUpdate); 2143 2144 HRESULT EnumCodePaths( 2145 /+[ ptr]+/ in LPCOLESTR pszHint, 2146 /+[in]+/ IDebugCodeContext2 pStart, 2147 /+[in]+/ IDebugStackFrame2 pFrame, 2148 in BOOL fSource, 2149 /+[out]+/ IEnumCodePaths2 * ppEnum, 2150 /+[out]+/ IDebugCodeContext2 * ppSafety); 2151 2152 HRESULT WriteDump( 2153 in DUMPTYPE DumpType, 2154 in LPCOLESTR pszDumpUrl 2155 ); 2156 } 2157 enum /+ enum_DISASSEMBLY_STREAM_SCOPE+/ : DWORD 2158 { 2159 DSS_HUGE = 0x10000000, 2160 // Get the disasm for the function contained by the code context 2161 DSS_FUNCTION = 0x0001, 2162 // Get the disasm for the module contained by the code context 2163 DSS_MODULE = (DSS_HUGE) | 0x0002, 2164 // Get the disasm for the entire address space 2165 DSS_ALL = (DSS_HUGE) | 0x0003 2166 } 2167 alias DWORD enum_DISASSEMBLY_STREAM_SCOPE; 2168 alias DWORD DISASSEMBLY_STREAM_SCOPE; 2169 enum /+ enum_DUMPTYPE+/ : DWORD 2170 { 2171 // "mini" dump of the program state 2172 DUMP_MINIDUMP, 2173 // full dump of the program state 2174 DUMP_FULLDUMP, 2175 } 2176 alias DWORD enum_DUMPTYPE; 2177 alias DWORD DUMPTYPE; 2178 struct tagCODE_PATH 2179 { 2180 BSTR bstrName; 2181 IDebugCodeContext2 pCode; 2182 } 2183 alias tagCODE_PATH CODE_PATH;; 2184 2185 // ------------------------------------------------------------------ 2186 // IDebugProgram3 2187 const GUID IID_IDebugProgram3 = IDebugProgram3.iid; 2188 2189 interface IDebugProgram3 : IDebugProgram2 2190 { 2191 static const GUID iid = { 0x7CF3EC7F,0xAC62,0x4cd6,[ 0xBB,0x30,0x39,0xA4,0x64,0xCB,0x52,0xCB ] }; 2192 // Execute the program. The thread is given so that the debugger 2193 // knows which thread the user is viewing when executing. 2194 HRESULT ExecuteOnThread( 2195 /+[in]+/ IDebugThread2 pThread); 2196 }; 2197 2198 // ------------------------------------------------------------------ 2199 // IDebugEngineProgram2 2200 const GUID IID_IDebugEngineProgram2 = IDebugEngineProgram2.iid; 2201 2202 interface IDebugEngineProgram2 : IUnknown 2203 { 2204 static const GUID iid = { 0x7ce3e768,0x654d,0x4ba7,[ 0x8d,0x95,0xcd,0xaa,0xc6,0x42,0xb1,0x41 ] }; 2205 2206 // Stop all threads running in this program 2207 HRESULT Stop(); 2208 2209 HRESULT WatchForThreadStep( 2210 /+[in]+/ IDebugProgram2 pOriginatingProgram, 2211 in DWORD dwTid, 2212 in BOOL fWatch, 2213 in DWORD dwFrame); 2214 2215 HRESULT WatchForExpressionEvaluationOnThread( 2216 /+[in]+/ IDebugProgram2 pOriginatingProgram, 2217 in DWORD dwTid, 2218 in DWORD dwEvalFlags, 2219 // pExprCallback must be NULL in V8 and above 2220 /+[in]+/ IDebugEventCallback2 pExprCallback, 2221 in BOOL fWatch); 2222 } 2223 enum /+ enum_WATCHFOREVAL+/ : int 2224 { 2225 // the program being notified is the leaf program (it owns the leaf frame) 2226 WATCHFOREVAL_LEAF_PROGRAM = 0x10000000 2227 } 2228 alias int enum_WATCHFOREVAL;; 2229 2230 // ------------------------------------------------------------------ 2231 // IDebugProgramHost2 2232 const GUID IID_IDebugProgramHost2 = IDebugProgramHost2.iid; 2233 2234 interface IDebugProgramHost2 : IUnknown 2235 { 2236 static const GUID iid = { 0xc99d588f,0x778c,0x44fe,[ 0x8b,0x2e,0x40,0x12,0x4a,0x73,0x88,0x91 ] }; 2237 HRESULT GetHostName( 2238 in DWORD dwType, 2239 /+[out]+/ BSTR* pbstrHostName); 2240 2241 HRESULT GetHostId( 2242 /+[out]+/ AD_PROCESS_ID* pProcessId); 2243 2244 HRESULT GetHostMachineName( 2245 /+[out]+/ BSTR* pbstrHostMachineName); 2246 }; 2247 2248 // ------------------------------------------------------------------ 2249 // IDebugProgramNode2 2250 const GUID IID_IDebugProgramNode2 = IDebugProgramNode2.iid; 2251 2252 interface IDebugProgramNode2 : IUnknown 2253 { 2254 static const GUID iid = { 0x426e255c,0xf1ce,0x4d02,[ 0xa9,0x31,0xf9,0xa2,0x54,0xbf,0x7f,0x0f ] }; 2255 2256 HRESULT GetProgramName( 2257 /+[out]+/ BSTR* pbstrProgramName); 2258 2259 HRESULT GetHostName( 2260 in GETHOSTNAME_TYPE dwHostNameType, 2261 /+[out]+/ BSTR* pbstrHostName); 2262 2263 HRESULT GetHostPid( 2264 /+[out]+/ AD_PROCESS_ID* pHostProcessId); 2265 2266 // method is no longer used, and does not need to be implemented 2267 HRESULT GetHostMachineName_V7( 2268 /+[out]+/ BSTR* pbstrHostMachineName); 2269 2270 // method is no longer used, and should not be implemented 2271 HRESULT Attach_V7( 2272 /+[in]+/ IDebugProgram2 pMDMProgram, 2273 /+[in]+/ IDebugEventCallback2 pCallback, 2274 in DWORD dwReason); 2275 2276 HRESULT GetEngineInfo( 2277 /+[out]+/ BSTR* pbstrEngine, 2278 /+[out]+/ GUID* pguidEngine); 2279 2280 // method is no longer used, and should not be implemented 2281 HRESULT DetachDebugger_V7(); 2282 } 2283 enum /+ enum_GETHOSTNAME_TYPE+/ : DWORD 2284 { 2285 GHN_FRIENDLY_NAME, // Gets friendly name of the host 2286 GHN_FILE_NAME, 2287 } 2288 alias DWORD enum_GETHOSTNAME_TYPE; 2289 alias DWORD GETHOSTNAME_TYPE;; 2290 2291 const GUID IID_IDebugProgramNodeAttach2 = IDebugProgramNodeAttach2.iid; 2292 2293 interface IDebugProgramNodeAttach2 : IUnknown 2294 { 2295 static const GUID iid = { 0x73faa608,0x5f87,0x4d2b,[ 0x95,0x51,0x84,0x40,0xb1,0xcb,0xf5,0x4c ] }; 2296 // This is the whidbey replacement for IDebugProgramNode2::Attach. 2297 // This gives a program node a chance to say that it doesn't want 2298 // to be debugged, and to know the program id on the port 2299 // supplier program 2300 HRESULT OnAttach( 2301 in GUID* guidProgramId); 2302 }; 2303 2304 // ------------------------------------------------------------------ 2305 // IDebugProgramEngines2 2306 // 2307 // IDebugProgramEngines2 is implemented by program nodes to indicate 2308 // all the possible DEs that can debug this program. Once a DE is 2309 // chosen (via some UI) that choice is registered by calling SetEngine. 2310 // This engine will then be the engine returned by 2311 // IDebugProgramNode::GetEngineInfo. 2312 const GUID IID_IDebugProgramEngines2 = IDebugProgramEngines2.iid; 2313 2314 interface IDebugProgramEngines2 : IUnknown 2315 { 2316 static const GUID iid = { 0xfda24a6b,0xb142,0x447d,[ 0xbb,0xbc,0x86,0x54,0xa3,0xd8,0x4f,0x80 ] }; 2317 // In order to determine how many engines there are, call once 2318 // with celtBuffer set to 0 and rgguidEngines set to NULL. This 2319 // function will return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) 2320 // anytime the buffer is too small and *pceltEngines will contain 2321 // the necessary size of the buffer. 2322 HRESULT EnumPossibleEngines( 2323 in DWORD celtBuffer, 2324 /+[in, out, ptr, size_is(celtBuffer), length_is(*pceltEngines)]+/ GUID* rgguidEngines, 2325 /+[in, out]+/ DWORD* pceltEngines); 2326 2327 // Tell the program/program node which engine to use for debugging this program 2328 HRESULT SetEngine( 2329 in GUID* guidEngine); 2330 }; 2331 2332 // ------------------------------------------------------------------ 2333 // IDebugCOMPlusProgramNode2 2334 const GUID IID_IDebugCOMPlusProgramNode2 = IDebugCOMPlusProgramNode2.iid; 2335 2336 interface IDebugCOMPlusProgramNode2 : IUnknown 2337 { 2338 static const GUID iid = { 0xd6f7d3d0,0x506a,0x448f,[ 0x87,0x02,0x46,0xeb,0x27,0x45,0xe4,0xfc ] }; 2339 HRESULT GetAppDomainId( 2340 /+[out]+/ ULONG32* pul32Id); 2341 }; 2342 2343 // ------------------------------------------------------------------ 2344 // IDebugSQLCLRProgramNode2 2345 const GUID IID_IDebugSQLCLRProgramNode2 = IDebugSQLCLRProgramNode2.iid; 2346 2347 interface IDebugSQLCLRProgramNode2 : IUnknown 2348 { 2349 static const GUID iid = { 0xF617DFCB,0x0045,0x4024,[ 0x83,0x7B,0x7A,0xCA,0xD8,0xF4,0xD6,0x7B ] }; 2350 HRESULT GetConnectionId( 2351 /+[out]+/ DWORD* pdwId); 2352 }; 2353 2354 // ------------------------------------------------------------------ 2355 // IDebugThread2 2356 const GUID IID_IDebugThread2 = IDebugThread2.iid; 2357 2358 interface IDebugThread2 : IUnknown 2359 { 2360 static const GUID iid = { 0xd5168050,0xa57a,0x465c,[ 0xbe,0xa9,0x97,0x4f,0x40,0x5e,0xba,0x13 ] }; 2361 2362 HRESULT EnumFrameInfo( 2363 in FRAMEINFO_FLAGS dwFieldSpec, 2364 in UINT nRadix, 2365 /+[out]+/ IEnumDebugFrameInfo2 * ppEnum); 2366 2367 HRESULT GetName( 2368 /+[out]+/ BSTR* pbstrName); 2369 2370 HRESULT SetThreadName( 2371 in LPCOLESTR pszName); 2372 2373 HRESULT GetProgram( 2374 /+[out]+/ IDebugProgram2 * ppProgram); 2375 2376 HRESULT CanSetNextStatement( 2377 /+[in]+/ IDebugStackFrame2 pStackFrame, 2378 /+[in]+/ IDebugCodeContext2 pCodeContext); 2379 2380 HRESULT SetNextStatement ( 2381 /+[in]+/ IDebugStackFrame2 pStackFrame, 2382 /+[in]+/ IDebugCodeContext2 pCodeContext); 2383 2384 HRESULT GetThreadId( 2385 /+[out]+/ DWORD* pdwThreadId); 2386 2387 HRESULT Suspend( 2388 /+[out]+/ DWORD *pdwSuspendCount); 2389 2390 HRESULT Resume( 2391 /+[out]+/ DWORD *pdwSuspendCount); 2392 2393 HRESULT GetThreadProperties( 2394 in THREADPROPERTY_FIELDS dwFields, 2395 /+[out]+/ THREADPROPERTIES *ptp); 2396 2397 HRESULT GetLogicalThread( 2398 /+[in]+/ IDebugStackFrame2 pStackFrame, 2399 /+[out]+/ IDebugLogicalThread2 *ppLogicalThread); 2400 } 2401 enum /+ enum_THREADSTATE+/ : DWORD 2402 { 2403 // The thread is running 2404 THREADSTATE_RUNNING = 0x0001, 2405 // The thread is stopped because of a breakpoint 2406 THREADSTATE_STOPPED = 0x0002, 2407 // The thread has been created, but is not yet running code 2408 THREADSTATE_FRESH = 0x0003, 2409 // The thread is dead 2410 THREADSTATE_DEAD = 0x0004, 2411 // The thread is frozen (no execution can be performed) 2412 THREADSTATE_FROZEN = 0x0005, 2413 } 2414 alias DWORD enum_THREADSTATE; 2415 alias DWORD THREADSTATE; 2416 enum /+ enum_THREADPROPERTY_FIELDS+/ : DWORD 2417 { 2418 TPF_ID = 0x0001, 2419 TPF_SUSPENDCOUNT = 0x0002, 2420 TPF_STATE = 0x0004, 2421 TPF_PRIORITY = 0x0008, 2422 TPF_NAME = 0x0010, 2423 TPF_LOCATION = 0x0020, 2424 2425 TPF_ALLFIELDS = 0xffffffff, 2426 } 2427 alias DWORD enum_THREADPROPERTY_FIELDS; 2428 alias DWORD THREADPROPERTY_FIELDS; 2429 struct _tagTHREADPROPERTIES 2430 { 2431 THREADPROPERTY_FIELDS dwFields; 2432 DWORD dwThreadId; 2433 DWORD dwSuspendCount; 2434 DWORD dwThreadState; 2435 BSTR bstrPriority; 2436 BSTR bstrName; 2437 BSTR bstrLocation; 2438 } 2439 alias _tagTHREADPROPERTIES THREADPROPERTIES; 2440 enum /+ enum_FRAMEINFO_FLAGS+/ : DWORD 2441 { 2442 // FRAMEINFO fields 2443 FIF_FUNCNAME = 0x00000001, 2444 FIF_RETURNTYPE = 0x00000002, 2445 FIF_ARGS = 0x00000004, 2446 FIF_LANGUAGE = 0x00000008, 2447 FIF_MODULE = 0x00000010, // The name of the module (m_bstrModule) 2448 FIF_STACKRANGE = 0x00000020, 2449 FIF_FRAME = 0x00000040, 2450 FIF_DEBUGINFO = 0x00000080, 2451 FIF_STALECODE = 0x00000100, 2452 FIF_FLAGS = 0x00000200, 2453 FIF_DEBUG_MODULEP = 0x00000400, // the IDebugModule2* for this frame. (m_pModule) 2454 2455 // Function name formatting 2456 2457 // Fill in the m_bstrFuncName field as a single string using all the flags specified below 2458 // Specifying FIF_FUNCNAME | FIF_FUNCNAME_FORMAT | FIF_FUNCNAME_RETURNTYPE | FIF_FUNCNAME_ARGS | FIF_FUNCNAME_ARGS_TYPE | FIF_FUNCNAME_ARGS_NAMES | FIF_FUNCNAME_ARGS_VALUES 2459 // Results in: int CFoo::foo(int x = 1, int y = 2) 2460 2461 FIF_FUNCNAME_FORMAT = 0x00001000, 2462 // Add the return type to the formatted function name 2463 FIF_FUNCNAME_RETURNTYPE = 0x00002000, 2464 // Add the args to the formatted function name 2465 FIF_FUNCNAME_ARGS = 0x00004000, 2466 // Add the language to the formatted function name 2467 FIF_FUNCNAME_LANGUAGE = 0x00008000, 2468 // Add the module name to the formatted function name 2469 FIF_FUNCNAME_MODULE = 0x00010000, 2470 // Add the number of lines to the end of the function name 2471 FIF_FUNCNAME_LINES = 0x00020000, 2472 // Add the bytes offset to the end of the function name 2473 FIF_FUNCNAME_OFFSET = 0x00040000, 2474 2475 // Function name argument formatting 2476 2477 // Format the args in the formatted function name (example: (x = 3, y = 4)) 2478 FIF_FUNCNAME_ARGS_TYPES = 0x00100000, 2479 FIF_FUNCNAME_ARGS_NAMES = 0x00200000, 2480 FIF_FUNCNAME_ARGS_VALUES = 0x00400000, 2481 2482 FIF_FUNCNAME_ARGS_ALL = 0x00700000, 2483 2484 // Argument formatting (in m_bstrArgs) 2485 FIF_ARGS_TYPES = 0x01000000, 2486 FIF_ARGS_NAMES = 0x02000000, 2487 FIF_ARGS_VALUES = 0x04000000, 2488 2489 FIF_ARGS_ALL = 0x07000000, 2490 2491 // If a client wants to be able to manipulate each arg separately, 2492 // set the FIF_ARGS_NOFORMAT and each FIF_ARGS_* flag will cause a 2493 // null-termianted string to be added to m_bstrArgs. 2494 // m_bstrArgs will then contain a series of null-terminated strings-- 2495 // one string per flag per arg. For example, if the name and value 2496 // flag are set and there are two args x and y, the string would be 2497 // "x<null char>3<null char>y<null char>4<null char>". 2498 FIF_ARGS_NOFORMAT = 0x08000000, 2499 2500 // For argument values, set FIF_ARGS_NO_FUNC_EVAL to turn off 2501 // function (property) evaluation when retrieving argument values. 2502 // This applies to whether arguments are being formatted in 2503 // the function name string or in m_bstrArgs. See also 2504 // FIF_ARGS_NO_TOSTRING. 2505 FIF_ARGS_NO_FUNC_EVAL = 0x10000000, 2506 2507 // Have the engine to filter user code frames. (Perf) 2508 FIF_FILTER_NON_USER_CODE = 0x20000000, 2509 2510 // Do not allow ToString() func-evals when returning function arguments. 2511 FIF_ARGS_NO_TOSTRING = 0x40000000, 2512 2513 // frame info should be gotten from the hosted app-domain 2514 // rather than the hosting process. 2515 FIF_DESIGN_TIME_EXPR_EVAL = 0x80000000, 2516 2517 // Include all frames 2518 FIF_FILTER_INCLUDE_ALL = 0x00080000 2519 } 2520 alias DWORD enum_FRAMEINFO_FLAGS; 2521 alias DWORD FRAMEINFO_FLAGS; 2522 enum /+ enum_FRAMEINFO_FLAGS_VALUES+/ : DWORD 2523 { 2524 FIFV_ANNOTATEDFRAME = 0x00000001, 2525 FIFV_NON_USER_CODE = 0x00000002, 2526 FIFV_CANINTERCEPT_EXCEPTION = 0x00000004, 2527 FIFV_FUNCEVALFRAME = 0x00000008, 2528 } 2529 alias DWORD enum_FRAMEINFO_FLAGS_VALUES; 2530 alias DWORD FRAMEINFO_FLAGS_VALUES; 2531 struct tagFRAMEINFO 2532 { 2533 FRAMEINFO_FLAGS m_dwValidFields; // which FRAMEINFO fields were successfully initialized 2534 BSTR m_bstrFuncName; // function name 2535 BSTR m_bstrReturnType; // function return type 2536 BSTR m_bstrArgs; // function arguments ( 2537 BSTR m_bstrLanguage; // language name 2538 BSTR m_bstrModule; // module name (i.e. "msvcrt.dll" or "Test.class") 2539 UINT64 m_addrMin; // minimum physical stack address 2540 UINT64 m_addrMax; // maximum physical stack address 2541 IDebugStackFrame2 m_pFrame; // IDebugStackFrame2 object corresponding to this stack frame 2542 IDebugModule2 m_pModule; // Module this frame is in. 2543 BOOL m_fHasDebugInfo; // TRUE if there is debug information in that frame. 2544 BOOL m_fStaleCode; // TRUE if frame corresponds to stale code 2545 DWORD m_dwFlags; 2546 } 2547 alias tagFRAMEINFO FRAMEINFO;; 2548 2549 // ------------------------------------------------------------------ 2550 // IDebugLogicalThread2 2551 // {95E4AC61-D37E-4fce-B6C6-C05A80AB946A} 2552 // DEFINE_GUID(<<name>>, 2553 // 0x95e4ac61, 0xd37e, 0x4fce, 0xb6, 0xc6, 0xc0, 0x5a, 0x80, 0xab, 0x94, 0x6a); 2554 const GUID IID_IDebugLogicalThread2 = IDebugLogicalThread2.iid; 2555 2556 interface IDebugLogicalThread2 : IUnknown 2557 { 2558 static const GUID iid = { 0x88d2f75b,0xd329,0x4e03,[ 0x9b,0x75,0x20,0x1f,0x77,0x82,0xd8,0xbd ] }; 2559 HRESULT EnumFrameInfo 2560 ( 2561 in FRAMEINFO_FLAGS dwFieldSpec, 2562 in UINT nRadix, 2563 /+[out]+/ IEnumDebugFrameInfo2 * ppEnum 2564 ); 2565 }; 2566 2567 // ------------------------------------------------------------------ 2568 // IDebugThread3 2569 // {43D24196-0000-467f-8C6B-9C006922D02F} 2570 const GUID IID_IDebugThread3 = IDebugThread3.iid; 2571 2572 interface IDebugThread3 : IDebugThread2 2573 { 2574 static const GUID iid = { 0x43D24196,0x0000,0x467f,[ 0x8C,0x6B,0x9C,0x00,0x69,0x22,0xD0,0x2F ] }; 2575 // Returns S_OK if there is a current exception, S_FALSE if there isn't. 2576 HRESULT IsCurrentException(); 2577 2578 // Determines If the leaf frame will remap immeadiately after an apply. 2579 // It cannot determine if the IP is in a finally clause. The user 2580 // must also query IDebugENC2::IsLeafRemapPossible to handle that. 2581 HRESULT CanRemapLeafFrame(); 2582 2583 // Force the leaf frame to remap. Will only succeed if CanRemapLeafFrame 2584 // would return S_OK. 2585 HRESULT RemapLeafFrame(); 2586 }; 2587 2588 // ----------------------------------------------------------------------- 2589 // IDebugProperty2 and IDebugReference2 attributes 2590 2591 enum DBG_ATTRIB_NONE = 0x0000000000000000; 2592 enum DBG_ATTRIB_ALL = 0xffffffffffffffff; 2593 2594 // Attributes about the object itself 2595 2596 // The reference/property is expandable 2597 enum DBG_ATTRIB_OBJ_IS_EXPANDABLE = 0x0000000000000001; 2598 2599 // This property indicates that an id for this object has been created. 2600 enum DBG_ATTRIB_OBJ_HAS_ID = 0x0000000000000002; 2601 // This property indicates that an id for this object can be created. 2602 enum DBG_ATTRIB_OBJ_CAN_HAVE_ID = 0x0000000000000004; 2603 2604 // Attributes about the value of the object 2605 2606 // The value of this reference/property is read only 2607 enum DBG_ATTRIB_VALUE_READONLY = 0x0000000000000010; 2608 // The value is an error 2609 enum DBG_ATTRIB_VALUE_ERROR = 0x0000000000000020; 2610 // The evaluation caused a side effect 2611 enum DBG_ATTRIB_VALUE_SIDE_EFFECT = 0x0000000000000040; 2612 // This property is really a container of overloads 2613 enum DBG_ATTRIB_OVERLOADED_CONTAINER = 0x0000000000000080; 2614 // This property is a boolean value 2615 enum DBG_ATTRIB_VALUE_BOOLEAN = 0x0000000000000100; 2616 // If DBG_ATTRIB_VALUE_BOOLEAN is set, 2617 // then this flag indicates whether the boolean value is true or false 2618 enum DBG_ATTRIB_VALUE_BOOLEAN_TRUE = 0x0000000000000200; 2619 // The value for this property is invalid (i.e. has no value) 2620 enum DBG_ATTRIB_VALUE_INVALID = 0x0000000000000400; 2621 // The value for this property is NAT (not a thing) 2622 enum DBG_ATTRIB_VALUE_NAT = 0x0000000000000800; 2623 // The value for this property has possibly been autoexpanded 2624 enum DBG_ATTRIB_VALUE_AUTOEXPANDED = 0x0000000000001000; 2625 // This property indicates an evaluation timed-out 2626 enum DBG_ATTRIB_VALUE_TIMEOUT = 0x0000000000002000; 2627 // This property indicates that this property can be represented by a raw string 2628 enum DBG_ATTRIB_VALUE_RAW_STRING = 0x0000000000004000; 2629 // This property indicates that this property has a custom viewer 2630 enum DBG_ATTRIB_VALUE_CUSTOM_VIEWER = 0x0000000000008000; 2631 2632 // Attributes that describe field access control 2633 enum DBG_ATTRIB_ACCESS_NONE = 0x0000000000010000; 2634 enum DBG_ATTRIB_ACCESS_PUBLIC = 0x0000000000020000; 2635 enum DBG_ATTRIB_ACCESS_PRIVATE = 0x0000000000040000; 2636 enum DBG_ATTRIB_ACCESS_PROTECTED = 0x0000000000080000; 2637 enum DBG_ATTRIB_ACCESS_FINAL = 0x0000000000100000; 2638 2639 enum DBG_ATTRIB_ACCESS_ALL = 0x00000000001f0000; 2640 2641 // Attributes that describe storage types 2642 enum DBG_ATTRIB_STORAGE_NONE = 0x0000000001000000; 2643 enum DBG_ATTRIB_STORAGE_GLOBAL = 0x0000000002000000; 2644 enum DBG_ATTRIB_STORAGE_STATIC = 0x0000000004000000; 2645 enum DBG_ATTRIB_STORAGE_REGISTER = 0x0000000008000000; 2646 2647 enum DBG_ATTRIB_STORAGE_ALL = 0x000000000f000000; 2648 2649 // Attributes that describe type modifiers 2650 enum DBG_ATTRIB_TYPE_NONE = 0x0000000100000000; 2651 enum DBG_ATTRIB_TYPE_VIRTUAL = 0x0000000200000000; 2652 enum DBG_ATTRIB_TYPE_CONSTANT = 0x0000000400000000; 2653 enum DBG_ATTRIB_TYPE_SYNCHRONIZED = 0x0000000800000000; 2654 enum DBG_ATTRIB_TYPE_VOLATILE = 0x0000001000000000; 2655 2656 enum DBG_ATTRIB_TYPE_ALL = 0x0000001f00000000; 2657 2658 // Attributes that describe the IDebugProperty2 type 2659 enum DBG_ATTRIB_DATA = 0x0000010000000000; 2660 enum DBG_ATTRIB_METHOD = 0x0000020000000000; 2661 enum DBG_ATTRIB_PROPERTY = 0x0000040000000000; 2662 enum DBG_ATTRIB_CLASS = 0x0000080000000000; 2663 enum DBG_ATTRIB_BASECLASS = 0x0000100000000000; 2664 enum DBG_ATTRIB_INTERFACE = 0x0000200000000000; 2665 enum DBG_ATTRIB_INNERCLASS = 0x0000400000000000; 2666 enum DBG_ATTRIB_MOSTDERIVEDCLASS = 0x0000800000000000; 2667 2668 enum DBG_ATTRIB_CHILD_ALL = 0x0000ff0000000000; 2669 2670 enum DBG_ATTRIB_MULTI_CUSTOM_VIEWERS = 0x0001000000000000; 2671 enum DBG_ATTRIB_EVENT = 0x0002000000000000; 2672 2673 alias UINT64 DBG_ATTRIB_FLAGS; 2674 2675 // ----------------------------------------------------------------------- 2676 // IDebugProperty2 2677 2678 enum /+ enum_DEBUGPROP_INFO_FLAGS+/ : DWORD 2679 { 2680 DEBUGPROP_INFO_FULLNAME = 0x00000001, 2681 DEBUGPROP_INFO_NAME = 0x00000002, 2682 DEBUGPROP_INFO_TYPE = 0x00000004, 2683 DEBUGPROP_INFO_VALUE = 0x00000008, 2684 DEBUGPROP_INFO_ATTRIB = 0x00000010, 2685 DEBUGPROP_INFO_PROP = 0x00000020, 2686 2687 DEBUGPROP_INFO_VALUE_AUTOEXPAND = 0x00010000, 2688 DEBUGPROP_INFO_NOFUNCEVAL = 0x00020000, // Tell EE not to perform ANY type of func-eval. 2689 DEBUGPROP_INFO_VALUE_RAW = 0x00040000, // Tell EE not to return any beautified values or members. 2690 DEBUGPROP_INFO_VALUE_NO_TOSTRING = 0x00080000, // Tell EE not to return any special synthesized values (ToString() for instance). 2691 DEBUGPROP_INFO_NO_NONPUBLIC_MEMBERS = 0x00100000, // Tell EE to return non-public members for non-user objects. 2692 2693 DEBUGPROP_INFO_NONE = 0x00000000, 2694 DEBUGPROP_INFO_STANDARD = DEBUGPROP_INFO_ATTRIB | DEBUGPROP_INFO_NAME | DEBUGPROP_INFO_TYPE | DEBUGPROP_INFO_VALUE, 2695 DEBUGPROP_INFO_ALL = 0xffffffff 2696 } 2697 alias DWORD enum_DEBUGPROP_INFO_FLAGS; 2698 alias DWORD DEBUGPROP_INFO_FLAGS; 2699 2700 struct tagDEBUG_PROPERTY_INFO 2701 { 2702 DEBUGPROP_INFO_FLAGS dwFields; 2703 BSTR bstrFullName; 2704 BSTR bstrName; 2705 BSTR bstrType; 2706 BSTR bstrValue; 2707 IDebugProperty2 pProperty; 2708 DBG_ATTRIB_FLAGS dwAttrib; 2709 } 2710 alias tagDEBUG_PROPERTY_INFO DEBUG_PROPERTY_INFO; 2711 2712 struct tagDEBUG_CUSTOM_VIEWER 2713 { 2714 DWORD dwID; // An ID to differentiate multiple viewers implemented by one guid. 2715 BSTR bstrMenuName; // The text that will appear in the drop-down menu. 2716 BSTR bstrDescription; // A description of the Custom Viewer (NULL if not used) 2717 GUID guidLang; // Language of the providing EE 2718 GUID guidVendor; // Vendor of the providing EE 2719 BSTR bstrMetric; 2720 } 2721 alias tagDEBUG_CUSTOM_VIEWER DEBUG_CUSTOM_VIEWER; 2722 2723 const GUID IID_IDebugProperty2 = IDebugProperty2.iid; 2724 2725 interface IDebugProperty2 : IUnknown 2726 { 2727 static const GUID iid = { 0xa7ee3e7e,0x2dd2,0x4ad7,[ 0x96,0x97,0xf4,0xaa,0xe3,0x42,0x77,0x62 ] }; 2728 // Get the DEBUG_PROPERTY_INFO that describes this property 2729 HRESULT GetPropertyInfo( 2730 in DEBUGPROP_INFO_FLAGS dwFields, 2731 in DWORD dwRadix, 2732 in DWORD dwTimeout, 2733 /+[ ptr , size_is(dwArgCount), length_is(dwArgCount)]+/ /+[in]+/ IDebugReference2 * rgpArgs, 2734 in DWORD dwArgCount, 2735 /+[out]+/ DEBUG_PROPERTY_INFO* pPropertyInfo); 2736 2737 // Set the value of this property 2738 HRESULT SetValueAsString( 2739 in LPCOLESTR pszValue, 2740 in DWORD dwRadix, 2741 in DWORD dwTimeout); 2742 2743 // Set the value of this property 2744 HRESULT SetValueAsReference( 2745 /+[ ptr , size_is(dwArgCount), length_is(dwArgCount)]+/ /+[in]+/ IDebugReference2 * rgpArgs, 2746 in DWORD dwArgCount, 2747 /+[in]+/ IDebugReference2 pValue, 2748 in DWORD dwTimeout); 2749 2750 // Enum the children of this property 2751 HRESULT EnumChildren( 2752 in DEBUGPROP_INFO_FLAGS dwFields, 2753 in DWORD dwRadix, 2754 in GUID* guidFilter, 2755 in DBG_ATTRIB_FLAGS dwAttribFilter, 2756 /+[ ptr]+/ in LPCOLESTR pszNameFilter, 2757 in DWORD dwTimeout, 2758 /+[out]+/ IEnumDebugPropertyInfo2 * ppEnum); 2759 2760 // Get the parent of this property 2761 HRESULT GetParent( 2762 /+[out]+/ IDebugProperty2 * ppParent); 2763 2764 // Get the property that describes the derived most property of this property 2765 HRESULT GetDerivedMostProperty( 2766 /+[out]+/ IDebugProperty2 * ppDerivedMost); 2767 2768 // Get the memory bytes that contains this property 2769 HRESULT GetMemoryBytes( 2770 /+[out]+/ IDebugMemoryBytes2 * ppMemoryBytes); 2771 2772 // Get a memory context for this property within the memory bytes returned by GetMemoryBytes 2773 HRESULT GetMemoryContext( 2774 /+[out]+/ IDebugMemoryContext2 * ppMemory); 2775 2776 // Get the size (in bytes) of this property 2777 HRESULT GetSize( 2778 /+[out]+/ DWORD* pdwSize); 2779 2780 // Get a reference for this property 2781 HRESULT GetReference( 2782 /+[out]+/ IDebugReference2 * ppReference); 2783 2784 // Get extended info for this property 2785 HRESULT GetExtendedInfo( 2786 in GUID* guidExtendedInfo, 2787 /+[out]+/ VARIANT* pExtendedInfo); 2788 }; 2789 2790 // Note: This interface is new in 8.0. It is a way for the shell to tell the SDM 2791 // that an IDebugProperty is no longer used. This isn't important for an appartment 2792 // model shell, but is important for a free threaded shell 2793 // #pragma warning(push) 2794 // #pragma warning(disable:28718) 2795 const GUID IID_IDebugSessionProperty2 = IDebugSessionProperty2.iid; 2796 2797 interface IDebugSessionProperty2 : IDebugProperty3 2798 { 2799 static const GUID iid = { 0x72ff2712,0x0bc3,0x4308,[ 0xa9,0x9d,0x26,0xac,0x7e,0xc6,0x8c,0x5f ] }; 2800 HRESULT Close(); 2801 HRESULT GetThread( 2802 /+[out]+/ IDebugThread3 * ppThread); 2803 }; 2804 // #pragma warning(pop) 2805 2806 // Note: this interface is new in 8.0. Debug engines should implement this interface 2807 // if they need WatchForExpressionEval called in order to destroy an IDebugProperty 2808 const GUID IID_IDebugPropertyClose2 = IDebugPropertyClose2.iid; 2809 2810 interface IDebugPropertyClose2 : IDebugProperty2 2811 { 2812 static const GUID iid = { 0x852c7d42,0x794f,0x43cd,[ 0xa1,0x8f,0xcd,0x40,0xe8,0x3e,0x67,0xcd ] }; 2813 HRESULT Close(); 2814 }; 2815 2816 // #pragma warning(push) 2817 // #pragma warning(disable:28718) 2818 const GUID IID_IDebugProperty3 = IDebugProperty3.iid; 2819 2820 interface IDebugProperty3 : IDebugProperty2 2821 { 2822 static const GUID iid = { 0x94E1E004,0x0672,0x423d,[ 0xAD,0x62,0x78,0x78,0x3D,0xEF,0x1E,0x76 ] }; 2823 // How long is the underlying string (in chars)? (excludes terminating byte) 2824 HRESULT GetStringCharLength( /+[out]+/ ULONG *pLen ); 2825 2826 // Get the actual string contents (excludes terminating byte) 2827 HRESULT GetStringChars( 2828 in ULONG buflen, 2829 /+[out, size_is(buflen), length_is(*pceltFetched)]+/ WCHAR *rgString, 2830 /+[out]+/ ULONG *pceltFetched 2831 ); 2832 2833 // created the id for this object 2834 HRESULT CreateObjectID(); 2835 2836 // destroy the id for this object 2837 HRESULT DestroyObjectID(); 2838 2839 // Support for custom visualizers 2840 HRESULT GetCustomViewerCount(/+[out]+/ ULONG* pcelt); 2841 HRESULT GetCustomViewerList(in ULONG celtSkip, in ULONG celtRequested, 2842 /+[out, size_is(celtRequested),length_is(*pceltFetched)]+/ DEBUG_CUSTOM_VIEWER* rgViewers, 2843 /+[out]+/ ULONG* pceltFetched); 2844 2845 // Set the value of this property 2846 HRESULT SetValueAsStringWithError( 2847 in LPCOLESTR pszValue, 2848 in DWORD dwRadix, 2849 in DWORD dwTimeout, 2850 /+[out]+/ BSTR * errorString); 2851 }; 2852 // #pragma warning(pop) 2853 2854 // Note: This interface is new in 8.0. It is a way for the shell to be able to 2855 // show a grid of data from an expression. 2856 const GUID IID_IDebugDataGrid = IDebugDataGrid.iid; 2857 2858 interface IDebugDataGrid : IUnknown 2859 { 2860 static const GUID iid = { 0x411F3E08,0xE6B1,0x4789,[ 0xAB,0x29,0x75,0x5C,0x52,0xE5,0x2A,0xC4 ] }; 2861 HRESULT GetGridInfo( 2862 /+[out]+/ ULONG *pX, 2863 /+[out]+/ ULONG *pY, 2864 /+[out]+/ BSTR *bpstrTitle 2865 ); 2866 2867 HRESULT GetGridPropertyInfo( 2868 ULONG x, 2869 ULONG y, 2870 ULONG celtX, 2871 ULONG celtY, 2872 ULONG celtXtimesY, 2873 DEBUGPROP_INFO_FLAGS dwFields, 2874 DWORD dwRadix, 2875 /+[out, size_is(celtXtimesY), length_is(*pceltFetched)]+/ DEBUG_PROPERTY_INFO* rgelt, 2876 /+[out]+/ ULONG* pceltFetched 2877 ); 2878 }; 2879 2880 // Note: This interface is new in 8.0. Only the SDM needs to implement it 2881 // It is for the shell to ensure extended property evaluation works correctly 2882 // when multiple engines are involved, and to extract a raw interface from a wrapped one 2883 const GUID IID_IDebugPropertySafetyWrapper = IDebugPropertySafetyWrapper.iid; 2884 2885 interface IDebugPropertySafetyWrapper : IUnknown 2886 { 2887 static const GUID iid = { 0x7031886B,0x61D2,0x4cb5,[ 0xB9,0x09,0x00,0x38,0x60,0x90,0x73,0x3B ] }; 2888 HRESULT BeforePropertyCall(); 2889 HRESULT AfterPropertyCall(); 2890 HRESULT GetRawProperty( /+[out]+/ IDebugProperty3 * ppProperty); 2891 } 2892 2893 // ----------------------------------------------------------------------- 2894 // IDebugReference2 2895 2896 enum /+ enum_REFERENCE_TYPE+/ : DWORD 2897 { 2898 // Weak reference 2899 REF_TYPE_WEAK = 0x0001, 2900 // Strong reference 2901 REF_TYPE_STRONG = 0x0002, 2902 } 2903 alias DWORD enum_REFERENCE_TYPE; 2904 alias DWORD REFERENCE_TYPE; 2905 2906 enum /+ enum_DEBUGREF_INFO_FLAGS+/ : DWORD 2907 { 2908 DEBUGREF_INFO_NAME = 0x00000001, 2909 DEBUGREF_INFO_TYPE = 0x00000002, 2910 DEBUGREF_INFO_VALUE = 0x00000004, 2911 DEBUGREF_INFO_ATTRIB = 0x00000008, 2912 DEBUGREF_INFO_REFTYPE = 0x00000010, 2913 DEBUGREF_INFO_REF = 0x00000020, 2914 2915 DEBUGREF_INFO_VALUE_AUTOEXPAND = 0x00010000, 2916 2917 DEBUGREF_INFO_NONE = 0x00000000, 2918 DEBUGREF_INFO_ALL = 0xffffffff 2919 } 2920 alias DWORD enum_DEBUGREF_INFO_FLAGS; 2921 alias DWORD DEBUGREF_INFO_FLAGS; 2922 2923 struct tagDEBUG_REFERENCE_INFO 2924 { 2925 DEBUGREF_INFO_FLAGS dwFields; 2926 BSTR bstrName; 2927 BSTR bstrType; 2928 BSTR bstrValue; 2929 DBG_ATTRIB_FLAGS dwAttrib; 2930 REFERENCE_TYPE dwRefType; 2931 IDebugReference2 pReference; 2932 } 2933 alias tagDEBUG_REFERENCE_INFO DEBUG_REFERENCE_INFO; 2934 2935 const GUID IID_IDebugReference2 = IDebugReference2.iid; 2936 2937 interface IDebugReference2 : IUnknown 2938 { 2939 static const GUID iid = { 0x10b793ac,0x0c47,0x4679,[ 0x84,0x54,0xad,0xb3,0x6f,0x29,0xf8,0x02 ] }; 2940 2941 // Get the DEBUG_REFERENCE_INFO that describes this reference 2942 HRESULT GetReferenceInfo( 2943 in DEBUGREF_INFO_FLAGS dwFields, 2944 in DWORD dwRadix, 2945 in DWORD dwTimeout, 2946 /+[ size_is (dwArgCount), length_is(dwArgCount)]+/ /+[in]+/ IDebugReference2 * rgpArgs, 2947 in DWORD dwArgCount, 2948 /+[out]+/ DEBUG_REFERENCE_INFO* pReferenceInfo); 2949 2950 // Set the value of this reference 2951 HRESULT SetValueAsString( 2952 in LPCOLESTR pszValue, 2953 in DWORD dwRadix, 2954 in DWORD dwTimeout); 2955 2956 // Set the value of this reference 2957 HRESULT SetValueAsReference( 2958 /+[ size_is (dwArgCount), length_is(dwArgCount)]+/ /+[in]+/ IDebugReference2 * rgpArgs, 2959 in DWORD dwArgCount, 2960 /+[in]+/ IDebugReference2 pValue, 2961 in DWORD dwTimeout); 2962 2963 // Enum the children of this reference 2964 HRESULT EnumChildren( 2965 in DEBUGREF_INFO_FLAGS dwFields, 2966 in DWORD dwRadix, 2967 in DBG_ATTRIB_FLAGS dwAttribFilter, 2968 /+[ ptr]+/ in LPCOLESTR pszNameFilter, 2969 in DWORD dwTimeout, 2970 /+[out]+/ IEnumDebugReferenceInfo2 * ppEnum); 2971 2972 // Get the parent of this reference 2973 HRESULT GetParent( 2974 /+[out]+/ IDebugReference2 * ppParent); 2975 2976 // Get the reference that describes the derived most reference of this reference 2977 HRESULT GetDerivedMostReference( 2978 /+[out]+/ IDebugReference2 * ppDerivedMost); 2979 2980 // Get the memory bytes that contains this reference 2981 HRESULT GetMemoryBytes( 2982 /+[out]+/ IDebugMemoryBytes2 * ppMemoryBytes); 2983 2984 // Get a memory context for this reference within the memory bytes returned by GetMemoryBytes 2985 HRESULT GetMemoryContext( 2986 /+[out]+/ IDebugMemoryContext2 * ppMemory); 2987 2988 // Get the size (in bytes) of this reference 2989 HRESULT GetSize( 2990 /+[out]+/ DWORD* pdwSize); 2991 2992 // Set the reference type (weak or strong) 2993 HRESULT SetReferenceType( 2994 in REFERENCE_TYPE dwRefType); 2995 2996 // Compare this reference with the one given in the matter given 2997 // result = this cwCompare pReference 2998 HRESULT Compare( 2999 in REFERENCE_COMPARE dwCompare, 3000 /+[in]+/ IDebugReference2 pReference); 3001 } 3002 enum /+ enum_REFERENCE_COMPARE+/ : DWORD 3003 { 3004 REF_COMPARE_EQUAL = 0x0001, 3005 REF_COMPARE_LESS_THAN = 0x0002, 3006 REF_COMPARE_GREATER_THAN = 0x0003, 3007 } 3008 alias DWORD enum_REFERENCE_COMPARE; 3009 alias DWORD REFERENCE_COMPARE;; 3010 3011 // ------------------------------------------------------------------ 3012 // IDebugStackFrame2 3013 const GUID IID_IDebugStackFrame2 = IDebugStackFrame2.iid; 3014 3015 interface IDebugStackFrame2 : IUnknown 3016 { 3017 static const GUID iid = { 0x1412926f,0x5dd6,0x4e58,[ 0xb6,0x48,0xe1,0xc6,0x3e,0x01,0x3d,0x51 ] }; 3018 HRESULT GetCodeContext( 3019 /+[out]+/ IDebugCodeContext2 * ppCodeCxt); 3020 3021 HRESULT GetDocumentContext( 3022 /+[out]+/ IDebugDocumentContext2 * ppCxt); 3023 3024 HRESULT GetName( 3025 /+[out]+/ BSTR* pbstrName); 3026 3027 HRESULT GetInfo( 3028 in FRAMEINFO_FLAGS dwFieldSpec, 3029 in UINT nRadix, 3030 /+[out]+/ FRAMEINFO* pFrameInfo); 3031 3032 // Returns a machine dependent representation of the range of physical addresses 3033 // associated with this stack frame. This is used by the process debug manager to sort 3034 // the stack frames from multiple script engines. By convention, stacks grow down and, 3035 // as such, on architectures where stacks grow up the addresses should be 3036 // twos-complemented. 3037 // NOTE: This implementation will not work for cross-process or cross-machine stacks 3038 HRESULT GetPhysicalStackRange( 3039 /+[out]+/ UINT64* paddrMin, 3040 /+[out]+/ UINT64* paddrMax); 3041 3042 HRESULT GetExpressionContext( 3043 /+[out]+/ IDebugExpressionContext2 * ppExprCxt); 3044 3045 HRESULT GetLanguageInfo( 3046 /+[in, out, ptr]+/ BSTR* pbstrLanguage, 3047 /+[in, out, ptr]+/ GUID* pguidLanguage); 3048 3049 HRESULT GetDebugProperty( 3050 /+[out]+/ IDebugProperty2 * ppProperty); 3051 3052 // PERF API - Get the count of locals as well as the enumerator 3053 // This API may not be supported by all LEs, so if it fails, use the generic 3054 // approach through GetDebugProperty. However, if this API is supported it 3055 // may save a few cross-process calls 3056 HRESULT EnumProperties( 3057 in DEBUGPROP_INFO_FLAGS dwFields, 3058 in UINT nRadix, 3059 in GUID* guidFilter, 3060 in DWORD dwTimeout, 3061 /+[out]+/ ULONG* pcelt, 3062 /+[out]+/ IEnumDebugPropertyInfo2 * ppEnum); 3063 3064 HRESULT GetThread( 3065 /+[out]+/ IDebugThread2 * ppThread); 3066 }; 3067 3068 // ------------------------------------------------------------------ 3069 // IDebugStackFrame3 3070 // An extension of IDebugStackFrame2 for new debugger features 3071 // supported in VS version 8. 3072 const GUID IID_IDebugStackFrame3 = IDebugStackFrame3.iid; 3073 3074 interface IDebugStackFrame3 : IDebugStackFrame2 3075 { 3076 static const GUID iid = { 0x60DE844B,0x38B1,0x4d87,[ 0xAF,0xE1,0x8C,0xF4,0x96,0x77,0xD3,0xB0 ] }; 3077 3078 // Install a temporary exception handler at this 3079 // frame that will "handle" the current 3080 // exception on the next call to Execute, Continue, 3081 // or Step. Specific behavior varies by the debug engine/ 3082 // platform/runtime environment. Once the exception 3083 // is "handled" by the temporary handler, an 3084 // IDebugInterceptExceptionCompleteEvent2 will be sent. 3085 // This function is not supported by all debug engines. 3086 HRESULT InterceptCurrentException( 3087 in INTERCEPT_EXCEPTION_ACTION dwFlags, 3088 /+[out]+/ UINT64* pqwCookie); 3089 3090 // Returns the code context representing the location 3091 // if a stack unwind is done. Note that this doesn't imply 3092 // that a stack unwind can be done to this frame. 3093 // This method isn't supported by all engines currently. 3094 HRESULT GetUnwindCodeContext( 3095 /+[out]+/ IDebugCodeContext2 *ppCodeContext); 3096 } 3097 enum /+ enum_INTERCEPT_EXCEPTION_ACTION+/ : DWORD 3098 { 3099 IEA_INTERCEPT = 0x0001, 3100 // Cancelling an intercept is not supported in VS8 3101 IEA_CANCEL_INTERCEPT = 0x0000, 3102 } 3103 alias DWORD enum_INTERCEPT_EXCEPTION_ACTION; 3104 alias DWORD INTERCEPT_EXCEPTION_ACTION;; 3105 3106 // ------------------------------------------------------------------ 3107 // IDebugMemoryContext2 3108 3109 const GUID IID_IDebugMemoryContext2 = IDebugMemoryContext2.iid; 3110 3111 interface IDebugMemoryContext2 : IUnknown 3112 { 3113 static const GUID iid = { 0x1ab276dd,0xf27b,0x4445,[ 0x82,0x5d,0x5d,0xf0,0xb4,0xa0,0x4a,0x3a ] }; 3114 3115 HRESULT GetName( 3116 /+[out]+/ BSTR* pbstrName); 3117 3118 HRESULT GetInfo( 3119 in CONTEXT_INFO_FIELDS dwFields, 3120 /+[out]+/ CONTEXT_INFO* pInfo); 3121 3122 HRESULT Add( 3123 in UINT64 dwCount, 3124 /+[out]+/ IDebugMemoryContext2 * ppMemCxt); 3125 3126 HRESULT Subtract( 3127 in UINT64 dwCount, 3128 /+[out]+/ IDebugMemoryContext2 * ppMemCxt); 3129 3130 HRESULT Compare( 3131 in CONTEXT_COMPARE compare, 3132 /+[ size_is (dwMemoryContextSetLen), length_is(dwMemoryContextSetLen)]+/ /+[in]+/ IDebugMemoryContext2 * rgpMemoryContextSet, 3133 in DWORD dwMemoryContextSetLen, 3134 /+[out]+/ DWORD* pdwMemoryContext); 3135 } 3136 enum /+ enum_CONTEXT_COMPARE+/ : DWORD 3137 { 3138 CONTEXT_EQUAL = 0x0001, 3139 CONTEXT_LESS_THAN = 0x0002, 3140 CONTEXT_GREATER_THAN = 0x0003, 3141 CONTEXT_LESS_THAN_OR_EQUAL = 0x0004, 3142 CONTEXT_GREATER_THAN_OR_EQUAL = 0x0005, 3143 CONTEXT_SAME_SCOPE = 0x0006, 3144 CONTEXT_SAME_FUNCTION = 0x0007, 3145 CONTEXT_SAME_MODULE = 0x0008, 3146 CONTEXT_SAME_PROCESS = 0x0009, 3147 } 3148 alias DWORD enum_CONTEXT_COMPARE; 3149 alias DWORD CONTEXT_COMPARE; 3150 enum /+ enum_CONTEXT_INFO_FIELDS+/ : DWORD 3151 { 3152 CIF_MODULEURL = 0x00000001, 3153 CIF_FUNCTION = 0x00000002, 3154 CIF_FUNCTIONOFFSET = 0x00000004, 3155 CIF_ADDRESS = 0x00000008, 3156 CIF_ADDRESSOFFSET = 0x00000010, 3157 CIF_ADDRESSABSOLUTE = 0x00000020, 3158 3159 CIF_ALLFIELDS = 0x0000003f, 3160 } 3161 alias DWORD enum_CONTEXT_INFO_FIELDS; 3162 alias DWORD CONTEXT_INFO_FIELDS; 3163 struct _tagCONTEXT_INFO 3164 { 3165 CONTEXT_INFO_FIELDS dwFields; 3166 BSTR bstrModuleUrl; 3167 BSTR bstrFunction; 3168 TEXT_POSITION posFunctionOffset; 3169 BSTR bstrAddress; 3170 BSTR bstrAddressOffset; 3171 BSTR bstrAddressAbsolute; 3172 } 3173 alias _tagCONTEXT_INFO CONTEXT_INFO;; 3174 3175 // ------------------------------------------------------------------ 3176 // IDebugCodeContext2 3177 const GUID IID_IDebugCodeContext2 = IDebugCodeContext2.iid; 3178 3179 interface IDebugCodeContext2 : IDebugMemoryContext2 3180 { 3181 static const GUID iid = { 0xac17b76b,0x2b09,0x419a,[ 0xad,0x5f,0x7d,0x74,0x02,0xda,0x88,0x75 ] }; 3182 HRESULT GetDocumentContext( 3183 /+[out]+/ IDebugDocumentContext2 *ppSrcCxt); 3184 3185 HRESULT GetLanguageInfo( 3186 /+[in, out, ptr]+/ BSTR* pbstrLanguage, 3187 /+[in, out, ptr]+/ GUID* pguidLanguage); 3188 }; 3189 3190 // ------------------------------------------------------------------ 3191 // IDebugCodeContext3 3192 // 3193 // QI from IDebugCodeContext2 3194 const GUID IID_IDebugCodeContext3 = IDebugCodeContext3.iid; 3195 3196 interface IDebugCodeContext3 : IDebugCodeContext2 3197 { 3198 static const GUID iid = { 0x17c106b9,0x0925,0x42f5,[ 0xae,0x32,0x1f,0xc0,0x19,0x64,0x9c,0x10 ] }; 3199 HRESULT GetModule( 3200 /+[out]+/ IDebugModule2 * ppModule); 3201 3202 HRESULT GetProcess( 3203 /+[out]+/ IDebugProcess2 * ppProcess); 3204 }; 3205 3206 // ------------------------------------------------------------------ 3207 // IDebugMemoryBytes2 3208 3209 const GUID IID_IDebugMemoryBytes2 = IDebugMemoryBytes2.iid; 3210 3211 interface IDebugMemoryBytes2 : IUnknown 3212 { 3213 static const GUID iid = { 0x925837d1,0x3aa1,0x451a,[ 0xb7,0xfe,0xcc,0x04,0xbb,0x42,0xcf,0xb8 ] }; 3214 HRESULT ReadAt( 3215 /+[in]+/ IDebugMemoryContext2 pStartContext, 3216 in DWORD dwCount, 3217 /+[out, size_is(dwCount), length_is(*pdwRead)]+/ BYTE* rgbMemory, 3218 /+[out]+/ DWORD* pdwRead, 3219 /+[in, out, ptr]+/ DWORD* pdwUnreadable); 3220 3221 HRESULT WriteAt( 3222 /+[in]+/ IDebugMemoryContext2 pStartContext, 3223 in DWORD dwCount, 3224 /+[ size_is (dwCount), length_is(dwCount)]+/ in BYTE* rgbMemory); 3225 3226 HRESULT GetSize( 3227 /+[out]+/ UINT64* pqwSize); 3228 }; 3229 3230 // ------------------------------------------------------------------ 3231 // IDebugDisassemblyStream2 3232 3233 const GUID IID_IDebugDisassemblyStream2 = IDebugDisassemblyStream2.iid; 3234 3235 interface IDebugDisassemblyStream2 : IUnknown 3236 { 3237 static const GUID iid = { 0xe5b017fe,0xdfb0,0x411c,[ 0x82,0x66,0x7c,0x64,0xd6,0xf5,0x19,0xf8 ] }; 3238 3239 HRESULT Read( 3240 // Set dwInstruction to 0 for !DSS_HUGE address spaces to read the entire address space 3241 in DWORD dwInstructions, 3242 in DISASSEMBLY_STREAM_FIELDS dwFields, 3243 /+[out]+/ DWORD* pdwInstructionsRead, 3244 /+[out, size_is(dwInstructions), length_is(*pdwInstructionsRead)]+/ DisassemblyData* prgDisassembly); 3245 3246 HRESULT Seek( 3247 in SEEK_START dwSeekStart, 3248 /+[in]+/ IDebugCodeContext2 pCodeContext, 3249 in UINT64 uCodeLocationId, 3250 in INT64 iInstructions); 3251 3252 // If the code context is outside the scope of code contexts which can be 3253 // disassembled by this stream, but is still a valid code context. then 3254 // *puCodeLocationId should be zero, and the return value is E_CODE_CONTEXT_OUT_OF_SCOPE 3255 HRESULT GetCodeLocationId( 3256 /+[in]+/ IDebugCodeContext2 pCodeContext, 3257 /+[out]+/ UINT64* puCodeLocationId); 3258 3259 HRESULT GetCodeContext( 3260 in UINT64 uCodeLocationId, 3261 /+[out]+/ IDebugCodeContext2 * ppCodeContext); 3262 3263 HRESULT GetCurrentLocation( 3264 /+[out]+/ UINT64* puCodeLocationId); 3265 3266 // implemented by engines that have text documents, but where bstrDocumentUrl 3267 // can not be passed as a filename 3268 HRESULT GetDocument( 3269 in BSTR bstrDocumentUrl, 3270 /+[out]+/ IDebugDocument2 * ppDocument); 3271 3272 HRESULT GetScope( 3273 /+[out]+/ DISASSEMBLY_STREAM_SCOPE* pdwScope); 3274 3275 HRESULT GetSize( 3276 /+[out]+/ UINT64 *pnSize); 3277 } 3278 enum /+ enum_DISASSEMBLY_STREAM_FIELDS+/ : DWORD 3279 { 3280 DSF_ADDRESS = 0x00000001, 3281 DSF_ADDRESSOFFSET = 0x00000002, 3282 DSF_CODEBYTES = 0x00000004, 3283 DSF_OPCODE = 0x00000008, 3284 DSF_OPERANDS = 0x00000010, 3285 DSF_SYMBOL = 0x00000020, 3286 DSF_CODELOCATIONID = 0x00000040, 3287 DSF_POSITION = 0x00000080, 3288 DSF_DOCUMENTURL = 0x00000100, 3289 DSF_BYTEOFFSET = 0x00000200, 3290 DSF_FLAGS = 0x00000400, 3291 3292 // Use DSF_OPERANDS_SYMBOLS to include symbol names in the bstrOperands field 3293 DSF_OPERANDS_SYMBOLS = 0x00010000, 3294 3295 DSF_ALL = 0x000107ff, 3296 } 3297 alias DWORD enum_DISASSEMBLY_STREAM_FIELDS; 3298 alias DWORD DISASSEMBLY_STREAM_FIELDS; 3299 enum /+ enum_DISASSEMBLY_FLAGS+/ : DWORD 3300 { 3301 // Indicates this instruction is in a different document than the previous one 3302 DF_DOCUMENTCHANGE = 0x00000001, 3303 // Indicates this instruction will not be exuecuted 3304 DF_DISABLED = 0x00000002, 3305 // Indicates this instruction is one of the next instructions to be executed 3306 // (there may be more than one) 3307 DF_INSTRUCTION_ACTIVE = 0x00000004, 3308 // Indicates this instruction is really data (not code) 3309 DF_DATA = 0x00000008, 3310 // Indicates this instruction has source 3311 DF_HASSOURCE = 0x00000010, 3312 // Indicates that bstrDocumentUrl contains checksum data 3313 DF_DOCUMENT_CHECKSUM = 0x00000020 3314 } 3315 alias DWORD enum_DISASSEMBLY_FLAGS; 3316 alias DWORD DISASSEMBLY_FLAGS; 3317 struct tagDisassemblyData 3318 { 3319 // Indicates which fields are valid 3320 DISASSEMBLY_STREAM_FIELDS dwFields; 3321 // The address for this instruction 3322 BSTR bstrAddress; 3323 // The address as an offset from some starting point (usually function) 3324 BSTR bstrAddressOffset; 3325 // The code bytes for this instruction 3326 BSTR bstrCodeBytes; 3327 // The opcode for this instruction 3328 BSTR bstrOpcode; 3329 // The operands for this instruction 3330 BSTR bstrOperands; 3331 // The symbol name, if any, associated with this address (public symbol, label, etc.) 3332 BSTR bstrSymbol; 3333 // Code location identifier (uCodeLocationId) for this line of disasm. 3334 // They have these properties. 3335 // 1. Unique within the disasm stream 3336 // 2. Ordered in the same way as addresses (iff DisasmLine1.CodeContext.Address > 3337 // DisasmLine2.CodeContext.Address then DisasmLine1.uCodeLocationId > 3338 // DisasmLine2.uCodeLocationId) 3339 // 3. As a consequense of #2, IDs should always increase as one go down the DisasmData array 3340 UINT64 uCodeLocationId; 3341 TEXT_POSITION posBeg; 3342 TEXT_POSITION posEnd; 3343 // For text documents that can be repesented as filenames: 3344 // bstrDocumentUrl is filled in with the file://filename where the source can be found. 3345 // For text documents that cannot be repesented as filenames: 3346 // bstrDocumentUrl is a unique identifier for the document. The debug engine 3347 // must implement 'IDebugDisassemblyStream2::GetDocument' 3348 // For non-text documents: 3349 // bstrDocumentUrl should be left as NULL. A doc context can be obtained from the code 3350 // context 3351 // For Both: 3352 // Note that if bstrDocumentUrl is the same as the bstrDocumentUrl in the previous 3353 // DisassemblyData array element, then bstrDocumentUrl should be NULL, otherwise, 3354 // bstrDocumentUrl should not be NULL (if it is requested) and DF_DOCUMENTCHANGE should be set 3355 // 3356 // If the DF_DOCUMENT_CHECKSUM flag is set, this indicates that the document checksum is stored 3357 // in bstrDocumentUrl after the NULL as a guid indicating the checksum algorithm, 3358 // followed by a DWORD indicating the number of bytes of checksum data, 3359 // followed by the array of bytes denoting the checksum value. 3360 BSTR bstrDocumentUrl; 3361 // The number of bytes this instruction is from the beginning of the line 3362 DWORD dwByteOffset; 3363 // Flags 3364 DISASSEMBLY_FLAGS dwFlags; 3365 } 3366 alias tagDisassemblyData DisassemblyData; 3367 enum /+ enum_SEEK_START+/ : DWORD 3368 { 3369 SEEK_START_BEGIN = 0x0001, 3370 SEEK_START_END = 0x0002, 3371 SEEK_START_CURRENT = 0x0003, 3372 SEEK_START_CODECONTEXT = 0x0004, 3373 SEEK_START_CODELOCID = 0x0005 3374 } 3375 alias DWORD enum_SEEK_START; 3376 alias DWORD SEEK_START;; 3377 3378 // ------------------------------------------------------------------ 3379 // IDebugDocumentContext2 3380 const GUID IID_IDebugDocumentContext2 = IDebugDocumentContext2.iid; 3381 3382 interface IDebugDocumentContext2 : IUnknown 3383 { 3384 static const GUID iid = { 0x931516ad,0xb600,0x419c,[ 0x88,0xfc,0xdc,0xf5,0x18,0x3b,0x5f,0xa9 ] }; 3385 3386 HRESULT GetDocument( 3387 /+[out]+/ IDebugDocument2 *ppDocument); 3388 3389 HRESULT GetName( 3390 in GETNAME_TYPE gnType, 3391 /+[out]+/ BSTR *pbstrFileName); 3392 3393 HRESULT EnumCodeContexts( 3394 /+[out]+/ IEnumDebugCodeContexts2 *ppEnumCodeCxts); 3395 3396 HRESULT GetLanguageInfo( 3397 /+[in, out, ptr]+/ BSTR* pbstrLanguage, 3398 /+[in, out, ptr]+/ GUID* pguidLanguage); 3399 3400 HRESULT GetStatementRange( 3401 /+[in, out, ptr]+/ TEXT_POSITION* pBegPosition, 3402 /+[in, out, ptr]+/ TEXT_POSITION* pEndPosition); 3403 3404 HRESULT GetSourceRange( 3405 /+[in, out, ptr]+/ TEXT_POSITION* pBegPosition, 3406 /+[in, out, ptr]+/ TEXT_POSITION* pEndPosition); 3407 3408 HRESULT Compare( 3409 in DOCCONTEXT_COMPARE compare, 3410 /+[ size_is (dwDocContextSetLen), length_is(dwDocContextSetLen)]+/ /+[in]+/ IDebugDocumentContext2 * rgpDocContextSet, 3411 in DWORD dwDocContextSetLen, 3412 /+[out]+/ DWORD* pdwDocContext); 3413 3414 HRESULT Seek( 3415 in int nCount, 3416 /+[out]+/ IDebugDocumentContext2 * ppDocContext); 3417 } 3418 enum /+ enum_DOCCONTEXT_COMPARE+/ : DWORD 3419 { 3420 DOCCONTEXT_EQUAL = 0x0001, 3421 DOCCONTEXT_LESS_THAN = 0x0002, 3422 DOCCONTEXT_GREATER_THAN = 0x0003, 3423 DOCCONTEXT_SAME_DOCUMENT = 0x0004, 3424 } 3425 alias DWORD enum_DOCCONTEXT_COMPARE; 3426 alias DWORD DOCCONTEXT_COMPARE;; 3427 3428 // ------------------------------------------------------------------ 3429 // IDebugDocumentChecksum2 3430 // Get this via QI from an IDebugDocumentContext2. 3431 // 3432 const GUID IID_IDebugDocumentChecksum2 = IDebugDocumentChecksum2.iid; 3433 3434 interface IDebugDocumentChecksum2 : IUnknown 3435 { 3436 static const GUID iid = { 0xc1c74db7,0xa3a7,0x40a2,[ 0xa2,0x79,0xa6,0x3b,0xa7,0x56,0xb8,0xb0 ] }; 3437 HRESULT GetChecksumAndAlgorithmId( 3438 /+[out]+/ GUID* pRetVal, 3439 in ULONG cMaxBytes, 3440 /+[out, length_is(*pcNumBytes), size_is(cMaxBytes)]+/ BYTE* pChecksum, 3441 /+[out]+/ ULONG* pcNumBytes 3442 ); 3443 }; 3444 3445 // ------------------------------------------------------------------ 3446 // IDebugENCDocumentContextUpdate 3447 // 3448 // Get this via QI from an IDebugDocumentContext2. 3449 const GUID IID_IDebugENCDocumentContextUpdate = IDebugENCDocumentContextUpdate.iid; 3450 3451 interface IDebugENCDocumentContextUpdate : IUnknown 3452 { 3453 static const GUID iid = { 0xF5637291,0xD779,0x4580,[ 0xA8,0x2C,0x0D,0x52,0x3E,0x7F,0xDC,0xF0 ] }; 3454 HRESULT UpdateDocumentContext( 3455 /+[in]+/ IDebugCodeContext2 pContext, 3456 /+[in]+/ IDebugDocumentContext2 pDocContext); 3457 3458 HRESULT UpdateStatementPosition( 3459 in TEXT_POSITION posBegStatement, 3460 in TEXT_POSITION posEndStatement); 3461 } 3462 3463 // ------------------------------------------------------------------ 3464 // IDebugExpressionContext2 3465 const GUID IID_IDebugExpressionContext2 = IDebugExpressionContext2.iid; 3466 3467 interface IDebugExpressionContext2 : IUnknown 3468 { 3469 static const GUID iid = { 0x37a44580,0xd5fc,0x473e,[ 0xa0,0x48,0x21,0x70,0x2e,0xbf,0xc4,0x66 ] }; 3470 3471 // Get the name of the expression context. The name is the description 3472 // of this expression context. It is usually something that can be parsed 3473 // by an expression evaluator that refers to this exact expression context. 3474 // For C++, the name is "{ function-name, source-file-name, module-file-name }" 3475 HRESULT GetName( 3476 /+[out]+/ BSTR* pbstrName); 3477 3478 HRESULT ParseText( 3479 in LPCOLESTR pszCode, 3480 in PARSEFLAGS dwFlags, 3481 in UINT nRadix, 3482 /+[out]+/ IDebugExpression2 * ppExpr, 3483 /+[out]+/ BSTR* pbstrError, 3484 /+[out]+/ UINT* pichError); 3485 } 3486 enum /+ enum_PARSEFLAGS+/ : DWORD 3487 { 3488 // the expression is an expression (not a statement) 3489 PARSE_EXPRESSION = 0x0001, 3490 // the expression might contain function name/parameter signatures, and 3491 // the expression is to be parsed [and later evaluated] as an address 3492 PARSE_FUNCTION_AS_ADDRESS = 0x0002, 3493 // design-time parsing for design-time expression evaluation 3494 PARSE_DESIGN_TIME_EXPR_EVAL = 0x1000 3495 } 3496 alias DWORD enum_PARSEFLAGS; 3497 alias DWORD PARSEFLAGS;; 3498 3499 // ------------------------------------------------------------------ 3500 // Breakpoint types 3501 3502 enum /+ enum_BP_TYPE+/ : DWORD 3503 { 3504 BPT_NONE = 0x0000, 3505 BPT_CODE = 0x0001, 3506 BPT_DATA = 0x0002, 3507 BPT_SPECIAL = 0x0003, 3508 } 3509 alias DWORD enum_BP_TYPE; 3510 alias DWORD BP_TYPE; 3511 3512 // ------------------------------------------------------------------ 3513 // Breakpoint request stuff 3514 3515 enum /+ enum_BP_LOCATION_TYPE+/ : DWORD 3516 { 3517 BPLT_NONE = 0x00000000, 3518 BPLT_FILE_LINE = 0x00010000, 3519 BPLT_FUNC_OFFSET = 0x00020000, 3520 BPLT_CONTEXT = 0x00030000, 3521 BPLT_STRING = 0x00040000, 3522 BPLT_ADDRESS = 0x00050000, 3523 BPLT_RESOLUTION = 0x00060000, 3524 3525 BPLT_CODE_FILE_LINE = BPT_CODE | BPLT_FILE_LINE, 3526 BPLT_CODE_FUNC_OFFSET = BPT_CODE | BPLT_FUNC_OFFSET, 3527 BPLT_CODE_CONTEXT = BPT_CODE | BPLT_CONTEXT, 3528 BPLT_CODE_STRING = BPT_CODE | BPLT_STRING, 3529 BPLT_CODE_ADDRESS = BPT_CODE | BPLT_ADDRESS, 3530 BPLT_DATA_STRING = BPT_DATA | BPLT_STRING, 3531 3532 BPLT_TYPE_MASK = 0x0000FFFF, 3533 BPLT_LOCATION_TYPE_MASK = 0xFFFF0000 3534 } 3535 alias DWORD enum_BP_LOCATION_TYPE; 3536 alias DWORD BP_LOCATION_TYPE; 3537 3538 struct _BP_LOCATION_CODE_FILE_LINE 3539 { 3540 BSTR bstrContext; 3541 IDebugDocumentPosition2 pDocPos; 3542 } 3543 alias _BP_LOCATION_CODE_FILE_LINE BP_LOCATION_CODE_FILE_LINE; 3544 3545 struct _BP_LOCATION_CODE_FUNC_OFFSET 3546 { 3547 BSTR bstrContext; 3548 IDebugFunctionPosition2 pFuncPos; 3549 } 3550 alias _BP_LOCATION_CODE_FUNC_OFFSET BP_LOCATION_CODE_FUNC_OFFSET; 3551 3552 struct _BP_LOCATION_CODE_CONTEXT 3553 { 3554 IDebugCodeContext2 pCodeContext; 3555 } 3556 alias _BP_LOCATION_CODE_CONTEXT BP_LOCATION_CODE_CONTEXT; 3557 3558 struct _BP_LOCATION_CODE_STRING 3559 { 3560 BSTR bstrContext; 3561 BSTR bstrCodeExpr; 3562 } 3563 alias _BP_LOCATION_CODE_STRING BP_LOCATION_CODE_STRING; 3564 3565 struct _BP_LOCATION_CODE_ADDRESS 3566 { 3567 BSTR bstrContext; 3568 BSTR bstrModuleUrl; 3569 BSTR bstrFunction; 3570 BSTR bstrAddress; 3571 } 3572 alias _BP_LOCATION_CODE_ADDRESS BP_LOCATION_CODE_ADDRESS; 3573 3574 struct _BP_LOCATION_DATA_STRING 3575 { 3576 IDebugThread2 pThread; 3577 BSTR bstrContext; 3578 BSTR bstrDataExpr; 3579 DWORD dwNumElements; 3580 } 3581 alias _BP_LOCATION_DATA_STRING BP_LOCATION_DATA_STRING; 3582 3583 struct _BP_LOCATION_RESOLUTION 3584 { 3585 IDebugBreakpointResolution2 pResolution; 3586 } 3587 alias _BP_LOCATION_RESOLUTION BP_LOCATION_RESOLUTION; 3588 3589 union BP_LOCATION /+switch(BP_LOCATION_TYPE bpLocationType) bpLocation +/ { 3590 /+[case BPLT_CODE_FILE_LINE:]+/ 3591 BP_LOCATION_CODE_FILE_LINE bplocCodeFileLine; 3592 3593 /+[case BPLT_CODE_FUNC_OFFSET:]+/ 3594 BP_LOCATION_CODE_FUNC_OFFSET bplocCodeFuncOffset; 3595 3596 /+[case BPLT_CODE_CONTEXT:]+/ 3597 BP_LOCATION_CODE_CONTEXT bplocCodeContext; 3598 3599 /+[case BPLT_CODE_STRING:]+/ 3600 BP_LOCATION_CODE_STRING bplocCodeString; 3601 3602 /+[case BPLT_CODE_ADDRESS:]+/ 3603 BP_LOCATION_CODE_ADDRESS bplocCodeAddress; 3604 3605 /+[case BPLT_DATA_STRING:]+/ 3606 BP_LOCATION_DATA_STRING bplocDataString; 3607 3608 /+[case BPLT_RESOLUTION:]+/ 3609 BP_LOCATION_RESOLUTION bplocResolution; 3610 3611 /+[default:]+/ 3612 DWORD unused; }; 3613 3614 enum /+ enum_BP_PASSCOUNT_STYLE+/ : DWORD 3615 { 3616 BP_PASSCOUNT_NONE = 0x0000, 3617 BP_PASSCOUNT_EQUAL = 0x0001, 3618 BP_PASSCOUNT_EQUAL_OR_GREATER = 0x0002, 3619 BP_PASSCOUNT_MOD = 0x0003, 3620 } 3621 alias DWORD enum_BP_PASSCOUNT_STYLE; 3622 alias DWORD BP_PASSCOUNT_STYLE; 3623 3624 struct _BP_PASSCOUNT 3625 { 3626 DWORD dwPassCount; 3627 BP_PASSCOUNT_STYLE stylePassCount; 3628 } 3629 alias _BP_PASSCOUNT BP_PASSCOUNT; 3630 3631 enum /+ enum_BP_COND_STYLE+/ : DWORD 3632 { 3633 BP_COND_NONE = 0x0000, 3634 BP_COND_WHEN_TRUE = 0x0001, 3635 BP_COND_WHEN_CHANGED = 0x0002, 3636 } 3637 alias DWORD enum_BP_COND_STYLE; 3638 alias DWORD BP_COND_STYLE; 3639 3640 struct _BP_CONDITION 3641 { 3642 IDebugThread2 pThread; 3643 BP_COND_STYLE styleCondition; 3644 BSTR bstrContext; 3645 BSTR bstrCondition; 3646 UINT nRadix; 3647 } 3648 alias _BP_CONDITION BP_CONDITION; 3649 3650 enum /+ enum_BP_FLAGS+/ : DWORD 3651 { 3652 BP_FLAG_NONE = 0x0000, 3653 BP_FLAG_MAP_DOCPOSITION = 0x0001, 3654 3655 // BP_FLAG_DONT_STOP is used to indicate the 3656 // breakpoint should be processed bt the debug engine, 3657 // but that the debug engine ultimately shouldn't stop 3658 // there (i.e. an IDebugBreakpointEvent2 should not be 3659 // send. This flag is designed to be used primarily with 3660 // tracepoints. 3661 BP_FLAG_DONT_STOP = 0x0002, 3662 } 3663 alias DWORD enum_BP_FLAGS; 3664 alias DWORD BP_FLAGS; 3665 3666 enum /+ enum_BPREQI_FIELDS+/ : DWORD 3667 { 3668 BPREQI_BPLOCATION = 0x0001, 3669 BPREQI_LANGUAGE = 0x0002, 3670 BPREQI_PROGRAM = 0x0004, 3671 BPREQI_PROGRAMNAME = 0x0008, 3672 BPREQI_THREAD = 0x0010, 3673 BPREQI_THREADNAME = 0x0020, 3674 BPREQI_PASSCOUNT = 0x0040, 3675 BPREQI_CONDITION = 0x0080, 3676 BPREQI_FLAGS = 0x0100, 3677 BPREQI_ALLOLDFIELDS = 0x01ff, 3678 3679 // Flags below this point belong to BP_REQUEST_INFO2 3680 BPREQI_VENDOR = 0x0200, 3681 BPREQI_CONSTRAINT = 0x0400, 3682 BPREQI_TRACEPOINT = 0x0800, 3683 3684 BPREQI_ALLFIELDS = 0x0fff, 3685 } 3686 alias DWORD enum_BPREQI_FIELDS; 3687 alias DWORD BPREQI_FIELDS; 3688 3689 struct _BP_REQUEST_INFO 3690 { 3691 BPREQI_FIELDS dwFields; 3692 GUID guidLanguage; 3693 BP_LOCATION bpLocation; 3694 IDebugProgram2 pProgram; 3695 BSTR bstrProgramName; 3696 IDebugThread2 pThread; 3697 BSTR bstrThreadName; 3698 BP_CONDITION bpCondition; 3699 BP_PASSCOUNT bpPassCount; 3700 BP_FLAGS dwFlags; 3701 } 3702 alias _BP_REQUEST_INFO BP_REQUEST_INFO; 3703 3704 struct _BP_REQUEST_INFO2 3705 { 3706 BPREQI_FIELDS dwFields; 3707 GUID guidLanguage; 3708 BP_LOCATION bpLocation; 3709 IDebugProgram2 pProgram; 3710 BSTR bstrProgramName; 3711 IDebugThread2 pThread; 3712 BSTR bstrThreadName; 3713 BP_CONDITION bpCondition; 3714 BP_PASSCOUNT bpPassCount; 3715 BP_FLAGS dwFlags; 3716 3717 // guidVector may be NULL while guidLanguage is non-NULL 3718 // This means use all matching languages, regardless of vendor 3719 // for beining this breakpoint. 3720 GUID guidVendor; 3721 // The constraint associated with this breakpoint (may be NULL) 3722 BSTR bstrConstraint; 3723 // The tracepoint associated with this breakpoint (may be NULL) 3724 BSTR bstrTracepoint; 3725 } 3726 alias _BP_REQUEST_INFO2 BP_REQUEST_INFO2; 3727 3728 // ------------------------------------------------------------------ 3729 // IDebugBreakpointRequest2 3730 3731 const GUID IID_IDebugBreakpointRequest2 = IDebugBreakpointRequest2.iid; 3732 3733 interface IDebugBreakpointRequest2 : IUnknown 3734 { 3735 static const GUID iid = { 0x6015fd18,0x8257,0x4df3,[ 0xac,0x42,0xf0,0x74,0xde,0xdd,0x4c,0xbd ] }; 3736 HRESULT GetLocationType( 3737 /+[out]+/ BP_LOCATION_TYPE* pBPLocationType); 3738 3739 HRESULT GetRequestInfo( 3740 in BPREQI_FIELDS dwFields, 3741 /+[out]+/ BP_REQUEST_INFO* pBPRequestInfo); 3742 }; 3743 3744 struct tagCHECKSUM_DATA 3745 { 3746 DWORD ByteCount; 3747 /+[size_is(ByteCount)]+/ BYTE* pBytes; 3748 } 3749 alias tagCHECKSUM_DATA CHECKSUM_DATA; 3750 3751 // ------------------------------------------------------------------ 3752 // IDebugBreakpointChecksumRequest2 3753 // 3754 // Get this via QI from an IDebugBreakpointRequest2. 3755 const GUID IID_IDebugBreakpointChecksumRequest2 = IDebugBreakpointChecksumRequest2.iid; 3756 3757 interface IDebugBreakpointChecksumRequest2 : IUnknown 3758 { 3759 static const GUID iid = { 0x0EA91CF7,0x8542,0x4780,[ 0x8D,0x6B,0x7B,0xD6,0x86,0xCD,0x24,0x71 ] }; 3760 // get the checksum based on the specified algorithm 3761 // pChecksumData->pBytes is allocated by the callee, and should be freed by the caller with CoTaskMemFree 3762 HRESULT GetChecksum(in GUID* guidAlgorithm, 3763 /+[out]+/ CHECKSUM_DATA* pChecksumData); 3764 3765 HRESULT IsChecksumEnabled(/+[out]+/ BOOL* pfChecksumEnabled); 3766 }; 3767 3768 // ------------------------------------------------------------------ 3769 // IDebugBreakpointRequest3 3770 3771 const GUID IID_IDebugBreakpointRequest3 = IDebugBreakpointRequest3.iid; 3772 3773 interface IDebugBreakpointRequest3 : IDebugBreakpointRequest2 3774 { 3775 static const GUID iid = { 0x5C18A5FE,0x7150,0x4e66,[ 0x82,0x46,0x27,0xBF,0xB0,0xE7,0xBF,0xD9 ] }; 3776 HRESULT GetRequestInfo2( 3777 in BPREQI_FIELDS dwFields, 3778 /+[out]+/ BP_REQUEST_INFO2 * bBPRequestInfo); 3779 }; 3780 3781 // ------------------------------------------------------------------ 3782 // Breakpoint resolution stuff 3783 3784 struct _BP_RESOLUTION_CODE 3785 { 3786 IDebugCodeContext2 pCodeContext; 3787 } 3788 alias _BP_RESOLUTION_CODE BP_RESOLUTION_CODE; 3789 3790 enum /+ enum_BP_RES_DATA_FLAGS+/ : DWORD 3791 { 3792 // The data breakpoint is being emulated 3793 // (rather than done via hardware) 3794 BP_RES_DATA_EMULATED = 0x0001, 3795 } 3796 alias DWORD enum_BP_RES_DATA_FLAGS; 3797 alias DWORD BP_RES_DATA_FLAGS; 3798 3799 struct _BP_RESOLUTION_DATA 3800 { 3801 BSTR bstrDataExpr; 3802 BSTR bstrFunc; 3803 BSTR bstrImage; 3804 BP_RES_DATA_FLAGS dwFlags; 3805 } 3806 alias _BP_RESOLUTION_DATA BP_RESOLUTION_DATA; 3807 3808 union BP_RESOLUTION_LOCATION /+switch(BP_TYPE bpType) bpResLocation +/ { 3809 /+[case BPT_CODE:]+/ 3810 BP_RESOLUTION_CODE bpresCode; 3811 3812 /+[case BPT_DATA:]+/ 3813 BP_RESOLUTION_DATA bpresData; 3814 3815 /+[default:]+/ 3816 int unused; }; 3817 3818 enum /+ enum_BPRESI_FIELDS+/ : DWORD 3819 { 3820 BPRESI_BPRESLOCATION = 0x0001, 3821 BPRESI_PROGRAM = 0x0002, 3822 BPRESI_THREAD = 0x0004, 3823 3824 BPRESI_ALLFIELDS = 0xffffffff, 3825 } 3826 alias DWORD enum_BPRESI_FIELDS; 3827 alias DWORD BPRESI_FIELDS; 3828 3829 struct _BP_RESOLUTION_INFO 3830 { 3831 BPRESI_FIELDS dwFields; 3832 BP_RESOLUTION_LOCATION bpResLocation; 3833 IDebugProgram2 pProgram; 3834 IDebugThread2 pThread; 3835 } 3836 alias _BP_RESOLUTION_INFO BP_RESOLUTION_INFO; 3837 3838 // ------------------------------------------------------------------ 3839 // IDebugBreakpointResolution2 3840 3841 const GUID IID_IDebugBreakpointResolution2 = IDebugBreakpointResolution2.iid; 3842 3843 interface IDebugBreakpointResolution2 : IUnknown 3844 { 3845 static const GUID iid = { 0xb7e66f28,0x035a,0x401a,[ 0xaf,0xc7,0x2e,0x30,0x0b,0xd2,0x97,0x11 ] }; 3846 HRESULT GetBreakpointType( 3847 /+[out]+/ BP_TYPE* pBPType); 3848 3849 HRESULT GetResolutionInfo( 3850 in BPRESI_FIELDS dwFields, 3851 /+[out]+/ BP_RESOLUTION_INFO* pBPResolutionInfo); 3852 }; 3853 3854 // ------------------------------------------------------------------ 3855 // Error breakpoint stuff 3856 3857 enum /+ enum_BP_ERROR_TYPE+/ : DWORD 3858 { 3859 BPET_NONE = 0x00000000, 3860 3861 BPET_TYPE_WARNING = 0x00000001, 3862 BPET_TYPE_ERROR = 0x00000002, 3863 3864 BPET_SEV_HIGH = 0x0F000000, 3865 BPET_SEV_GENERAL = 0x07000000, 3866 BPET_SEV_LOW = 0x01000000, 3867 3868 BPET_TYPE_MASK = 0x0000ffff, 3869 BPET_SEV_MASK = 0xffff0000, 3870 3871 // Use these contants for describing general warnings and errors 3872 BPET_GENERAL_WARNING = BPET_SEV_GENERAL | BPET_TYPE_WARNING, 3873 BPET_GENERAL_ERROR = BPET_SEV_GENERAL | BPET_TYPE_ERROR, 3874 3875 BPET_ALL = 0xffffffff, 3876 } 3877 alias DWORD enum_BP_ERROR_TYPE; 3878 alias DWORD BP_ERROR_TYPE; 3879 3880 enum /+ enum_BPERESI_FIELDS+/ : DWORD 3881 { 3882 BPERESI_BPRESLOCATION = 0x0001, 3883 BPERESI_PROGRAM = 0x0002, 3884 BPERESI_THREAD = 0x0004, 3885 BPERESI_MESSAGE = 0x0008, 3886 BPERESI_TYPE = 0x0010, 3887 3888 BPERESI_ALLFIELDS = 0xffffffff, 3889 } 3890 alias DWORD enum_BPERESI_FIELDS; 3891 alias DWORD BPERESI_FIELDS; 3892 3893 struct _BP_ERROR_RESOLUTION_INFO 3894 { 3895 BPERESI_FIELDS dwFields; 3896 BP_RESOLUTION_LOCATION bpResLocation; 3897 IDebugProgram2 pProgram; 3898 IDebugThread2 pThread; 3899 BSTR bstrMessage; 3900 BP_ERROR_TYPE dwType; 3901 } 3902 alias _BP_ERROR_RESOLUTION_INFO BP_ERROR_RESOLUTION_INFO; 3903 3904 // ------------------------------------------------------------------ 3905 // IDebugErrorBreakpointResolution2 3906 3907 const GUID IID_IDebugErrorBreakpointResolution2 = IDebugErrorBreakpointResolution2.iid; 3908 3909 interface IDebugErrorBreakpointResolution2 : IUnknown 3910 { 3911 static const GUID iid = { 0x603aedf8,0x9575,0x4d30,[ 0xb8,0xca,0x12,0x4d,0x1c,0x98,0xeb,0xd8 ] }; 3912 HRESULT GetBreakpointType( 3913 /+[out]+/ BP_TYPE* pBPType); 3914 3915 HRESULT GetResolutionInfo( 3916 in BPERESI_FIELDS dwFields, 3917 /+[out]+/ BP_ERROR_RESOLUTION_INFO* pErrorResolutionInfo); 3918 }; 3919 3920 // ------------------------------------------------------------------ 3921 // IDebugBoundBreakpoint2 3922 3923 const GUID IID_IDebugBoundBreakpoint2 = IDebugBoundBreakpoint2.iid; 3924 3925 interface IDebugBoundBreakpoint2 : IUnknown 3926 { 3927 static const GUID iid = { 0xd533d975,0x3f32,0x4876,[ 0xab,0xd0,0x6d,0x37,0xfd,0xa5,0x63,0xe7 ] }; 3928 3929 HRESULT GetPendingBreakpoint( 3930 /+[out]+/ IDebugPendingBreakpoint2 * ppPendingBreakpoint); 3931 3932 HRESULT GetState( 3933 /+[out]+/ BP_STATE* pState); 3934 3935 HRESULT GetHitCount( 3936 /+[out]+/ DWORD* pdwHitCount); 3937 3938 HRESULT GetBreakpointResolution( 3939 /+[out]+/ IDebugBreakpointResolution2 * ppBPResolution); 3940 3941 HRESULT Enable( 3942 in BOOL fEnable); 3943 3944 HRESULT SetHitCount( 3945 in DWORD dwHitCount); 3946 3947 HRESULT SetCondition( 3948 in BP_CONDITION bpCondition); 3949 3950 HRESULT SetPassCount( 3951 in BP_PASSCOUNT bpPassCount); 3952 3953 HRESULT Delete(); 3954 } 3955 enum /+ enum_BP_STATE+/ : DWORD 3956 { 3957 BPS_NONE = 0x0000, 3958 BPS_DELETED = 0x0001, 3959 BPS_DISABLED = 0x0002, 3960 BPS_ENABLED = 0x0003, 3961 } 3962 alias DWORD enum_BP_STATE; 3963 alias DWORD BP_STATE;; 3964 3965 // ------------------------------------------------------------------ 3966 // IDebugBoundBreakpoint3 3967 3968 const GUID IID_IDebugBoundBreakpoint3 = IDebugBoundBreakpoint3.iid; 3969 3970 interface IDebugBoundBreakpoint3 : IUnknown 3971 { 3972 static const GUID iid = { 0x60f49115,0xce92,0x4f96,[ 0x8d,0x0a,0x81,0xcc,0xca,0xe4,0xab,0x77 ] }; 3973 HRESULT SetTracepoint( 3974 in LPCOLESTR bpBstrTracepoint, 3975 in BP_FLAGS bpFlags // only BP_FLAG_DONT_STOP is supported 3976 ); 3977 }; 3978 3979 // ------------------------------------------------------------------ 3980 // IDebugPendingBreakpoint2 3981 3982 const GUID IID_IDebugPendingBreakpoint2 = IDebugPendingBreakpoint2.iid; 3983 3984 interface IDebugPendingBreakpoint2 : IUnknown 3985 { 3986 static const GUID iid = { 0x6e215ef3,0xe44c,0x44d1,[ 0xb7,0xba,0xb2,0x40,0x1f,0x7d,0xc2,0x3d ] }; 3987 3988 HRESULT CanBind( 3989 /+[out]+/ IEnumDebugErrorBreakpoints2 * ppErrorEnum); 3990 3991 HRESULT Bind(); 3992 3993 HRESULT GetState( 3994 /+[out]+/ PENDING_BP_STATE_INFO* pState); 3995 3996 HRESULT GetBreakpointRequest( 3997 /+[out]+/ IDebugBreakpointRequest2 * ppBPRequest); 3998 3999 HRESULT Virtualize( 4000 in BOOL fVirtualize); 4001 4002 HRESULT Enable( 4003 in BOOL fEnable); 4004 4005 HRESULT SetCondition( 4006 in BP_CONDITION bpCondition); 4007 4008 HRESULT SetPassCount( 4009 in BP_PASSCOUNT bpPassCount); 4010 4011 HRESULT EnumBoundBreakpoints( 4012 /+[out]+/ IEnumDebugBoundBreakpoints2 * ppEnum); 4013 4014 HRESULT EnumErrorBreakpoints( 4015 in BP_ERROR_TYPE bpErrorType, 4016 /+[out]+/ IEnumDebugErrorBreakpoints2 * ppEnum); 4017 4018 HRESULT Delete(); 4019 } 4020 enum /+ enum_PENDING_BP_STATE+/ : DWORD 4021 { 4022 PBPS_NONE = 0x0000, 4023 PBPS_DELETED = 0x0001, 4024 PBPS_DISABLED = 0x0002, 4025 PBPS_ENABLED = 0x0003, 4026 } 4027 alias DWORD enum_PENDING_BP_STATE; 4028 alias DWORD PENDING_BP_STATE; 4029 enum /+ enum_PENDING_BP_STATE_FLAGS+/ : DWORD 4030 { 4031 PBPSF_NONE = 0x0000, 4032 PBPSF_VIRTUALIZED = 0x0001, 4033 } 4034 alias DWORD enum_PENDING_BP_STATE_FLAGS; 4035 alias DWORD PENDING_BP_STATE_FLAGS; 4036 struct _tagPENDING_BP_STATE_INFO 4037 { 4038 PENDING_BP_STATE state; 4039 PENDING_BP_STATE_FLAGS flags; 4040 } 4041 alias _tagPENDING_BP_STATE_INFO PENDING_BP_STATE_INFO;; 4042 4043 // ------------------------------------------------------------------ 4044 // IDebugPendingBreakpoint3 4045 4046 const GUID IID_IDebugPendingBreakpoint3 = IDebugPendingBreakpoint3.iid; 4047 4048 interface IDebugPendingBreakpoint3 : IDebugPendingBreakpoint2 4049 { 4050 static const GUID iid = { 0x96643d32,0x2624,0x479a,[ 0x9f,0x1a,0x25,0xd0,0x20,0x30,0xdd,0x3b ] }; 4051 HRESULT GetErrorResolutionInfo( 4052 in BPERESI_FIELDS dwFields, 4053 /+[out]+/ BP_ERROR_RESOLUTION_INFO* pErrorResolutionInfo); 4054 }; 4055 4056 // ------------------------------------------------------------------ 4057 // IDebugErrorBreakpoint2 4058 4059 const GUID IID_IDebugErrorBreakpoint2 = IDebugErrorBreakpoint2.iid; 4060 4061 interface IDebugErrorBreakpoint2 : IUnknown 4062 { 4063 static const GUID iid = { 0x74570ef7,0x2486,0x4089,[ 0x80,0x0c,0x56,0xe3,0x82,0x9b,0x5c,0xa4 ] }; 4064 HRESULT GetPendingBreakpoint( 4065 /+[out]+/ IDebugPendingBreakpoint2 * ppPendingBreakpoint); 4066 4067 HRESULT GetBreakpointResolution( 4068 /+[out]+/ IDebugErrorBreakpointResolution2 * ppErrorResolution); 4069 }; 4070 4071 // ------------------------------------------------------------------ 4072 // IDebugExpression2 4073 const GUID IID_IDebugExpression2 = IDebugExpression2.iid; 4074 4075 interface IDebugExpression2 : IUnknown 4076 { 4077 static const GUID iid = { 0xf7473fd0,0x7f75,0x478d,[ 0x8d,0x85,0xa4,0x85,0x20,0x4e,0x7a,0x2d ] }; 4078 4079 HRESULT EvaluateAsync( 4080 in EVALFLAGS dwFlags, 4081 // pExprCallback must be NULL in V8 and above 4082 /+[in]+/ IDebugEventCallback2 pExprCallback); 4083 4084 HRESULT Abort(); 4085 4086 HRESULT EvaluateSync( 4087 in EVALFLAGS dwFlags, 4088 in DWORD dwTimeout, 4089 // pExprCallback must be NULL in V8 and above 4090 /+[in]+/ IDebugEventCallback2 pExprCallback, 4091 /+[out]+/ IDebugProperty2 * ppResult); 4092 } 4093 enum /+ enum_EVALFLAGS+/ : DWORD 4094 { 4095 // the return value is interesting 4096 EVAL_RETURNVALUE = 0x0002, 4097 // don't allow side effects 4098 EVAL_NOSIDEEFFECTS = 0x0004, 4099 // stop on breakpoints 4100 EVAL_ALLOWBPS = 0x0008, 4101 // allow error reporting to the host 4102 EVAL_ALLOWERRORREPORT = 0x0010, 4103 // evaluate any functions as address (instead of invoking the function) 4104 EVAL_FUNCTION_AS_ADDRESS = 0x0040, 4105 // don't allow function/property evaluation 4106 EVAL_NOFUNCEVAL = 0x0080, 4107 // don't allow events 4108 EVAL_NOEVENTS = 0x1000, 4109 // design-time expression evaluation 4110 EVAL_DESIGN_TIME_EXPR_EVAL = 0x2000, 4111 // Allow implicit variable creation 4112 EVAL_ALLOW_IMPLICIT_VARS = 0x4000 4113 } 4114 alias DWORD enum_EVALFLAGS; 4115 alias DWORD EVALFLAGS;; 4116 4117 // ------------------------------------------------------------------ 4118 // IDebugModule2 4119 const GUID IID_IDebugModule2 = IDebugModule2.iid; 4120 4121 interface IDebugModule2 : IUnknown 4122 { 4123 static const GUID iid = { 0x0fc1cd9a,0xb912,0x405c,[ 0xa0,0x4c,0x43,0xce,0x02,0xcd,0x7d,0xf2 ] }; 4124 4125 HRESULT GetInfo( 4126 in MODULE_INFO_FIELDS dwFields, 4127 /+[out]+/ MODULE_INFO* pInfo); 4128 4129 HRESULT ReloadSymbols_Deprecated( 4130 /+[ ptr]+/ in LPCOLESTR pszUrlToSymbols, 4131 /+[out]+/ BSTR* pbstrDebugMessage); 4132 } 4133 enum /+ enum_MODULE_FLAGS+/ : DWORD 4134 { 4135 MODULE_FLAG_NONE = 0x0000, 4136 MODULE_FLAG_SYSTEM = 0x0001, 4137 MODULE_FLAG_SYMBOLS = 0x0002, 4138 MODULE_FLAG_64BIT = 0x0004, 4139 4140 // 4141 // If the engine knows a module about optimizations it needs to set 4142 // either of these flags, if it does not the module window will assume 4143 // it does not 4144 // 4145 4146 MODULE_FLAG_OPTIMIZED = 0x0008, 4147 MODULE_FLAG_UNOPTIMIZED = 0x0010 4148 } 4149 alias DWORD enum_MODULE_FLAGS; 4150 alias DWORD MODULE_FLAGS; 4151 enum /+ enum_MODULE_INFO_FIELDS+/ : DWORD 4152 { 4153 MIF_NONE = 0x0000, 4154 MIF_NAME = 0x0001, 4155 MIF_URL = 0x0002, 4156 MIF_VERSION = 0x0004, 4157 MIF_DEBUGMESSAGE = 0x0008, 4158 MIF_LOADADDRESS = 0x0010, 4159 MIF_PREFFEREDADDRESS = 0x0020, 4160 MIF_SIZE = 0x0040, 4161 MIF_LOADORDER = 0x0080, 4162 MIF_TIMESTAMP = 0x0100, 4163 MIF_URLSYMBOLLOCATION = 0x0200, 4164 MIF_FLAGS = 0x0400, 4165 4166 MIF_ALLFIELDS = 0x07ff, 4167 } 4168 alias DWORD enum_MODULE_INFO_FIELDS; 4169 alias DWORD MODULE_INFO_FIELDS; 4170 struct _tagMODULE_INFO 4171 { 4172 MODULE_INFO_FIELDS dwValidFields; 4173 BSTR m_bstrName; 4174 BSTR m_bstrUrl; 4175 BSTR m_bstrVersion; 4176 BSTR m_bstrDebugMessage; 4177 UINT64 m_addrLoadAddress; 4178 UINT64 m_addrPreferredLoadAddress; 4179 DWORD m_dwSize; 4180 DWORD m_dwLoadOrder; 4181 FILETIME m_TimeStamp; 4182 BSTR m_bstrUrlSymbolLocation; 4183 MODULE_FLAGS m_dwModuleFlags; 4184 } 4185 alias _tagMODULE_INFO MODULE_INFO;; 4186 4187 // ------------------------------------------------------------------ 4188 // IDebugModule3 4189 const GUID IID_IDebugModule3 = IDebugModule3.iid; 4190 4191 interface IDebugModule3 : IDebugModule2 4192 { 4193 static const GUID iid = { 0x245F9D6A,0xE550,0x404d,[ 0x82,0xF1,0xFD,0xB6,0x82,0x81,0x60,0x7A ] }; 4194 4195 HRESULT GetSymbolInfo( 4196 in SYMBOL_SEARCH_INFO_FIELDS dwFields, 4197 /+[out]+/ MODULE_SYMBOL_SEARCH_INFO* pInfo); 4198 4199 // LoadSymbols will use the current symbol path to search for 4200 // symbols. The updated IDebugModule3 is sent in an IDebugSymbolSearchEvent2 4201 HRESULT LoadSymbols(); 4202 4203 // Returns whether module is user or not 4204 HRESULT IsUserCode( 4205 /+[out]+/ BOOL *pfUser); 4206 4207 // Sets user status of module 4208 HRESULT SetJustMyCodeState( 4209 in BOOL fIsUserCode); 4210 } 4211 enum /+ enum_SYMBOL_SEARCH_INFO_FIELDS+/ : DWORD 4212 { 4213 SSIF_NONE = 0x0000, 4214 SSIF_VERBOSE_SEARCH_INFO= 0x0001 4215 } 4216 alias DWORD enum_SYMBOL_SEARCH_INFO_FIELDS; 4217 alias DWORD SYMBOL_SEARCH_INFO_FIELDS; 4218 struct _tagSYMBOL_SEARCH_INFO 4219 { 4220 // Details of where symbols were searched for and the result 4221 SYMBOL_SEARCH_INFO_FIELDS dwValidFields; 4222 BSTR bstrVerboseSearchInfo; 4223 } 4224 alias _tagSYMBOL_SEARCH_INFO MODULE_SYMBOL_SEARCH_INFO; 4225 4226 // 4227 // IDebugSourceServerModule 4228 // 4229 // QI from IDebugModule2 4230 // 4231 const GUID IID_IDebugSourceServerModule = IDebugSourceServerModule.iid; 4232 4233 interface IDebugSourceServerModule : IUnknown 4234 { 4235 static const GUID iid = { 0x492e5541,0x215b,0x4f67,[ 0xad,0x73,0x20,0xf4,0x86,0x14,0x91,0x2e ] }; 4236 // returns the source server data for the module 4237 // caller should free using CoTaskMemFree() 4238 HRESULT GetSourceServerData( 4239 /+[out]+/ ULONG* pDataByteCount, 4240 /+[out, size_is (, *pDataByteCount)]+/ BYTE** ppData); 4241 } 4242 4243 // ------------------------------------------------------------------ 4244 // IDebugModuleManaged 4245 const GUID IID_IDebugModuleManaged = IDebugModuleManaged.iid; 4246 4247 interface IDebugModuleManaged : IUnknown 4248 { 4249 static const GUID iid = { 0x232397F8,0xB232,0x479d,[ 0xB1,0xBB,0x2F,0x04,0x4C,0x70,0xA0,0xF9 ] }; 4250 HRESULT GetMvid( 4251 /+[out]+/ GUID* mvid); 4252 }; 4253 4254 // ------------------------------------------------------------------ 4255 // IDebugDocument2 4256 const GUID IID_IDebugDocument2 = IDebugDocument2.iid; 4257 4258 interface IDebugDocument2 : IUnknown 4259 { 4260 static const GUID iid = { 0x1606dd73,0x5d5f,0x405c,[ 0xb4,0xf4,0xce,0x32,0xba,0xba,0x25,0x01 ] }; 4261 HRESULT GetName( 4262 in GETNAME_TYPE gnType, 4263 /+[out]+/ BSTR* pbstrFileName); 4264 4265 HRESULT GetDocumentClassId( 4266 /+[out]+/ CLSID* pclsid); 4267 }; 4268 4269 // ------------------------------------------------------------------ 4270 // IDebugDocumentText2 4271 // #pragma warning(push) 4272 // #pragma warning(disable:28718) 4273 const GUID IID_IDebugDocumentText2 = IDebugDocumentText2.iid; 4274 4275 interface IDebugDocumentText2 : IDebugDocument2 4276 { 4277 static const GUID iid = { 0x4b0645aa,0x08ef,0x4cb9,[ 0xad,0xb9,0x03,0x95,0xd6,0xed,0xad,0x35 ] }; 4278 HRESULT GetSize( 4279 /+[in, out, ptr]+/ ULONG* pcNumLines, 4280 /+[in, out, ptr]+/ ULONG* pcNumChars); 4281 4282 HRESULT GetText( 4283 in TEXT_POSITION pos, 4284 in ULONG cMaxChars, 4285 /+[out, length_is(*pcNumChars), size_is(cMaxChars)]+/ WCHAR* pText, 4286 /+[out]+/ ULONG* pcNumChars); 4287 }; 4288 // #pragma warning(pop) 4289 4290 // ------------------------------------------------------------------ 4291 // IDebugDocumentPosition2 4292 const GUID IID_IDebugDocumentPosition2 = IDebugDocumentPosition2.iid; 4293 4294 interface IDebugDocumentPosition2 : IUnknown 4295 { 4296 static const GUID iid = { 0xbdde0eee,0x3b8d,0x4c82,[ 0xb5,0x29,0x33,0xf1,0x6b,0x42,0x83,0x2e ] }; 4297 HRESULT GetFileName( 4298 /+[out]+/ BSTR* pbstrFileName); 4299 4300 HRESULT GetDocument( 4301 /+[out]+/ IDebugDocument2 * ppDoc); 4302 4303 HRESULT IsPositionInDocument( 4304 /+[in]+/ IDebugDocument2 pDoc); 4305 4306 HRESULT GetRange( 4307 /+[in, out, ptr]+/ TEXT_POSITION* pBegPosition, 4308 /+[in, out, ptr]+/ TEXT_POSITION* pEndPosition); 4309 }; 4310 4311 // ------------------------------------------------------------------ 4312 // IDebugDocumentPositionOffset2 4313 const GUID IID_IDebugDocumentPositionOffset2 = IDebugDocumentPositionOffset2.iid; 4314 4315 interface IDebugDocumentPositionOffset2 : IUnknown 4316 { 4317 static const GUID iid = { 0x037edd0f,0x8551,0x4f7f,[ 0x8c,0xa0,0x04,0xd9,0xe2,0x9f,0x53,0x2d ] }; 4318 HRESULT GetRange( 4319 /+[in, out, ptr]+/ DWORD* pdwBegOffset, 4320 /+[in, out, ptr]+/ DWORD* pdwEndOffset); 4321 }; 4322 4323 // ------------------------------------------------------------------ 4324 // IDebugFunctionPosition2 4325 4326 const GUID IID_IDebugFunctionPosition2 = IDebugFunctionPosition2.iid; 4327 4328 interface IDebugFunctionPosition2 : IUnknown 4329 { 4330 static const GUID iid = { 0x1ede3b4b,0x35e7,0x4b97,[ 0x81,0x33,0x02,0x84,0x5d,0x60,0x01,0x74 ] }; 4331 HRESULT GetFunctionName( 4332 /+[out]+/ BSTR* pbstrFunctionName); 4333 4334 HRESULT GetOffset( 4335 /+[in, out, ptr]+/ TEXT_POSITION* pPosition); 4336 }; 4337 4338 // ------------------------------------------------------------------ 4339 // IDebugDocumentTextEvents2 4340 const GUID IID_IDebugDocumentTextEvents2 = IDebugDocumentTextEvents2.iid; 4341 4342 interface IDebugDocumentTextEvents2 : IUnknown 4343 { 4344 static const GUID iid = { 0x33ec72e3,0x002f,0x4966,[ 0xb9,0x1c,0x5c,0xe2,0xf7,0xba,0x51,0x24 ] }; 4345 4346 HRESULT onDestroy(); 4347 4348 HRESULT onInsertText( 4349 in TEXT_POSITION pos, 4350 in DWORD dwNumToInsert); 4351 4352 HRESULT onRemoveText( 4353 in TEXT_POSITION pos, 4354 in DWORD dwNumToRemove); 4355 4356 HRESULT onReplaceText( 4357 in TEXT_POSITION pos, 4358 in DWORD dwNumToReplace); 4359 4360 HRESULT onUpdateTextAttributes( 4361 in TEXT_POSITION pos, 4362 in DWORD dwNumToUpdate); 4363 4364 HRESULT onUpdateDocumentAttributes( 4365 in TEXT_DOC_ATTR_2 textdocattr); 4366 } 4367 alias DWORD TEXT_DOC_ATTR_2; 4368 const TEXT_DOC_ATTR_2 TEXT_DOC_ATTR_READONLY_2 = 0x00000001;; 4369 4370 // ------------------------------------------------------------------ 4371 // IDebugQueryEngine2 4372 4373 const GUID IID_IDebugQueryEngine2 = IDebugQueryEngine2.iid; 4374 4375 interface IDebugQueryEngine2 : IUnknown 4376 { 4377 static const GUID iid = { 0xc989adc9,0xf305,0x4ef5,[ 0x8c,0xa2,0x20,0x89,0x8e,0x8d,0x0e,0x28 ] }; 4378 HRESULT GetEngineInterface( 4379 /+[out]+/ IUnknown * ppUnk); 4380 }; 4381 4382 //------------------------------------------------------------------- 4383 // IEEHostServices 4384 const GUID IID_IEEHostServices = IEEHostServices.iid; 4385 4386 interface IEEHostServices : IUnknown 4387 { 4388 static const GUID iid = { 0xBB7BE481,0xDA8F,0x4b9e,[ 0x89,0xCB,0x0A,0x8D,0xDE,0x6B,0xC5,0xD7 ] }; 4389 HRESULT GetHostValue( 4390 in LPCOLESTR valueCatagory, 4391 in LPCOLESTR valueKind, 4392 /+[out]+/ VARIANT * result); 4393 HRESULT SetHostValue( 4394 in LPCOLESTR valueCatagory, 4395 in LPCOLESTR valueKind, 4396 in VARIANT newValue); 4397 }; 4398 4399 //------------------------------------------------------------------- 4400 // IDebugCustomViewer 4401 const GUID IID_IDebugCustomViewer = IDebugCustomViewer.iid; 4402 4403 interface IDebugCustomViewer : IUnknown 4404 { 4405 static const GUID iid = { 0x6306E526,0x9E02,0x4696,[ 0xBF,0xF9,0x48,0x33,0x8A,0x27,0xF8,0xAF ] }; 4406 HRESULT DisplayValue( 4407 in HWND hwnd, // Parent window. 4408 in DWORD dwID, // ID for custom viewers that support more than one type. 4409 /+[in]+/ IUnknown pHostServices, 4410 /+[in]+/ IDebugProperty3 pDebugProperty); 4411 }; 4412 4413 const GUID IID_IEEDataStorage = IEEDataStorage.iid; 4414 4415 interface IEEDataStorage : IUnknown 4416 { 4417 static const GUID iid = { 0xDCF1F227,0xEC51,0x4680,[ 0x87,0x22,0xC8,0x79,0x6A,0x5F,0x34,0x83 ] }; 4418 HRESULT GetSize(/+[out]+/ ULONG * size); 4419 HRESULT GetData(in ULONG dataSize, 4420 /+[out]+/ ULONG * sizeGotten, 4421 /+[out, size_is(dataSize), length_is(*sizeGotten)]+/ BYTE * data); 4422 }; 4423 4424 const GUID IID_IPropertyProxyEESide = IPropertyProxyEESide.iid; 4425 4426 interface IPropertyProxyEESide : IUnknown 4427 { 4428 static const GUID iid = { 0x579919D2,0x1B10,0x4584,[ 0x96,0x9C,0x3E,0x06,0x5B,0xD3,0xE2,0x2D ] }; 4429 4430 HRESULT InitSourceDataProvider(/+[out]+/ IEEDataStorage * dataOut); 4431 HRESULT GetManagedViewerCreationData (/+[out]+/ BSTR * assemName, 4432 /+[out]+/ IEEDataStorage * assemBytes, 4433 /+[out]+/ IEEDataStorage * assemPdb, 4434 /+[out]+/ BSTR * className, 4435 /+[out]+/ ASSEMBLYLOCRESOLUTION * alr, 4436 /+[out]+/ BOOL * replacementOk); 4437 HRESULT GetInitialData(/+[out]+/ IEEDataStorage * dataOut); 4438 HRESULT CreateReplacementObject(/+[in]+/ IEEDataStorage dataIn, 4439 /+[out]+/ IEEDataStorage * dataOut); 4440 HRESULT InPlaceUpdateObject(/+[in]+/ IEEDataStorage dataIn, 4441 /+[out]+/ IEEDataStorage * dataOut); 4442 HRESULT ResolveAssemblyReference(in LPCOLESTR assemName, in GETASSEMBLY flags, 4443 /+[out]+/ IEEDataStorage * assemBytes, 4444 /+[out]+/ IEEDataStorage * assemPdb, 4445 /+[out]+/ BSTR * assemLocation, 4446 /+[out]+/ ASSEMBLYLOCRESOLUTION * alr); 4447 } 4448 enum /+ enum_ASSEMBLYLOCRESOLUTION+/ : DWORD 4449 { 4450 ALR_NAME = 0x0, 4451 ALR_USERDIR = 0x1, 4452 ALR_SHAREDDIR = 0x2, 4453 ALR_REMOTEDIR = 0x4, 4454 ALR_ERROR = 0x8, 4455 ALR_BYTES = 0x10, 4456 } 4457 alias DWORD enum_ASSEMBLYLOCRESOLUTION; 4458 alias DWORD ASSEMBLYLOCRESOLUTION; 4459 enum /+ enum_GETASSEMBLY+/ : DWORD 4460 { 4461 GA_BYTES = 0x1 , 4462 GA_PDBBYTES = 0x2, 4463 GA_NAME = 0x4, 4464 GA_FLAGS = 0x8, 4465 } 4466 alias DWORD enum_GETASSEMBLY; 4467 alias DWORD GETASSEMBLY;; 4468 4469 const GUID IID_IPropertyProxyProvider = IPropertyProxyProvider.iid; 4470 4471 interface IPropertyProxyProvider : IUnknown 4472 { 4473 static const GUID iid = { 0x30E6C90E,0x757E,0x48cf,[ 0x8D,0xB8,0x20,0xB0,0x61,0xAF,0xBB,0xAE ] }; 4474 HRESULT GetPropertyProxy(in DWORD dwID, 4475 /+[out]+/ IPropertyProxyEESide * proxy); 4476 }; 4477 4478 const GUID IID_IManagedViewerHost = IManagedViewerHost.iid; 4479 4480 interface IManagedViewerHost : IUnknown 4481 { 4482 static const GUID iid = { 0x5968D43D,0xD21E,0x437c,[ 0x9C,0x71,0x77,0xC5,0x2C,0x3E,0x28,0x7A ] }; 4483 HRESULT CreateViewer(in ULONG hwnd, /+[in]+/ IUnknown hostServices, /+[in]+/ IPropertyProxyEESide property); 4484 }; 4485 4486 const GUID IID_IEELocalObject = IEELocalObject.iid; 4487 4488 interface IEELocalObject : IUnknown 4489 { 4490 static const GUID iid = { 0x44F8F85F,0x5514,0x49a3,[ 0x81,0x73,0x6F,0x9C,0x9F,0x1C,0x48,0x32 ] }; 4491 HRESULT SetCallback(IDebugSettingsCallback2 pCallback); 4492 }; 4493 4494 const GUID IID_IEEAssemblyRefResolveComparer = IEEAssemblyRefResolveComparer.iid; 4495 4496 interface IEEAssemblyRefResolveComparer : IUnknown 4497 { 4498 static const GUID iid = { 0x6F1A544C,0xE69E,0x4a52,[ 0x9E,0xA1,0x25,0xC8,0x97,0xB0,0x5B,0xEF ] }; 4499 HRESULT CompareRef(in DWORD cookieFirst, in DWORD cookieSecond, in DWORD cookieTarget, 4500 /+[out]+/ BOOL * firstIsBetter); 4501 }; 4502 4503 const GUID IID_IEEAssemblyRef = IEEAssemblyRef.iid; 4504 4505 interface IEEAssemblyRef : IUnknown 4506 { 4507 static const GUID iid = { 0xAAD20A0E,0x9CD9,0x40ab,[ 0x91,0xB9,0x3C,0x19,0x43,0x56,0x2C,0x84 ] }; 4508 HRESULT GetName(/+[out]+/ BSTR * bstr); 4509 HRESULT GetVersion(/+[out]+/ USHORT * major, 4510 /+[out]+/ USHORT * minor, 4511 /+[out]+/ USHORT * build, 4512 /+[out]+/ USHORT * revision); 4513 HRESULT GetCulture(/+[out]+/ BSTR * bstr); 4514 HRESULT GetPublicKey(/+[out]+/ BSTR * key); 4515 }; 4516 4517 const GUID IID_IEEHelperObject = IEEHelperObject.iid; 4518 4519 interface IEEHelperObject : IUnknown 4520 { 4521 static const GUID iid = { 0x4A3BCDE5,0x5F66,0x4cc8,[ 0x9F,0xA0,0x14,0x27,0x5C,0xCE,0xE6,0x88 ] }; 4522 4523 HRESULT InitCache(IEEAssemblyRefResolveComparer pResolver); 4524 4525 HRESULT GetTargetClass(in LPCOLESTR name, in DWORD assemblyCookie, 4526 /+[out]+/ DWORD * cookie, 4527 /+[out]+/ ULONG * valueAttrCount, 4528 /+[out]+/ ULONG * viewerAttrCount, 4529 /+[out]+/ ULONG * visualizerAttrCount); 4530 HRESULT GetTargetAssembly(in LPCOLESTR name, 4531 /+[out]+/ DWORD * cookie); 4532 4533 HRESULT GetAssembly(in DWORD assemblyCookie, GETASSEMBLY flags, 4534 /+[out]+/ ASSEMBLYFLAGS * flagsOut, 4535 /+[out]+/ BSTR * name, 4536 /+[out]+/ IEEDataStorage * assemBytes, 4537 /+[out]+/ IEEDataStorage * pdbBytes); 4538 4539 HRESULT GetHostAssembly(GETASSEMBLY flags, 4540 /+[out]+/ IEEDataStorage * assemBytes, 4541 /+[out]+/ IEEDataStorage * pdbBytes); 4542 4543 HRESULT GetValueAttributeProps(in DWORD classCookie, in ULONG ordinal, 4544 /+[out]+/ BSTR * targetedAssembly, 4545 /+[out]+/ DWORD * assemLocation, 4546 /+[out]+/ BSTR * name, 4547 /+[out]+/ BSTR * value, 4548 /+[out]+/ BSTR * type); 4549 HRESULT GetViewerAttributeProps(in DWORD classCookie, in ULONG ordinal, 4550 /+[out]+/ BSTR * targetedAssembly, 4551 /+[out]+/ DWORD * assemLocation, 4552 /+[out]+/ BSTR * className, 4553 /+[out]+/ DWORD * classAssemLocation); 4554 HRESULT GetVisualizerAttributeProps(in DWORD classCookie, in ULONG ordinal, 4555 /+[out]+/ BSTR * targetedAssembly, 4556 /+[out]+/ DWORD * assemLocation, 4557 /+[out]+/ BSTR * displayClassName, 4558 /+[out]+/ DWORD * displayClassAssemLocation, 4559 /+[out]+/ BSTR * proxyClassName, 4560 /+[out]+/ DWORD * proxyClassAssemLocation, 4561 /+[out]+/ BSTR * description, 4562 /+[out]+/ ULONG * uiType); 4563 HRESULT GetAssemblyRefForCookie(in DWORD cookie, 4564 /+[out]+/ IEEAssemblyRef * ppAssemRef); 4565 } 4566 enum /+ enum_ASSEMBLYFLAGS+/ : DWORD 4567 { 4568 ASMF_USERDIR = 0x1, 4569 ASMF_SHAREDDIR = 0x2, 4570 } 4571 alias DWORD enum_ASSEMBLYFLAGS; 4572 alias DWORD ASSEMBLYFLAGS;; 4573 4574 // ------------------------------------------------------------------ 4575 // IDebugExceptionCallback2 4576 const GUID IID_IDebugExceptionCallback2 = IDebugExceptionCallback2.iid; 4577 4578 interface IDebugExceptionCallback2 : IUnknown 4579 { 4580 static const GUID iid = { 0x6f5cfda4,0x47d3,0x4a90,[ 0xa8,0x82,0x14,0x42,0x72,0x37,0xbc,0xee ] }; 4581 // S_OK indicates that we should stop 4582 HRESULT QueryStopOnException( 4583 /+[in]+/ IDebugProcess2 pProcess, 4584 /+[in]+/ IDebugProgram2 pProgram, 4585 /+[in]+/ IDebugThread2 pThread, 4586 /+[in]+/ IDebugExceptionEvent2 pEvent); 4587 }; 4588 4589 // ------------------------------------------------------------------ 4590 // IEnumDebugProcesses2 4591 const GUID IID_IEnumDebugProcesses2 = IEnumDebugProcesses2.iid; 4592 4593 interface IEnumDebugProcesses2 : IUnknown 4594 { 4595 static const GUID iid = { 0x96c74ef4,0x185d,0x4f9a,[ 0x8a,0x43,0x4d,0x27,0x23,0x75,0x8e,0x0a ] }; 4596 HRESULT Next( 4597 in ULONG celt, 4598 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugProcess2 * rgelt, 4599 /+[in, out]+/ ULONG* pceltFetched); 4600 4601 HRESULT Skip( 4602 in ULONG celt); 4603 4604 HRESULT Reset(); 4605 4606 HRESULT Clone( 4607 /+[out]+/ IEnumDebugProcesses2 * ppEnum); 4608 4609 HRESULT GetCount( 4610 /+[out]+/ ULONG* pcelt); 4611 }; 4612 4613 // ------------------------------------------------------------------ 4614 // IEnumDebugPrograms2 4615 const GUID IID_IEnumDebugPrograms2 = IEnumDebugPrograms2.iid; 4616 4617 interface IEnumDebugPrograms2 : IUnknown 4618 { 4619 static const GUID iid = { 0x8d14bca6,0x34ce,0x4efe,[ 0xac,0x7e,0x0a,0xbc,0x61,0xda,0xdb,0x20 ] }; 4620 HRESULT Next( 4621 in ULONG celt, 4622 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugProgram2 * rgelt, 4623 /+[in, out]+/ ULONG* pceltFetched); 4624 4625 HRESULT Skip( 4626 in ULONG celt); 4627 4628 HRESULT Reset(); 4629 4630 HRESULT Clone( 4631 /+[out]+/ IEnumDebugPrograms2 * ppEnum); 4632 4633 HRESULT GetCount( 4634 /+[out]+/ ULONG* pcelt); 4635 }; 4636 4637 // ------------------------------------------------------------------ 4638 // IEnumDebugThreads2 4639 const GUID IID_IEnumDebugThreads2 = IEnumDebugThreads2.iid; 4640 4641 interface IEnumDebugThreads2 : IUnknown 4642 { 4643 static const GUID iid = { 0x0d30dc12,0xc4f8,0x433d,[ 0x9f,0xcc,0x9f,0xf1,0x17,0xe5,0xe5,0xf4 ] }; 4644 HRESULT Next( 4645 in ULONG celt, 4646 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugThread2 * rgelt, 4647 /+[in, out]+/ ULONG* pceltFetched); 4648 4649 HRESULT Skip( 4650 in ULONG celt); 4651 4652 HRESULT Reset(); 4653 4654 HRESULT Clone( 4655 /+[out]+/ IEnumDebugThreads2 * ppEnum); 4656 4657 HRESULT GetCount( 4658 /+[out]+/ ULONG* pcelt); 4659 }; 4660 4661 // ------------------------------------------------------------------ 4662 // IEnumDebugStackFrames2 4663 const GUID IID_IEnumDebugStackFrames2 = IEnumDebugStackFrames2.iid; 4664 4665 interface IEnumDebugStackFrames2 : IUnknown 4666 { 4667 static const GUID iid = { 0xcd39102b,0x4b69,0x4495,[ 0x8f,0x29,0xe0,0xb2,0x5c,0x4a,0x88,0x55 ] }; 4668 HRESULT Next( 4669 in ULONG celt, 4670 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugStackFrame2 * rgelt, 4671 /+[in, out]+/ ULONG* pceltFetched); 4672 4673 HRESULT Skip( 4674 in ULONG celt); 4675 4676 HRESULT Reset(); 4677 4678 HRESULT Clone( 4679 /+[out]+/ IEnumDebugStackFrames2 * ppEnum); 4680 4681 HRESULT GetCount( 4682 /+[out]+/ ULONG* pcelt); 4683 4684 HRESULT GetIndex( 4685 /+[in]+/ IDebugStackFrame2 pStackFrame, 4686 /+[in, out]+/ ULONG* pIndex); 4687 }; 4688 4689 // ------------------------------------------------------------------ 4690 // IEnumDebugCodeContexts2 4691 const GUID IID_IEnumDebugCodeContexts2 = IEnumDebugCodeContexts2.iid; 4692 4693 interface IEnumDebugCodeContexts2 : IUnknown 4694 { 4695 static const GUID iid = { 0xad47a80b,0xeda7,0x459e,[ 0xaf,0x82,0x64,0x7c,0xc9,0xfb,0xaa,0x50 ] }; 4696 HRESULT Next( 4697 in ULONG celt, 4698 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugCodeContext2 * rgelt, 4699 /+[in, out]+/ ULONG* pceltFetched); 4700 4701 HRESULT Skip( 4702 in ULONG celt); 4703 4704 HRESULT Reset(); 4705 4706 HRESULT Clone( 4707 /+[out]+/ IEnumDebugCodeContexts2 * ppEnum); 4708 4709 HRESULT GetCount( 4710 /+[out]+/ ULONG* pcelt); 4711 }; 4712 4713 // ------------------------------------------------------------------ 4714 // IEnumDebugBoundBreakpoints2 4715 4716 const GUID IID_IEnumDebugBoundBreakpoints2 = IEnumDebugBoundBreakpoints2.iid; 4717 4718 interface IEnumDebugBoundBreakpoints2 : IUnknown 4719 { 4720 static const GUID iid = { 0x0f6b37e0,0xfcfe,0x44d9,[ 0x91,0x12,0x39,0x4c,0xa9,0xb9,0x21,0x14 ] }; 4721 HRESULT Next( 4722 in ULONG celt, 4723 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugBoundBreakpoint2 * rgelt, 4724 /+[in, out]+/ ULONG* pceltFetched); 4725 4726 HRESULT Skip( 4727 in ULONG celt); 4728 4729 HRESULT Reset(); 4730 4731 HRESULT Clone( 4732 /+[out]+/ IEnumDebugBoundBreakpoints2 * ppEnum); 4733 4734 HRESULT GetCount( 4735 /+[out]+/ ULONG* pcelt); 4736 }; 4737 4738 // ------------------------------------------------------------------ 4739 // IEnumDebugPendingBreakpoints2 4740 4741 const GUID IID_IEnumDebugPendingBreakpoints2 = IEnumDebugPendingBreakpoints2.iid; 4742 4743 interface IEnumDebugPendingBreakpoints2 : IUnknown 4744 { 4745 static const GUID iid = { 0x70d2dc1e,0x4dcc,0x4786,[ 0xa0,0x72,0x9a,0x3b,0x60,0x0c,0x21,0x6b ] }; 4746 HRESULT Next( 4747 in ULONG celt, 4748 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugPendingBreakpoint2 * rgelt, 4749 /+[in, out]+/ ULONG* pceltFetched); 4750 4751 HRESULT Skip( 4752 in ULONG celt); 4753 4754 HRESULT Reset(); 4755 4756 HRESULT Clone( 4757 /+[out]+/ IEnumDebugPendingBreakpoints2 * ppEnum); 4758 4759 HRESULT GetCount( 4760 /+[out]+/ ULONG* pcelt); 4761 }; 4762 4763 // ------------------------------------------------------------------ 4764 // IEnumDebugErrorBreakpoints2 4765 4766 const GUID IID_IEnumDebugErrorBreakpoints2 = IEnumDebugErrorBreakpoints2.iid; 4767 4768 interface IEnumDebugErrorBreakpoints2 : IUnknown 4769 { 4770 static const GUID iid = { 0xe158f5aa,0x31fe,0x491b,[ 0xa9,0xf6,0xcf,0xf9,0x34,0xb0,0x3a,0x01 ] }; 4771 HRESULT Next( 4772 in ULONG celt, 4773 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugErrorBreakpoint2 * rgelt, 4774 /+[in, out]+/ ULONG* pceltFetched); 4775 4776 HRESULT Skip( 4777 in ULONG celt); 4778 4779 HRESULT Reset(); 4780 4781 HRESULT Clone( 4782 /+[out]+/ IEnumDebugErrorBreakpoints2 * ppEnum); 4783 4784 HRESULT GetCount( 4785 /+[out]+/ ULONG* pcelt); 4786 }; 4787 4788 // ------------------------------------------------------------------ 4789 // IEnumDebugMachines2__deprecated 4790 const GUID IID_IEnumDebugMachines2__deprecated = IEnumDebugMachines2__deprecated.iid; 4791 4792 interface IEnumDebugMachines2__deprecated : IUnknown 4793 { 4794 static const GUID iid = { 0x61d986ec,0x1eac,0x46b6,[ 0x90,0xff,0x40,0x2a,0x00,0x8f,0x15,0xd1 ] }; 4795 HRESULT Next( 4796 in ULONG celt, 4797 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugCoreServer2 * rgelt, 4798 /+[in, out]+/ ULONG *pceltFetched); 4799 4800 HRESULT Skip( 4801 in ULONG celt); 4802 4803 HRESULT Reset(); 4804 4805 HRESULT Clone( 4806 /+[out]+/ IEnumDebugMachines2__deprecated *ppEnum); 4807 4808 HRESULT GetCount( 4809 /+[out]+/ ULONG *pcelt); 4810 }; 4811 4812 // #define EnumMachines_V7 EnumMachines__deprecated 4813 // #define IEnumDebugMachines2_V7 IEnumDebugMachines2__deprecated 4814 // #define IID_IEnumDebugMachines2_V7 IID_IEnumDebugMachines2__deprecated 4815 4816 // ------------------------------------------------------------------ 4817 // IEnumDebugExceptionInfo2 4818 const GUID IID_IEnumDebugExceptionInfo2 = IEnumDebugExceptionInfo2.iid; 4819 4820 interface IEnumDebugExceptionInfo2 : IUnknown 4821 { 4822 static const GUID iid = { 0x8e4bbd34,0xa2f4,0x41ef,[ 0x87,0xb5,0xc5,0x63,0xb4,0xad,0x6e,0xe7 ] }; 4823 HRESULT Next( 4824 in ULONG celt, 4825 /+[out, size_is(celt), length_is(*pceltFetched)]+/ EXCEPTION_INFO* rgelt, 4826 /+[in, out]+/ ULONG *pceltFetched); 4827 4828 HRESULT Skip( 4829 in ULONG celt); 4830 4831 HRESULT Reset(); 4832 4833 HRESULT Clone( 4834 /+[out]+/ IEnumDebugExceptionInfo2 * ppEnum); 4835 4836 HRESULT GetCount( 4837 /+[out]+/ ULONG* pcelt); 4838 }; 4839 4840 // ------------------------------------------------------------------ 4841 // IEnumDebugFrameInfo2 4842 const GUID IID_IEnumDebugFrameInfo2 = IEnumDebugFrameInfo2.iid; 4843 4844 interface IEnumDebugFrameInfo2 : IUnknown 4845 { 4846 static const GUID iid = { 0x98bbba48,0x4c4d,0x4fff,[ 0x83,0x40,0x60,0x97,0xbe,0xc9,0xc8,0x94 ] }; 4847 HRESULT Next( 4848 in ULONG celt, 4849 /+[out, size_is(celt), length_is(*pceltFetched)]+/ FRAMEINFO* rgelt, 4850 /+[in, out]+/ ULONG *pceltFetched); 4851 4852 HRESULT Skip( 4853 in ULONG celt); 4854 4855 HRESULT Reset(); 4856 4857 HRESULT Clone( 4858 /+[out]+/ IEnumDebugFrameInfo2 * ppEnum); 4859 4860 HRESULT GetCount( 4861 /+[out]+/ ULONG* pcelt); 4862 }; 4863 4864 const GUID IID_IEnumDebugSessionFrameInfo2 = IEnumDebugSessionFrameInfo2.iid; 4865 4866 interface IEnumDebugSessionFrameInfo2 : IEnumDebugFrameInfo2 4867 { 4868 static const GUID iid = { 0xef7262c4,0x4a01,0x42a0,[ 0x86,0x58,0x93,0x26,0x67,0xb2,0x75,0x55 ] }; 4869 4870 HRESULT SetCachePriority( 4871 in SESSION_CACHE_PRIORITY cachePriority); 4872 } 4873 enum /+ enum_SESSION_CACHE_PRIORITY+/ 4874 { 4875 NORMAL_CACHE_PRIORITY = 0, 4876 HIGH_CACHE_PRIORITY = 1 4877 } 4878 alias int enum_SESSION_CACHE_PRIORITY; 4879 alias int SESSION_CACHE_PRIORITY;; 4880 4881 // ------------------------------------------------------------------ 4882 // IEnumDebugFrameInfoFilter2 4883 const GUID IID_IEnumDebugFrameInfoFilter2 = IEnumDebugFrameInfoFilter2.iid; 4884 4885 interface IEnumDebugFrameInfoFilter2 : IEnumDebugFrameInfo2 4886 { 4887 static const GUID iid = { 0x6CD4FB40,0xF954,0x44e0,[ 0xB8,0xA5,0xA6,0x14,0x48,0x1E,0x08,0x31 ] }; 4888 HRESULT CanFilter( 4889 /+[out]+/ BOOL *pfCanFilter); 4890 4891 HRESULT IsFiltered( 4892 /+[out]+/ BOOL *pfIsFiltered); 4893 } 4894 4895 // ------------------------------------------------------------------ 4896 // IEnumCodePaths2 4897 const GUID IID_IEnumCodePaths2 = IEnumCodePaths2.iid; 4898 4899 interface IEnumCodePaths2 : IUnknown 4900 { 4901 static const GUID iid = { 0x9b13f80d,0xcfc6,0x4b78,[ 0x81,0xef,0x1f,0x7c,0xc3,0x3f,0x76,0x39 ] }; 4902 HRESULT Next( 4903 in ULONG celt, 4904 /+[out, size_is(celt), length_is(*pceltFetched)]+/ CODE_PATH* rgelt, 4905 /+[in, out]+/ ULONG *pceltFetched); 4906 4907 HRESULT Skip( 4908 in ULONG celt); 4909 4910 HRESULT Reset(); 4911 4912 HRESULT Clone( 4913 /+[out]+/ IEnumCodePaths2 * ppEnum); 4914 4915 HRESULT GetCount( 4916 /+[out]+/ ULONG* pcelt); 4917 }; 4918 4919 // ------------------------------------------------------------------ 4920 // IEnumDebugModules2 4921 const GUID IID_IEnumDebugModules2 = IEnumDebugModules2.iid; 4922 4923 interface IEnumDebugModules2 : IUnknown 4924 { 4925 static const GUID iid = { 0x4c4a2835,0x682e,0x4ce1,[ 0xae,0xbc,0x1e,0x6b,0x3a,0x16,0x5b,0x44 ] }; 4926 HRESULT Next( 4927 in ULONG celt, 4928 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugModule2 * rgelt, 4929 /+[in, out]+/ ULONG* pceltFetched); 4930 4931 HRESULT Skip( 4932 in ULONG celt); 4933 4934 HRESULT Reset(); 4935 4936 HRESULT Clone( 4937 /+[out]+/ IEnumDebugModules2 * ppEnum); 4938 4939 HRESULT GetCount( 4940 /+[out]+/ ULONG* pcelt); 4941 }; 4942 4943 // ------------------------------------------------------------------ 4944 // IEnumDebugPortSuppliers2 4945 const GUID IID_IEnumDebugPortSuppliers2 = IEnumDebugPortSuppliers2.iid; 4946 4947 interface IEnumDebugPortSuppliers2 : IUnknown 4948 { 4949 static const GUID iid = { 0x59c9dc99,0x3eff,0x4ff3,[ 0xb2,0x01,0x98,0xac,0xd0,0x1b,0x0d,0x87 ] }; 4950 HRESULT Next( 4951 in ULONG celt, 4952 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugPortSupplier2 * rgelt, 4953 /+[in, out]+/ ULONG* pceltFetched); 4954 4955 HRESULT Skip( 4956 in ULONG celt); 4957 4958 HRESULT Reset(); 4959 4960 HRESULT Clone( 4961 /+[out]+/ IEnumDebugPortSuppliers2 * ppEnum); 4962 4963 HRESULT GetCount( 4964 /+[out]+/ ULONG* pcelt); 4965 }; 4966 4967 // ------------------------------------------------------------------ 4968 // IEnumDebugPorts2 4969 const GUID IID_IEnumDebugPorts2 = IEnumDebugPorts2.iid; 4970 4971 interface IEnumDebugPorts2 : IUnknown 4972 { 4973 static const GUID iid = { 0xbc827c5e,0x99ae,0x4ac8,[ 0x83,0xad,0x2e,0xa5,0xc2,0x03,0x43,0x33 ] }; 4974 HRESULT Next( 4975 in ULONG celt, 4976 /+[out, size_is(celt), length_is(*pceltFetched)]+/ IDebugPort2 * rgelt, 4977 /+[in, out]+/ ULONG* pceltFetched); 4978 4979 HRESULT Skip( 4980 in ULONG celt); 4981 4982 HRESULT Reset(); 4983 4984 HRESULT Clone( 4985 /+[out]+/ IEnumDebugPorts2 * ppEnum); 4986 4987 HRESULT GetCount( 4988 /+[out]+/ ULONG* pcelt); 4989 }; 4990 4991 // ------------------------------------------------------------------ 4992 // IEnumDebugPropertyInfo2 4993 const GUID IID_IEnumDebugPropertyInfo2 = IEnumDebugPropertyInfo2.iid; 4994 4995 interface IEnumDebugPropertyInfo2 : IUnknown 4996 { 4997 static const GUID iid = { 0x6c7072c3,0x3ac4,0x408f,[ 0xa6,0x80,0xfc,0x5a,0x2f,0x96,0x90,0x3e ] }; 4998 HRESULT Next( 4999 in ULONG celt, 5000 /+[out, size_is(celt), length_is(*pceltFetched)]+/ DEBUG_PROPERTY_INFO* rgelt, 5001 /+[out]+/ ULONG* pceltFetched); 5002 5003 HRESULT Skip( 5004 in ULONG celt); 5005 5006 HRESULT Reset(); 5007 5008 HRESULT Clone( 5009 /+[out]+/ IEnumDebugPropertyInfo2 * ppEnum); 5010 5011 HRESULT GetCount( 5012 /+[out]+/ ULONG* pcelt); 5013 }; 5014 5015 // ------------------------------------------------------------------ 5016 // IEnumDebugReferenceInfo2 5017 const GUID IID_IEnumDebugReferenceInfo2 = IEnumDebugReferenceInfo2.iid; 5018 5019 interface IEnumDebugReferenceInfo2 : IUnknown 5020 { 5021 static const GUID iid = { 0xe459dd12,0x864f,0x4aaa,[ 0xab,0xc1,0xdc,0xec,0xbc,0x26,0x7f,0x04 ] }; 5022 HRESULT Next( 5023 in ULONG celt, 5024 /+[out, size_is(celt), length_is(*pceltFetched)]+/ DEBUG_REFERENCE_INFO* rgelt, 5025 /+[out]+/ ULONG* pceltFetched); 5026 5027 HRESULT Skip( 5028 in ULONG celt); 5029 5030 HRESULT Reset(); 5031 5032 HRESULT Clone( 5033 /+[out]+/ IEnumDebugReferenceInfo2 * ppEnum); 5034 5035 HRESULT GetCount( 5036 /+[out]+/ ULONG* pcelt); 5037 }; 5038 5039 // ------------------------------------------------------------------ 5040 // IDebugProcessQueryProperties 5041 // Extension interface implemented by IDebugProcess2 implementors. 5042 // Enable querying the information about the execution environment 5043 // of a process. 5044 // 5045 const GUID IID_IDebugProcessQueryProperties = IDebugProcessQueryProperties.iid; 5046 5047 interface IDebugProcessQueryProperties : IUnknown 5048 { 5049 static const GUID iid = { 0x230A0071,0x62EF,0x4cae,[ 0xAA,0xC0,0x89,0x88,0xC3,0x70,0x24,0xBF ] }; 5050 5051 HRESULT QueryProperty( 5052 in PROCESS_PROPERTY_TYPE dwPropType, 5053 /+[out]+/ VARIANT *pvarPropValue); 5054 5055 HRESULT QueryProperties( 5056 in ULONG celt, 5057 /+[ size_is (celt)]+/ in PROCESS_PROPERTY_TYPE *rgdwPropTypes, 5058 /+[out, size_is(celt)]+/ VARIANT *rgtPropValues); 5059 } 5060 enum /+ enum_PROCESS_PROPERTY_TYPE+/ : DWORD 5061 { 5062 // Return the command line as a VT_BSTR 5063 PROCESS_PROPERTY_COMMAND_LINE = 1, 5064 5065 // Return the current directory as a VT_BSTR 5066 PROCESS_PROPERTY_CURRENT_DIRECTORY = 2, 5067 5068 // Return the environment variavles as a VT_BSTR. 5069 // The format is: 5070 // NAME1=VALUE1'\0' 5071 // NAME2=VALUE2'\0' 5072 // ... 5073 // '\0' 5074 PROCESS_PROPERTY_ENVIRONMENT_VARIABLES = 3 5075 } 5076 alias DWORD enum_PROCESS_PROPERTY_TYPE; 5077 alias DWORD PROCESS_PROPERTY_TYPE;; 5078 5079 // ------------------------------------------------------------------ 5080 // IDebugRemoteServer2 -- interface to an instance of msvsmon 5081 const GUID IID_IDebugRemoteServer2 = IDebugRemoteServer2.iid; 5082 5083 interface IDebugRemoteServer2 : IUnknown 5084 { 5085 static const GUID iid = { 0x3d3ce5c4,0x1508,0x4711,[ 0xa5,0xeb,0xf8,0x48,0xf6,0xe1,0x00,0x72 ] }; 5086 5087 HRESULT GetRemoteServerName( 5088 /+[out]+/ BSTR *pbstrName); 5089 5090 HRESULT GetRemoteComputerInfo( 5091 /+[out]+/ COMPUTER_INFO * pInfo 5092 ); 5093 5094 HRESULT EnumRemoteProcesses( 5095 /+[out]+/ ENUMERATED_PROCESS_ARRAY * pProcessArray 5096 ); 5097 5098 HRESULT GetRemoteProcessInfo( 5099 in DWORD dwProcessId, 5100 in REMOTE_PROCESS_INFO_FIELDS Fields, 5101 /+[out]+/ REMOTE_PROCESS_INFO *pInfo 5102 ); 5103 5104 HRESULT CreateRemoteInstance( 5105 /+[ ptr]+/ in LPCWSTR szDll, 5106 in WORD wLangId, 5107 in CLSID* clsidObject, 5108 in IID* riid, 5109 /+[out, iid_is(riid)]+/ void **ppvObject); 5110 5111 HRESULT WatchForRemoteProcessDestroy( 5112 /+[in]+/ IDebugPortEvents2 pCallback, 5113 /+[in]+/ IDebugProcess2 pProcess, 5114 /+[out]+/ WATCH_COOKIE *pWatchCookie); 5115 5116 HRESULT CloseRemoteWatchCookie( 5117 in WATCH_COOKIE WatchCookie 5118 ); 5119 5120 HRESULT TerminateRemoteProcess( 5121 in DWORD dwProcessId 5122 ); 5123 5124 HRESULT LaunchRemoteProcess( 5125 in PROCESS_LAUNCH_INFO LaunchInfo, 5126 /+[out]+/ DWORD * pdwProcessId, 5127 /+[out]+/ RESUME_COOKIE * pResumeCookie); 5128 5129 HRESULT CloseRemoteResumeCookie( 5130 in RESUME_COOKIE ResumeCookie); 5131 5132 HRESULT DiagnoseRemoteWebDebuggingError( 5133 /+[ptr]+/ in LPCWSTR szUrl); 5134 } 5135 enum /+ enum_ENUMERATED_PROCESS_FLAGS+/ : DWORD 5136 { 5137 EPFLAG_SHOW_SECURITY_WARNING = 0x01, 5138 EPFLAG_SYSTEM_PROCESS = 0x02 5139 } 5140 alias DWORD enum_ENUMERATED_PROCESS_FLAGS; 5141 alias DWORD ENUMERATED_PROCESS_FLAGS; 5142 enum /+ enum_REMOTE_PROCESS_FLAGS+/ : DWORD 5143 { 5144 // ENUMERATED_PROCESS_FLAGS can also be passed here 5145 5146 RPFLAG_DEBUGGER_ATTACH = 0x100, 5147 RPFLAG_SQL_LOADED = 0x200, 5148 RPFLAG_CLR_LOADED = 0x400, 5149 RPFLAG_PROCESS_WOW64 = 0x800, 5150 } 5151 alias DWORD enum_REMOTE_PROCESS_FLAGS; 5152 alias DWORD REMOTE_PROCESS_FLAGS; 5153 enum /+ enum_REMOTE_PROCESS_INFO_FIELDS+/ : DWORD 5154 { 5155 RPIF_TITLE = 0x01, 5156 RPIF_MODULE_PATH = 0x02, 5157 RPIF_COMMAND_LINE = 0x04, 5158 RPIF_CURRENT_DIRECTORY = 0x08, 5159 RPIF_ENVIRONMENT_VARIABLES = 0x10, 5160 RPIF_USER_NAME = 0x20, 5161 RPIF_SESSION_ID = 0x40, 5162 RPIF_ENUMERATED_FLAGS = 0x80, 5163 RPIF_DEBUGGER_PRESENT_FLAGS = 0x100, 5164 RPIF_PROGRAM_TYPE_FLAGS = 0x200 5165 } 5166 alias DWORD enum_REMOTE_PROCESS_INFO_FIELDS; 5167 alias DWORD REMOTE_PROCESS_INFO_FIELDS; 5168 struct tagREMOTE_PROCESS_INFO 5169 { 5170 REMOTE_PROCESS_INFO_FIELDS Fields; 5171 BSTR bstrTitle; 5172 BSTR bstrModulePath; 5173 BSTR bstrCommandLine; 5174 BSTR bstrCurrentDirectory; 5175 BSTR bstrEnvironmentVariables; 5176 BSTR bstrUserName; 5177 DWORD dwSessionId; 5178 REMOTE_PROCESS_FLAGS Flags; 5179 } 5180 alias tagREMOTE_PROCESS_INFO REMOTE_PROCESS_INFO; 5181 struct tagENUMERATED_PROCESS 5182 { 5183 DWORD dwProcessId; 5184 DWORD dwSessionId; 5185 BSTR bstrUserName; 5186 ENUMERATED_PROCESS_FLAGS dwProcessFlags; 5187 } 5188 alias tagENUMERATED_PROCESS ENUMERATED_PROCESS; 5189 struct tagENUMERATED_PROCESS_ARRAY 5190 { 5191 DWORD dwCount; 5192 /+[size_is(dwCount)]+/ ENUMERATED_PROCESS *Members; 5193 } 5194 alias tagENUMERATED_PROCESS_ARRAY ENUMERATED_PROCESS_ARRAY; 5195 struct tagPROCESS_LAUNCH_INFO 5196 { 5197 LPCOLESTR pszExe; 5198 /+[ptr]+/ LPCOLESTR pszArgs; 5199 /+[ptr]+/ LPCOLESTR pszDir; 5200 /+[ptr]+/ BSTR bstrEnv; 5201 BOOL fLaunchSuspended; 5202 } 5203 alias tagPROCESS_LAUNCH_INFO PROCESS_LAUNCH_INFO; 5204 struct tagWATCH_COOKIE 5205 { 5206 UINT64 val; 5207 } 5208 alias tagWATCH_COOKIE WATCH_COOKIE; 5209 struct tagRESUME_COOKIE 5210 { 5211 UINT64 val; 5212 } 5213 alias tagRESUME_COOKIE RESUME_COOKIE;; 5214 5215 // ------------------------------------------------------------------ 5216 // IDebugRemoteServerFactory2 - Implemented on Win9x by Msvsmon 5217 const GUID IID_IDebugRemoteServerFactory2 = IDebugRemoteServerFactory2.iid; 5218 5219 interface IDebugRemoteServerFactory2 : IUnknown 5220 { 5221 static const GUID iid = { 0x4a5af829,0xca32,0x4b01,[ 0xaa,0xe4,0x4c,0x53,0xd2,0x60,0xe7,0x5c ] }; 5222 HRESULT CreateServer( 5223 /+[in]+/ IDebugSession2 pSession, 5224 /+[out]+/ IDebugRemoteServer2 *ppRemoteServer 5225 ); 5226 }; 5227 5228 // ------------------------------------------------------------------ 5229 // IDebugProgramPublisher2 - Implemented by pdm.dll (coclass ProgramPublisher). 5230 // This allows a script or third party program node to be published. These 5231 // program nodes are then accessable from a debugger process using IDebugProgramProvider2 5232 const GUID IID_IDebugProgramPublisher2 = IDebugProgramPublisher2.iid; 5233 5234 interface IDebugProgramPublisher2 : IUnknown 5235 { 5236 static const GUID iid = { 0xa3dddf26,0x7792,0x4544,[ 0xa9,0xa4,0xd4,0xdf,0xb1,0x1c,0xd8,0xf3 ] }; 5237 HRESULT PublishProgramNode( 5238 /+[in]+/ IDebugProgramNode2 pProgramNode); 5239 5240 HRESULT UnpublishProgramNode( 5241 /+[in]+/ IDebugProgramNode2 pProgramNode); 5242 5243 HRESULT PublishProgram( 5244 in CONST_GUID_ARRAY Engines, 5245 /+[ ptr]+/ in LPCOLESTR szFriendlyName, 5246 /+[in]+/ IUnknown pDebuggeeInterface 5247 ); 5248 5249 HRESULT UnpublishProgram( 5250 /+[in]+/ IUnknown pDebuggeeInterface 5251 ); 5252 5253 HRESULT SetDebuggerPresent( 5254 in BOOL fDebuggerPresent 5255 ); 5256 }; 5257 5258 // ------------------------------------------------------------------ 5259 // IDebugProgramProvider2 - implemented by a 3rd party engine or by pdm.dll 5260 // (coclass DebugProgramProvider). This allows the sdm to obtain program 5261 // nodes for a running process. 5262 const GUID IID_IDebugProgramProvider2 = IDebugProgramProvider2.iid; 5263 5264 interface IDebugProgramProvider2 : IUnknown 5265 { 5266 static const GUID iid = { 0x1959530a,0x8e53,0x4e09,[ 0xad,0x11,0x1b,0x73,0x34,0x81,0x1c,0xad ] }; 5267 5268 HRESULT GetProviderProcessData( 5269 in PROVIDER_FLAGS Flags, 5270 /+[in]+/ IDebugDefaultPort2 pPort, 5271 in AD_PROCESS_ID processId, 5272 in CONST_GUID_ARRAY EngineFilter, 5273 /+[out]+/ PROVIDER_PROCESS_DATA *pProcess); 5274 5275 HRESULT GetProviderProgramNode( 5276 in PROVIDER_FLAGS Flags, 5277 /+[in]+/ IDebugDefaultPort2 pPort, 5278 in AD_PROCESS_ID processId, 5279 in GUID* guidEngine, 5280 in UINT64 programId, 5281 /+[out]+/ IDebugProgramNode2 *ppProgramNode); 5282 5283 HRESULT WatchForProviderEvents( 5284 in PROVIDER_FLAGS Flags, 5285 /+[in]+/ IDebugDefaultPort2 pPort, 5286 in AD_PROCESS_ID processId, 5287 in CONST_GUID_ARRAY EngineFilter, 5288 in GUID* guidLaunchingEngine, 5289 /+[in]+/ IDebugPortNotify2 pEventCallback); 5290 5291 HRESULT SetLocale( 5292 in WORD wLangID); 5293 } 5294 enum /+ enum_PROVIDER_FLAGS+/ : DWORD 5295 { 5296 PFLAG_NONE = 0x00, // no flags 5297 PFLAG_REMOTE_PORT = 0x01, // asking for programs on a different machine then devenv 5298 PFLAG_DEBUGGEE = 0x02, // the process is curently being debugged by this devenv 5299 PFLAG_ATTACHED_TO_DEBUGGEE = 0x04, // devenv is attached to the process (didn't launch it) 5300 PFLAG_REASON_WATCH = 0x08, // we are starting to watch for events 5301 PFLAG_GET_PROGRAM_NODES = 0x10, // want the 'ProgramNodes' field 5302 PFLAG_GET_IS_DEBUGGER_PRESENT = 0x20 5303 } 5304 alias DWORD enum_PROVIDER_FLAGS; 5305 alias DWORD PROVIDER_FLAGS; 5306 enum /+ enum_PROVIDER_FIELDS+/ : DWORD 5307 { 5308 PFIELD_PROGRAM_NODES = 0x01, 5309 PFIELD_IS_DEBUGGER_PRESENT = 0x02 5310 } 5311 alias DWORD enum_PROVIDER_FIELDS; 5312 alias DWORD PROVIDER_FIELDS; 5313 struct tagPROGRAM_NODE_ARRAY 5314 { 5315 DWORD dwCount; 5316 /+[size_is(dwCount)]+/ IDebugProgramNode2 * Members; 5317 } 5318 alias tagPROGRAM_NODE_ARRAY PROGRAM_NODE_ARRAY; 5319 struct tagPROVIDER_PROCESS_DATA 5320 { 5321 PROVIDER_FIELDS Fields; 5322 PROGRAM_NODE_ARRAY ProgramNodes; 5323 BOOL fIsDebuggerPresent; 5324 } 5325 alias tagPROVIDER_PROCESS_DATA PROVIDER_PROCESS_DATA;; 5326 5327 // ------------------------------------------------------------------ 5328 // IDebugProviderProgramNode2 - implemented by a 3rd party engine or by pdm.dll. 5329 // This interface is implemented in pdm.dll in the debugger process. It allows 5330 // an engine to retieve an interface from the program node running in the debuggee 5331 // process. 5332 const GUID IID_IDebugProviderProgramNode2 = IDebugProviderProgramNode2.iid; 5333 5334 interface IDebugProviderProgramNode2 : IUnknown 5335 { 5336 static const GUID iid = { 0xafdba726,0x047a,0x4b83,[ 0xb8,0xc7,0xd8,0x12,0xfe,0x9c,0xaa,0x5c ] }; 5337 HRESULT UnmarshalDebuggeeInterface( 5338 in IID* riid, 5339 /+[out, iid_is(riid)]+/ void **ppvObject); 5340 }; 5341 5342 // IDebugFirewallConfigurationCallback2 - implemented by vsdebug, and the SDM (port object). 5343 // This will determine if the Windows Firewall is blocking DCOM, and then take an 5344 // appropriate action 5345 const GUID IID_IDebugFirewallConfigurationCallback2 = IDebugFirewallConfigurationCallback2.iid; 5346 5347 interface IDebugFirewallConfigurationCallback2 : IUnknown 5348 { 5349 static const GUID iid = { 0xba3288db,0x224a,0x4fd6,[ 0xa3,0x7e,0x64,0xe7,0xab,0xe9,0xc4,0xa1 ] }; 5350 // Try and configure the firewall (if neccessary) so that the debugger can 5351 // act as a DCOM server. 5352 // Possible return values are S_OK and E_FIREWALL_USER_CANCLED 5353 HRESULT EnsureDCOMUnblocked(); 5354 }; 5355 5356 // This informs the UI before we do an unsafe attach. This allows the UI to prompt 5357 // the user to decide if the attach should proceed 5358 const GUID IID_IDebugAttachSecurityCallback2 = IDebugAttachSecurityCallback2.iid; 5359 5360 interface IDebugAttachSecurityCallback2 : IUnknown 5361 { 5362 static const GUID iid = { 0xa19e7faf,0xcb6f,0x43ba,[ 0xac,0x16,0xbd,0xe9,0x82,0x3d,0x6d,0xd1 ] }; 5363 HRESULT OnUnsafeAttach(/+[in]+/ IDebugProcess2 pProcess); 5364 }; 5365 5366 // ------------------------------------------------------------------ 5367 5368 version(all) /* #ifndef AD7_NO_LIB */ { 5369 /+[ 5370 uuid(d191c0d7-4c8b-4a15-a7b3-862dcd8daefb) 5371 ]+/ /+ library AD2Lib +/ 5372 //import sdk.port.stdole2; 5373 //import win32.stdole2; 5374 5375 const GUID CLSID_SDMServer = SDMServer.iid; 5376 5377 interface SDMServer 5378 { 5379 static const GUID iid = { 0x5eb7d9f7,0xaf21,0x400e,[ 0xa2,0xc4,0x7f,0xd6,0x39,0x6f,0x86,0x41 ] }; 5380 /+ 5381 /+[default]+/+/ /+ interface IDebugSession2; +/ 5382 }; 5383 5384 version(pp_ifdef) /* #ifdef DEBUG */ { 5385 alias MsMachineDebugManager_V7_DEBUG MsMachineDebugManager_V7; 5386 alias CLSID_MsMachineDebugManager_V7_DEBUG CLSID_MsMachineDebugManager_V7; 5387 } else { 5388 5389 alias MsMachineDebugManager_V7_RETAIL MsMachineDebugManager_V7; 5390 alias CLSID_MsMachineDebugManager_V7_RETAIL CLSID_MsMachineDebugManager_V7; 5391 } 5392 5393 const GUID CLSID_MsMachineDebugManager_V7_RETAIL = MsMachineDebugManager_V7_RETAIL.iid; 5394 5395 interface MsMachineDebugManager_V7_RETAIL 5396 { 5397 static const GUID iid = { 0x73b25ffd,0xf501,0x437b,[ 0x8b,0x11,0x7f,0x0d,0xe3,0x83,0x96,0x4f ] }; 5398 /+ 5399 /+[default]+/+/ /+ interface IDebugMachine2_V7; +/ 5400 }; 5401 5402 const GUID CLSID_MsMachineDebugManager_V7_DEBUG = MsMachineDebugManager_V7_DEBUG.iid; 5403 5404 interface MsMachineDebugManager_V7_DEBUG 5405 { 5406 static const GUID iid = { 0x05e1b201,0x493d,0x4678,[ 0xbb,0xcb,0x18,0xd9,0xca,0xf5,0xc0,0xa9 ] }; 5407 /+ 5408 /+[default]+/+/ /+ interface IDebugMachine2_V7; +/ 5409 }; 5410 5411 version(pp_ifdef) /* #ifdef DEBUG */ { 5412 alias MDMUtilServer_V7_DEBUG MDMUtilServer_V7; 5413 alias CLSID_MDMUtilServer_V7_DEBUG CLSID_MDMUtilServer_V7; 5414 } else { 5415 5416 alias MDMUtilServer_V7_RETAIL MDMUtilServer_V7; 5417 alias CLSID_MDMUtilServer_V7_RETAIL CLSID_MDMUtilServer_V7; 5418 } 5419 5420 const GUID CLSID_MDMUtilServer_V7_RETAIL = MDMUtilServer_V7_RETAIL.iid; 5421 5422 interface MDMUtilServer_V7_RETAIL 5423 { 5424 static const GUID iid = { 0xb20e899d,0xb079,0x479d,[ 0xa4,0xdc,0x10,0xf7,0x58,0xd9,0xcd,0x9a ] }; 5425 /+ 5426 /+[default]+/+/ /+ interface IDebugMDMUtil2_V7; +/ 5427 }; 5428 5429 const GUID CLSID_MDMUtilServer_V7_DEBUG = MDMUtilServer_V7_DEBUG.iid; 5430 5431 interface MDMUtilServer_V7_DEBUG 5432 { 5433 static const GUID iid = { 0x89370a13,0x3977,0x4e7d,[ 0xae,0xa0,0x0a,0x97,0x51,0xae,0x59,0x6b ] }; 5434 /+ 5435 /+[default]+/+/ /+ interface IDebugMDMUtil2_V7; +/ 5436 }; 5437 5438 const GUID CLSID_ProgramPublisher = ProgramPublisher.iid; 5439 5440 interface ProgramPublisher 5441 { 5442 static const GUID iid = { 0xd04d550d,0x1ea8,0x4e37,[ 0x83,0x0e,0x70,0x0f,0xea,0x44,0x76,0x88 ] }; 5443 /+ 5444 /+[default]+/+/ /+ interface IDebugProgramPublisher2; +/ 5445 }; 5446 5447 const GUID CLSID_MsProgramProvider = MsProgramProvider.iid; 5448 5449 interface MsProgramProvider 5450 { 5451 static const GUID iid = { 0x170ec3fc,0x4e80,0x40ab,[ 0xa8,0x5a,0x55,0x90,0x0c,0x7c,0x70,0xde ] }; 5452 /+ 5453 /+[default]+/+/ /+ interface IDebugProgramProvider2; +/ 5454 }; 5455 ; 5456 } 5457