

/* this ALWAYS GENERATED file contains the definitions for the interfaces */


 /* File created by MIDL compiler version 8.01.0628 */
/* Compiler settings for corprof.idl:
    Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0628 
    protocol : dce , ms_ext, c_ext, robust
    error checks: allocation ref bounds_check enum stub_data 
    VC __declspec() decoration level: 
         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
         DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING(  ) */

#pragma warning( disable: 4049 )  /* more than 64k source lines */


/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif /* __RPCNDR_H_VERSION__ */

#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif /*COM_NO_WINDOWS_H*/

#ifndef __corprof_h__
#define __corprof_h__

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif

#ifndef DECLSPEC_XFGVIRT
#if defined(_CONTROL_FLOW_GUARD_XFG)
#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func))
#else
#define DECLSPEC_XFGVIRT(base, func)
#endif
#endif

/* Forward Declarations */ 

#ifndef __ICorProfilerCallback_FWD_DEFINED__
#define __ICorProfilerCallback_FWD_DEFINED__
typedef interface ICorProfilerCallback ICorProfilerCallback;

#endif 	/* __ICorProfilerCallback_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback2_FWD_DEFINED__
#define __ICorProfilerCallback2_FWD_DEFINED__
typedef interface ICorProfilerCallback2 ICorProfilerCallback2;

#endif 	/* __ICorProfilerCallback2_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback3_FWD_DEFINED__
#define __ICorProfilerCallback3_FWD_DEFINED__
typedef interface ICorProfilerCallback3 ICorProfilerCallback3;

#endif 	/* __ICorProfilerCallback3_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback4_FWD_DEFINED__
#define __ICorProfilerCallback4_FWD_DEFINED__
typedef interface ICorProfilerCallback4 ICorProfilerCallback4;

#endif 	/* __ICorProfilerCallback4_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback5_FWD_DEFINED__
#define __ICorProfilerCallback5_FWD_DEFINED__
typedef interface ICorProfilerCallback5 ICorProfilerCallback5;

#endif 	/* __ICorProfilerCallback5_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback6_FWD_DEFINED__
#define __ICorProfilerCallback6_FWD_DEFINED__
typedef interface ICorProfilerCallback6 ICorProfilerCallback6;

#endif 	/* __ICorProfilerCallback6_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback7_FWD_DEFINED__
#define __ICorProfilerCallback7_FWD_DEFINED__
typedef interface ICorProfilerCallback7 ICorProfilerCallback7;

#endif 	/* __ICorProfilerCallback7_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback8_FWD_DEFINED__
#define __ICorProfilerCallback8_FWD_DEFINED__
typedef interface ICorProfilerCallback8 ICorProfilerCallback8;

#endif 	/* __ICorProfilerCallback8_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback9_FWD_DEFINED__
#define __ICorProfilerCallback9_FWD_DEFINED__
typedef interface ICorProfilerCallback9 ICorProfilerCallback9;

#endif 	/* __ICorProfilerCallback9_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback10_FWD_DEFINED__
#define __ICorProfilerCallback10_FWD_DEFINED__
typedef interface ICorProfilerCallback10 ICorProfilerCallback10;

#endif 	/* __ICorProfilerCallback10_FWD_DEFINED__ */


#ifndef __ICorProfilerCallback11_FWD_DEFINED__
#define __ICorProfilerCallback11_FWD_DEFINED__
typedef interface ICorProfilerCallback11 ICorProfilerCallback11;

#endif 	/* __ICorProfilerCallback11_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo_FWD_DEFINED__
#define __ICorProfilerInfo_FWD_DEFINED__
typedef interface ICorProfilerInfo ICorProfilerInfo;

#endif 	/* __ICorProfilerInfo_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo2_FWD_DEFINED__
#define __ICorProfilerInfo2_FWD_DEFINED__
typedef interface ICorProfilerInfo2 ICorProfilerInfo2;

#endif 	/* __ICorProfilerInfo2_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo3_FWD_DEFINED__
#define __ICorProfilerInfo3_FWD_DEFINED__
typedef interface ICorProfilerInfo3 ICorProfilerInfo3;

#endif 	/* __ICorProfilerInfo3_FWD_DEFINED__ */


#ifndef __ICorProfilerObjectEnum_FWD_DEFINED__
#define __ICorProfilerObjectEnum_FWD_DEFINED__
typedef interface ICorProfilerObjectEnum ICorProfilerObjectEnum;

#endif 	/* __ICorProfilerObjectEnum_FWD_DEFINED__ */


#ifndef __ICorProfilerFunctionEnum_FWD_DEFINED__
#define __ICorProfilerFunctionEnum_FWD_DEFINED__
typedef interface ICorProfilerFunctionEnum ICorProfilerFunctionEnum;

#endif 	/* __ICorProfilerFunctionEnum_FWD_DEFINED__ */


#ifndef __ICorProfilerModuleEnum_FWD_DEFINED__
#define __ICorProfilerModuleEnum_FWD_DEFINED__
typedef interface ICorProfilerModuleEnum ICorProfilerModuleEnum;

#endif 	/* __ICorProfilerModuleEnum_FWD_DEFINED__ */


#ifndef __IMethodMalloc_FWD_DEFINED__
#define __IMethodMalloc_FWD_DEFINED__
typedef interface IMethodMalloc IMethodMalloc;

#endif 	/* __IMethodMalloc_FWD_DEFINED__ */


#ifndef __ICorProfilerFunctionControl_FWD_DEFINED__
#define __ICorProfilerFunctionControl_FWD_DEFINED__
typedef interface ICorProfilerFunctionControl ICorProfilerFunctionControl;

#endif 	/* __ICorProfilerFunctionControl_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo4_FWD_DEFINED__
#define __ICorProfilerInfo4_FWD_DEFINED__
typedef interface ICorProfilerInfo4 ICorProfilerInfo4;

#endif 	/* __ICorProfilerInfo4_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo5_FWD_DEFINED__
#define __ICorProfilerInfo5_FWD_DEFINED__
typedef interface ICorProfilerInfo5 ICorProfilerInfo5;

#endif 	/* __ICorProfilerInfo5_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo6_FWD_DEFINED__
#define __ICorProfilerInfo6_FWD_DEFINED__
typedef interface ICorProfilerInfo6 ICorProfilerInfo6;

#endif 	/* __ICorProfilerInfo6_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo7_FWD_DEFINED__
#define __ICorProfilerInfo7_FWD_DEFINED__
typedef interface ICorProfilerInfo7 ICorProfilerInfo7;

#endif 	/* __ICorProfilerInfo7_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo8_FWD_DEFINED__
#define __ICorProfilerInfo8_FWD_DEFINED__
typedef interface ICorProfilerInfo8 ICorProfilerInfo8;

#endif 	/* __ICorProfilerInfo8_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo9_FWD_DEFINED__
#define __ICorProfilerInfo9_FWD_DEFINED__
typedef interface ICorProfilerInfo9 ICorProfilerInfo9;

#endif 	/* __ICorProfilerInfo9_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo10_FWD_DEFINED__
#define __ICorProfilerInfo10_FWD_DEFINED__
typedef interface ICorProfilerInfo10 ICorProfilerInfo10;

#endif 	/* __ICorProfilerInfo10_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo11_FWD_DEFINED__
#define __ICorProfilerInfo11_FWD_DEFINED__
typedef interface ICorProfilerInfo11 ICorProfilerInfo11;

#endif 	/* __ICorProfilerInfo11_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo12_FWD_DEFINED__
#define __ICorProfilerInfo12_FWD_DEFINED__
typedef interface ICorProfilerInfo12 ICorProfilerInfo12;

#endif 	/* __ICorProfilerInfo12_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo13_FWD_DEFINED__
#define __ICorProfilerInfo13_FWD_DEFINED__
typedef interface ICorProfilerInfo13 ICorProfilerInfo13;

#endif 	/* __ICorProfilerInfo13_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo14_FWD_DEFINED__
#define __ICorProfilerInfo14_FWD_DEFINED__
typedef interface ICorProfilerInfo14 ICorProfilerInfo14;

#endif 	/* __ICorProfilerInfo14_FWD_DEFINED__ */


#ifndef __ICorProfilerInfo15_FWD_DEFINED__
#define __ICorProfilerInfo15_FWD_DEFINED__
typedef interface ICorProfilerInfo15 ICorProfilerInfo15;

#endif 	/* __ICorProfilerInfo15_FWD_DEFINED__ */


#ifndef __ICorProfilerMethodEnum_FWD_DEFINED__
#define __ICorProfilerMethodEnum_FWD_DEFINED__
typedef interface ICorProfilerMethodEnum ICorProfilerMethodEnum;

#endif 	/* __ICorProfilerMethodEnum_FWD_DEFINED__ */


#ifndef __ICorProfilerThreadEnum_FWD_DEFINED__
#define __ICorProfilerThreadEnum_FWD_DEFINED__
typedef interface ICorProfilerThreadEnum ICorProfilerThreadEnum;

#endif 	/* __ICorProfilerThreadEnum_FWD_DEFINED__ */


#ifndef __ICorProfilerAssemblyReferenceProvider_FWD_DEFINED__
#define __ICorProfilerAssemblyReferenceProvider_FWD_DEFINED__
typedef interface ICorProfilerAssemblyReferenceProvider ICorProfilerAssemblyReferenceProvider;

#endif 	/* __ICorProfilerAssemblyReferenceProvider_FWD_DEFINED__ */


/* header files for imported files */
#include "unknwn.h"

#ifdef __cplusplus
extern "C"{
#endif 


/* interface __MIDL_itf_corprof_0000_0000 */
/* [local] */ 

#if 0
typedef LONG32 mdToken;

typedef mdToken mdModule;

typedef mdToken mdTypeDef;

typedef mdToken mdMethodDef;

typedef mdToken mdFieldDef;

typedef ULONG CorElementType;


typedef /* [public][public][public][public] */ struct __MIDL___MIDL_itf_corprof_0000_0000_0001
    {
    DWORD dwOSPlatformId;
    DWORD dwOSMajorVersion;
    DWORD dwOSMinorVersion;
    } 	OSINFO;

typedef /* [public][public][public] */ struct __MIDL___MIDL_itf_corprof_0000_0000_0002
    {
    USHORT usMajorVersion;
    USHORT usMinorVersion;
    USHORT usBuildNumber;
    USHORT usRevisionNumber;
    LPWSTR szLocale;
    ULONG cbLocale;
    DWORD *rProcessor;
    ULONG ulProcessor;
    OSINFO *rOS;
    ULONG ulOS;
    } 	ASSEMBLYMETADATA;

#endif
typedef const BYTE *LPCBYTE;

typedef BYTE *LPBYTE;

typedef BYTE COR_SIGNATURE;

typedef COR_SIGNATURE *PCOR_SIGNATURE;

typedef const COR_SIGNATURE *PCCOR_SIGNATURE;

#ifndef _COR_IL_MAP
#define _COR_IL_MAP
typedef struct _COR_IL_MAP
    {
    ULONG32 oldOffset;
    ULONG32 newOffset;
    BOOL fAccurate;
    } 	COR_IL_MAP;

#endif //_COR_IL_MAP
#ifndef _COR_DEBUG_IL_TO_NATIVE_MAP_
#define _COR_DEBUG_IL_TO_NATIVE_MAP_
typedef 
enum CorDebugIlToNativeMappingTypes
    {
        NO_MAPPING	= -1,
        PROLOG	= -2,
        EPILOG	= -3
    } 	CorDebugIlToNativeMappingTypes;

typedef struct COR_DEBUG_IL_TO_NATIVE_MAP
    {
    ULONG32 ilOffset;
    ULONG32 nativeStartOffset;
    ULONG32 nativeEndOffset;
    } 	COR_DEBUG_IL_TO_NATIVE_MAP;

#endif // _COR_DEBUG_IL_TO_NATIVE_MAP_
#ifndef _COR_FIELD_OFFSET_
#define _COR_FIELD_OFFSET_
typedef struct _COR_FIELD_OFFSET
    {
    mdFieldDef ridOfField;
    ULONG ulOffset;
    } 	COR_FIELD_OFFSET;

#endif // _COR_FIELD_OFFSET_
typedef UINT_PTR ProcessID;

typedef UINT_PTR AssemblyID;

typedef UINT_PTR AppDomainID;

typedef UINT_PTR ModuleID;

typedef UINT_PTR ClassID;

typedef UINT_PTR ThreadID;

typedef UINT_PTR ContextID;

typedef UINT_PTR FunctionID;

typedef UINT_PTR ObjectID;

typedef UINT_PTR GCHandleID;

typedef UINT_PTR COR_PRF_ELT_INFO;

typedef UINT_PTR ReJITID;

typedef /* [public][public][public][public][public][public][public][public][public][public][public][public][public] */ union __MIDL___MIDL_itf_corprof_0000_0000_0003
    {
    FunctionID functionID;
    UINT_PTR clientID;
    } 	FunctionIDOrClientID;

typedef UINT_PTR __stdcall __stdcall FunctionIDMapper( 
    FunctionID funcId,
    BOOL *pbHookFunction);

typedef UINT_PTR __stdcall __stdcall FunctionIDMapper2( 
    FunctionID funcId,
    void *clientData,
    BOOL *pbHookFunction);

typedef 
enum _COR_PRF_SNAPSHOT_INFO
    {
        COR_PRF_SNAPSHOT_DEFAULT	= 0,
        COR_PRF_SNAPSHOT_REGISTER_CONTEXT	= 0x1,
        COR_PRF_SNAPSHOT_X86_OPTIMIZED	= 0x2
    } 	COR_PRF_SNAPSHOT_INFO;

typedef UINT_PTR COR_PRF_FRAME_INFO;

typedef struct _COR_PRF_FUNCTION_ARGUMENT_RANGE
    {
    UINT_PTR startAddress;
    ULONG length;
    } 	COR_PRF_FUNCTION_ARGUMENT_RANGE;

typedef struct _COR_PRF_FUNCTION_ARGUMENT_INFO
    {
    ULONG numRanges;
    ULONG totalArgumentSize;
    COR_PRF_FUNCTION_ARGUMENT_RANGE ranges[ 1 ];
    } 	COR_PRF_FUNCTION_ARGUMENT_INFO;

typedef struct _COR_PRF_CODE_INFO
    {
    UINT_PTR startAddress;
    SIZE_T size;
    } 	COR_PRF_CODE_INFO;

typedef /* [public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0004
    {
        COR_PRF_FIELD_NOT_A_STATIC	= 0,
        COR_PRF_FIELD_APP_DOMAIN_STATIC	= 0x1,
        COR_PRF_FIELD_THREAD_STATIC	= 0x2,
        COR_PRF_FIELD_CONTEXT_STATIC	= 0x4,
        COR_PRF_FIELD_RVA_STATIC	= 0x8
    } 	COR_PRF_STATIC_TYPE;

typedef struct _COR_PRF_FUNCTION
    {
    FunctionID functionId;
    ReJITID reJitId;
    } 	COR_PRF_FUNCTION;

typedef struct _COR_PRF_ASSEMBLY_REFERENCE_INFO
    {
    void *pbPublicKeyOrToken;
    ULONG cbPublicKeyOrToken;
    LPCWSTR szName;
    ASSEMBLYMETADATA *pMetaData;
    void *pbHashValue;
    ULONG cbHashValue;
    DWORD dwAssemblyRefFlags;
    } 	COR_PRF_ASSEMBLY_REFERENCE_INFO;

typedef struct _COR_PRF_METHOD
    {
    ModuleID moduleId;
    mdMethodDef methodId;
    } 	COR_PRF_METHOD;

typedef void FunctionEnter( 
    FunctionID funcID);

typedef void FunctionLeave( 
    FunctionID funcID);

typedef void FunctionTailcall( 
    FunctionID funcID);

typedef void FunctionEnter2( 
    FunctionID funcId,
    UINT_PTR clientData,
    COR_PRF_FRAME_INFO func,
    COR_PRF_FUNCTION_ARGUMENT_INFO *argumentInfo);

typedef void FunctionLeave2( 
    FunctionID funcId,
    UINT_PTR clientData,
    COR_PRF_FRAME_INFO func,
    COR_PRF_FUNCTION_ARGUMENT_RANGE *retvalRange);

typedef void FunctionTailcall2( 
    FunctionID funcId,
    UINT_PTR clientData,
    COR_PRF_FRAME_INFO func);

typedef void FunctionEnter3( 
    FunctionIDOrClientID functionIDOrClientID);

typedef void FunctionLeave3( 
    FunctionIDOrClientID functionIDOrClientID);

typedef void FunctionTailcall3( 
    FunctionIDOrClientID functionIDOrClientID);

typedef void FunctionEnter3WithInfo( 
    FunctionIDOrClientID functionIDOrClientID,
    COR_PRF_ELT_INFO eltInfo);

typedef void FunctionLeave3WithInfo( 
    FunctionIDOrClientID functionIDOrClientID,
    COR_PRF_ELT_INFO eltInfo);

typedef void FunctionTailcall3WithInfo( 
    FunctionIDOrClientID functionIDOrClientID,
    COR_PRF_ELT_INFO eltInfo);

typedef HRESULT __stdcall __stdcall StackSnapshotCallback( 
    FunctionID funcId,
    UINT_PTR ip,
    COR_PRF_FRAME_INFO frameInfo,
    ULONG32 contextSize,
    BYTE context[  ],
    void *clientData);

typedef BOOL ObjectReferenceCallback( 
    ObjectID root,
    ObjectID *reference,
    void *clientData);

typedef /* [public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0005
    {
        COR_PRF_MONITOR_NONE	= 0,
        COR_PRF_MONITOR_FUNCTION_UNLOADS	= 0x1,
        COR_PRF_MONITOR_CLASS_LOADS	= 0x2,
        COR_PRF_MONITOR_MODULE_LOADS	= 0x4,
        COR_PRF_MONITOR_ASSEMBLY_LOADS	= 0x8,
        COR_PRF_MONITOR_APPDOMAIN_LOADS	= 0x10,
        COR_PRF_MONITOR_JIT_COMPILATION	= 0x20,
        COR_PRF_MONITOR_EXCEPTIONS	= 0x40,
        COR_PRF_MONITOR_GC	= 0x80,
        COR_PRF_MONITOR_OBJECT_ALLOCATED	= 0x100,
        COR_PRF_MONITOR_THREADS	= 0x200,
        COR_PRF_MONITOR_REMOTING	= 0x400,
        COR_PRF_MONITOR_CODE_TRANSITIONS	= 0x800,
        COR_PRF_MONITOR_ENTERLEAVE	= 0x1000,
        COR_PRF_MONITOR_CCW	= 0x2000,
        COR_PRF_MONITOR_REMOTING_COOKIE	= ( 0x4000 | COR_PRF_MONITOR_REMOTING ) ,
        COR_PRF_MONITOR_REMOTING_ASYNC	= ( 0x8000 | COR_PRF_MONITOR_REMOTING ) ,
        COR_PRF_MONITOR_SUSPENDS	= 0x10000,
        COR_PRF_MONITOR_CACHE_SEARCHES	= 0x20000,
        COR_PRF_ENABLE_REJIT	= 0x40000,
        COR_PRF_ENABLE_INPROC_DEBUGGING	= 0x80000,
        COR_PRF_ENABLE_JIT_MAPS	= 0x100000,
        COR_PRF_DISABLE_INLINING	= 0x200000,
        COR_PRF_DISABLE_OPTIMIZATIONS	= 0x400000,
        COR_PRF_ENABLE_OBJECT_ALLOCATED	= 0x800000,
        COR_PRF_MONITOR_CLR_EXCEPTIONS	= 0x1000000,
        COR_PRF_MONITOR_ALL	= 0x107ffff,
        COR_PRF_ENABLE_FUNCTION_ARGS	= 0x2000000,
        COR_PRF_ENABLE_FUNCTION_RETVAL	= 0x4000000,
        COR_PRF_ENABLE_FRAME_INFO	= 0x8000000,
        COR_PRF_ENABLE_STACK_SNAPSHOT	= 0x10000000,
        COR_PRF_USE_PROFILE_IMAGES	= 0x20000000,
        COR_PRF_DISABLE_TRANSPARENCY_CHECKS_UNDER_FULL_TRUST	= 0x40000000,
        COR_PRF_DISABLE_ALL_NGEN_IMAGES	= 0x80000000,
        COR_PRF_ALL	= 0x8fffffff,
        COR_PRF_REQUIRE_PROFILE_IMAGE	= ( ( COR_PRF_USE_PROFILE_IMAGES | COR_PRF_MONITOR_CODE_TRANSITIONS )  | COR_PRF_MONITOR_ENTERLEAVE ) ,
        COR_PRF_ALLOWABLE_AFTER_ATTACH	= ( ( ( ( ( ( ( ( ( ( COR_PRF_MONITOR_THREADS | COR_PRF_MONITOR_MODULE_LOADS )  | COR_PRF_MONITOR_ASSEMBLY_LOADS )  | COR_PRF_MONITOR_APPDOMAIN_LOADS )  | COR_PRF_ENABLE_STACK_SNAPSHOT )  | COR_PRF_MONITOR_GC )  | COR_PRF_MONITOR_SUSPENDS )  | COR_PRF_MONITOR_CLASS_LOADS )  | COR_PRF_MONITOR_EXCEPTIONS )  | COR_PRF_MONITOR_JIT_COMPILATION )  | COR_PRF_ENABLE_REJIT ) ,
        COR_PRF_ALLOWABLE_NOTIFICATION_PROFILER	= ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( COR_PRF_MONITOR_FUNCTION_UNLOADS | COR_PRF_MONITOR_CLASS_LOADS )  | COR_PRF_MONITOR_MODULE_LOADS )  | COR_PRF_MONITOR_ASSEMBLY_LOADS )  | COR_PRF_MONITOR_APPDOMAIN_LOADS )  | COR_PRF_MONITOR_JIT_COMPILATION )  | COR_PRF_MONITOR_EXCEPTIONS )  | COR_PRF_MONITOR_OBJECT_ALLOCATED )  | COR_PRF_MONITOR_THREADS )  | COR_PRF_MONITOR_CODE_TRANSITIONS )  | COR_PRF_MONITOR_CCW )  | COR_PRF_MONITOR_SUSPENDS )  | COR_PRF_MONITOR_CACHE_SEARCHES )  | COR_PRF_DISABLE_INLINING )  | COR_PRF_DISABLE_OPTIMIZATIONS )  | COR_PRF_ENABLE_OBJECT_ALLOCATED )  | COR_PRF_MONITOR_CLR_EXCEPTIONS )  | COR_PRF_ENABLE_STACK_SNAPSHOT )  | COR_PRF_USE_PROFILE_IMAGES )  | COR_PRF_DISABLE_ALL_NGEN_IMAGES ) ,
        COR_PRF_MONITOR_IMMUTABLE	= ( ( ( ( ( ( ( ( ( ( ( ( ( ( COR_PRF_MONITOR_CODE_TRANSITIONS | COR_PRF_MONITOR_REMOTING )  | COR_PRF_MONITOR_REMOTING_COOKIE )  | COR_PRF_MONITOR_REMOTING_ASYNC )  | COR_PRF_ENABLE_INPROC_DEBUGGING )  | COR_PRF_ENABLE_JIT_MAPS )  | COR_PRF_DISABLE_OPTIMIZATIONS )  | COR_PRF_DISABLE_INLINING )  | COR_PRF_ENABLE_OBJECT_ALLOCATED )  | COR_PRF_ENABLE_FUNCTION_ARGS )  | COR_PRF_ENABLE_FUNCTION_RETVAL )  | COR_PRF_ENABLE_FRAME_INFO )  | COR_PRF_USE_PROFILE_IMAGES )  | COR_PRF_DISABLE_TRANSPARENCY_CHECKS_UNDER_FULL_TRUST )  | COR_PRF_DISABLE_ALL_NGEN_IMAGES ) 
    } 	COR_PRF_MONITOR;

typedef /* [public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0006
    {
        COR_PRF_HIGH_MONITOR_NONE	= 0,
        COR_PRF_HIGH_ADD_ASSEMBLY_REFERENCES	= 0x1,
        COR_PRF_HIGH_IN_MEMORY_SYMBOLS_UPDATED	= 0x2,
        COR_PRF_HIGH_MONITOR_DYNAMIC_FUNCTION_UNLOADS	= 0x4,
        COR_PRF_HIGH_DISABLE_TIERED_COMPILATION	= 0x8,
        COR_PRF_HIGH_BASIC_GC	= 0x10,
        COR_PRF_HIGH_MONITOR_GC_MOVED_OBJECTS	= 0x20,
        COR_PRF_HIGH_REQUIRE_PROFILE_IMAGE	= 0,
        COR_PRF_HIGH_MONITOR_LARGEOBJECT_ALLOCATED	= 0x40,
        COR_PRF_HIGH_MONITOR_EVENT_PIPE	= 0x80,
        COR_PRF_HIGH_MONITOR_PINNEDOBJECT_ALLOCATED	= 0x100,
        COR_PRF_HIGH_ALLOWABLE_AFTER_ATTACH	= ( ( ( ( ( COR_PRF_HIGH_IN_MEMORY_SYMBOLS_UPDATED | COR_PRF_HIGH_MONITOR_DYNAMIC_FUNCTION_UNLOADS )  | COR_PRF_HIGH_BASIC_GC )  | COR_PRF_HIGH_MONITOR_GC_MOVED_OBJECTS )  | COR_PRF_HIGH_MONITOR_LARGEOBJECT_ALLOCATED )  | COR_PRF_HIGH_MONITOR_EVENT_PIPE ) ,
        COR_PRF_HIGH_ALLOWABLE_NOTIFICATION_PROFILER	= ( ( ( ( ( ( COR_PRF_HIGH_IN_MEMORY_SYMBOLS_UPDATED | COR_PRF_HIGH_MONITOR_DYNAMIC_FUNCTION_UNLOADS )  | COR_PRF_HIGH_DISABLE_TIERED_COMPILATION )  | COR_PRF_HIGH_BASIC_GC )  | COR_PRF_HIGH_MONITOR_GC_MOVED_OBJECTS )  | COR_PRF_HIGH_MONITOR_LARGEOBJECT_ALLOCATED )  | COR_PRF_HIGH_MONITOR_EVENT_PIPE ) ,
        COR_PRF_HIGH_MONITOR_IMMUTABLE	= COR_PRF_HIGH_DISABLE_TIERED_COMPILATION
    } 	COR_PRF_HIGH_MONITOR;

typedef /* [public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0007
    {
        PROFILER_PARENT_UNKNOWN	= 0xfffffffd,
        PROFILER_GLOBAL_CLASS	= 0xfffffffe,
        PROFILER_GLOBAL_MODULE	= 0xffffffff
    } 	COR_PRF_MISC;

typedef /* [public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0008
    {
        COR_PRF_CACHED_FUNCTION_FOUND	= 0,
        COR_PRF_CACHED_FUNCTION_NOT_FOUND	= ( COR_PRF_CACHED_FUNCTION_FOUND + 1 ) 
    } 	COR_PRF_JIT_CACHE;

typedef /* [public][public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0009
    {
        COR_PRF_TRANSITION_CALL	= 0,
        COR_PRF_TRANSITION_RETURN	= ( COR_PRF_TRANSITION_CALL + 1 ) 
    } 	COR_PRF_TRANSITION_REASON;

typedef /* [public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0010
    {
        COR_PRF_SUSPEND_OTHER	= 0,
        COR_PRF_SUSPEND_FOR_GC	= 1,
        COR_PRF_SUSPEND_FOR_APPDOMAIN_SHUTDOWN	= 2,
        COR_PRF_SUSPEND_FOR_CODE_PITCHING	= 3,
        COR_PRF_SUSPEND_FOR_SHUTDOWN	= 4,
        COR_PRF_SUSPEND_FOR_INPROC_DEBUGGER	= 6,
        COR_PRF_SUSPEND_FOR_GC_PREP	= 7,
        COR_PRF_SUSPEND_FOR_REJIT	= 8,
        COR_PRF_SUSPEND_FOR_PROFILER	= 9
    } 	COR_PRF_SUSPEND_REASON;

typedef /* [public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0011
    {
        COR_PRF_DESKTOP_CLR	= 0x1,
        COR_PRF_CORE_CLR	= 0x2
    } 	COR_PRF_RUNTIME_TYPE;

typedef /* [public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0012
    {
        COR_PRF_REJIT_BLOCK_INLINING	= 0x1,
        COR_PRF_REJIT_INLINING_CALLBACKS	= 0x2
    } 	COR_PRF_REJIT_FLAGS;

typedef UINT_PTR EVENTPIPE_PROVIDER;

typedef UINT_PTR EVENTPIPE_EVENT;

typedef UINT64 EVENTPIPE_SESSION;

typedef /* [public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0013
    {
        COR_PRF_EVENTPIPE_OBJECT	= 1,
        COR_PRF_EVENTPIPE_BOOLEAN	= 3,
        COR_PRF_EVENTPIPE_CHAR	= 4,
        COR_PRF_EVENTPIPE_SBYTE	= 5,
        COR_PRF_EVENTPIPE_BYTE	= 6,
        COR_PRF_EVENTPIPE_INT16	= 7,
        COR_PRF_EVENTPIPE_UINT16	= 8,
        COR_PRF_EVENTPIPE_INT32	= 9,
        COR_PRF_EVENTPIPE_UINT32	= 10,
        COR_PRF_EVENTPIPE_INT64	= 11,
        COR_PRF_EVENTPIPE_UINT64	= 12,
        COR_PRF_EVENTPIPE_SINGLE	= 13,
        COR_PRF_EVENTPIPE_DOUBLE	= 14,
        COR_PRF_EVENTPIPE_DECIMAL	= 15,
        COR_PRF_EVENTPIPE_DATETIME	= 16,
        COR_PRF_EVENTPIPE_GUID	= 17,
        COR_PRF_EVENTPIPE_STRING	= 18,
        COR_PRF_EVENTPIPE_ARRAY	= 19
    } 	COR_PRF_EVENTPIPE_PARAM_TYPE;

typedef /* [public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0000_0014
    {
        COR_PRF_EVENTPIPE_LOGALWAYS	= 0,
        COR_PRF_EVENTPIPE_CRITICAL	= 1,
        COR_PRF_EVENTPIPE_ERROR	= 2,
        COR_PRF_EVENTPIPE_WARNING	= 3,
        COR_PRF_EVENTPIPE_INFORMATIONAL	= 4,
        COR_PRF_EVENTPIPE_VERBOSE	= 5
    } 	COR_PRF_EVENTPIPE_LEVEL;

typedef /* [public][public][public] */ struct __MIDL___MIDL_itf_corprof_0000_0000_0015
    {
    const WCHAR *providerName;
    UINT64 keywords;
    UINT32 loggingLevel;
    const WCHAR *filterData;
    } 	COR_PRF_EVENTPIPE_PROVIDER_CONFIG;

typedef /* [public][public] */ struct __MIDL___MIDL_itf_corprof_0000_0000_0016
    {
    UINT32 type;
    UINT32 elementType;
    const WCHAR *name;
    } 	COR_PRF_EVENTPIPE_PARAM_DESC;

typedef /* [public][public] */ struct __MIDL___MIDL_itf_corprof_0000_0000_0017
    {
    UINT64 ptr;
    UINT32 size;
    UINT32 reserved;
    } 	COR_PRF_EVENT_DATA;

typedef /* [public][public][public] */ struct __MIDL___MIDL_itf_corprof_0000_0000_0018
    {
    UINT64 Ptr;
    UINT32 Size;
    UINT32 Type;
    } 	COR_PRF_FILTER_DATA;

typedef void EventPipeProviderCallback( 
    const UINT8 *source_id,
    UINT32 is_enabled,
    UINT8 level,
    UINT64 match_any_keywords,
    UINT64 match_all_keywords,
    COR_PRF_FILTER_DATA *filter_data,
    void *callback_data);

typedef 
enum _COR_PRF_HANDLE_TYPE
    {
        COR_PRF_HANDLE_TYPE_WEAK	= 0x1,
        COR_PRF_HANDLE_TYPE_STRONG	= 0x2,
        COR_PRF_HANDLE_TYPE_PINNED	= 0x3
    } 	COR_PRF_HANDLE_TYPE;

typedef void **ObjectHandleID;

typedef BOOL ( *ObjectCallback )( 
    ObjectID object,
    void *callbackState);



















extern RPC_IF_HANDLE __MIDL_itf_corprof_0000_0000_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_corprof_0000_0000_v0_0_s_ifspec;

#ifndef __ICorProfilerCallback_INTERFACE_DEFINED__
#define __ICorProfilerCallback_INTERFACE_DEFINED__

/* interface ICorProfilerCallback */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("176FBED1-A55C-4796-98CA-A9DA0EF883E7")
    ICorProfilerCallback : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Initialize( 
            /* [in] */ IUnknown *pICorProfilerInfoUnk) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Shutdown( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AppDomainCreationStarted( 
            /* [in] */ AppDomainID appDomainId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AppDomainCreationFinished( 
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AppDomainShutdownStarted( 
            /* [in] */ AppDomainID appDomainId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AppDomainShutdownFinished( 
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AssemblyLoadStarted( 
            /* [in] */ AssemblyID assemblyId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AssemblyLoadFinished( 
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AssemblyUnloadStarted( 
            /* [in] */ AssemblyID assemblyId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE AssemblyUnloadFinished( 
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ModuleLoadStarted( 
            /* [in] */ ModuleID moduleId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ModuleLoadFinished( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ModuleUnloadStarted( 
            /* [in] */ ModuleID moduleId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ModuleUnloadFinished( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ModuleAttachedToAssembly( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ClassLoadStarted( 
            /* [in] */ ClassID classId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ClassLoadFinished( 
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ClassUnloadStarted( 
            /* [in] */ ClassID classId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ClassUnloadFinished( 
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE FunctionUnloadStarted( 
            /* [in] */ FunctionID functionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE JITCompilationStarted( 
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE JITCompilationFinished( 
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE JITCachedFunctionSearchStarted( 
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE JITCachedFunctionSearchFinished( 
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE JITFunctionPitched( 
            /* [in] */ FunctionID functionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE JITInlining( 
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ThreadCreated( 
            /* [in] */ ThreadID threadId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ThreadDestroyed( 
            /* [in] */ ThreadID threadId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ThreadAssignedToOSThread( 
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemotingClientInvocationStarted( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemotingClientSendingMessage( 
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemotingClientReceivingReply( 
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemotingClientInvocationFinished( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemotingServerReceivingMessage( 
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemotingServerInvocationStarted( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemotingServerInvocationReturned( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RemotingServerSendingReply( 
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE UnmanagedToManagedTransition( 
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ManagedToUnmanagedTransition( 
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RuntimeSuspendStarted( 
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RuntimeSuspendFinished( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RuntimeSuspendAborted( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RuntimeResumeStarted( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RuntimeResumeFinished( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RuntimeThreadSuspended( 
            /* [in] */ ThreadID threadId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RuntimeThreadResumed( 
            /* [in] */ ThreadID threadId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE MovedReferences( 
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ObjectAllocated( 
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ObjectsAllocatedByClass( 
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ObjectReferences( 
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RootReferences( 
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionThrown( 
            /* [in] */ ObjectID thrownObjectId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionSearchFunctionEnter( 
            /* [in] */ FunctionID functionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionSearchFunctionLeave( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionSearchFilterEnter( 
            /* [in] */ FunctionID functionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionSearchFilterLeave( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionSearchCatcherFound( 
            /* [in] */ FunctionID functionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionOSHandlerEnter( 
            /* [in] */ UINT_PTR __unused) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionOSHandlerLeave( 
            /* [in] */ UINT_PTR __unused) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionUnwindFunctionEnter( 
            /* [in] */ FunctionID functionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionUnwindFunctionLeave( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionUnwindFinallyEnter( 
            /* [in] */ FunctionID functionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionUnwindFinallyLeave( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionCatcherEnter( 
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionCatcherLeave( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE COMClassicVTableCreated( 
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE COMClassicVTableDestroyed( 
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionCLRCatcherFound( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ExceptionCLRCatcherExecute( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallbackVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback * This);
        
        END_INTERFACE
    } ICorProfilerCallbackVtbl;

    interface ICorProfilerCallback
    {
        CONST_VTBL struct ICorProfilerCallbackVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_corprof_0000_0001 */
/* [local] */ 

typedef /* [public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0001_0001
    {
        COR_PRF_GC_ROOT_STACK	= 1,
        COR_PRF_GC_ROOT_FINALIZER	= 2,
        COR_PRF_GC_ROOT_HANDLE	= 3,
        COR_PRF_GC_ROOT_OTHER	= 0
    } 	COR_PRF_GC_ROOT_KIND;

typedef /* [public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0001_0002
    {
        COR_PRF_GC_ROOT_PINNING	= 0x1,
        COR_PRF_GC_ROOT_WEAKREF	= 0x2,
        COR_PRF_GC_ROOT_INTERIOR	= 0x4,
        COR_PRF_GC_ROOT_REFCOUNTED	= 0x8
    } 	COR_PRF_GC_ROOT_FLAGS;

typedef /* [public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0001_0003
    {
        COR_PRF_FINALIZER_CRITICAL	= 0x1
    } 	COR_PRF_FINALIZER_FLAGS;

typedef /* [public][public][public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0001_0004
    {
        COR_PRF_GC_GEN_0	= 0,
        COR_PRF_GC_GEN_1	= 1,
        COR_PRF_GC_GEN_2	= 2,
        COR_PRF_GC_LARGE_OBJECT_HEAP	= 3,
        COR_PRF_GC_PINNED_OBJECT_HEAP	= 4
    } 	COR_PRF_GC_GENERATION;

typedef struct COR_PRF_GC_GENERATION_RANGE
    {
    COR_PRF_GC_GENERATION generation;
    ObjectID rangeStart;
    UINT_PTR rangeLength;
    UINT_PTR rangeLengthReserved;
    } 	COR_PRF_GC_GENERATION_RANGE;

typedef struct COR_PRF_NONGC_HEAP_RANGE
    {
    ObjectID rangeStart;
    UINT_PTR rangeLength;
    UINT_PTR rangeLengthReserved;
    } 	COR_PRF_NONGC_HEAP_RANGE;

typedef /* [public][public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0001_0005
    {
        COR_PRF_CLAUSE_NONE	= 0,
        COR_PRF_CLAUSE_FILTER	= 1,
        COR_PRF_CLAUSE_CATCH	= 2,
        COR_PRF_CLAUSE_FINALLY	= 3
    } 	COR_PRF_CLAUSE_TYPE;

typedef struct COR_PRF_EX_CLAUSE_INFO
    {
    COR_PRF_CLAUSE_TYPE clauseType;
    UINT_PTR programCounter;
    UINT_PTR framePointer;
    UINT_PTR shadowStackPointer;
    } 	COR_PRF_EX_CLAUSE_INFO;

typedef /* [public][public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0001_0006
    {
        COR_PRF_GC_INDUCED	= 1,
        COR_PRF_GC_OTHER	= 0
    } 	COR_PRF_GC_REASON;

typedef /* [public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0001_0007
    {
        COR_PRF_MODULE_DISK	= 0x1,
        COR_PRF_MODULE_NGEN	= 0x2,
        COR_PRF_MODULE_DYNAMIC	= 0x4,
        COR_PRF_MODULE_COLLECTIBLE	= 0x8,
        COR_PRF_MODULE_RESOURCE	= 0x10,
        COR_PRF_MODULE_FLAT_LAYOUT	= 0x20,
        COR_PRF_MODULE_WINDOWS_RUNTIME	= 0x40
    } 	COR_PRF_MODULE_FLAGS;



extern RPC_IF_HANDLE __MIDL_itf_corprof_0000_0001_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_corprof_0000_0001_v0_0_s_ifspec;

#ifndef __ICorProfilerCallback2_INTERFACE_DEFINED__
#define __ICorProfilerCallback2_INTERFACE_DEFINED__

/* interface ICorProfilerCallback2 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("8A8CC829-CCF2-49fe-BBAE-0F022228071A")
    ICorProfilerCallback2 : public ICorProfilerCallback
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE ThreadNameChanged( 
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GarbageCollectionStarted( 
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SurvivingReferences( 
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GarbageCollectionFinished( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE FinalizeableObjectQueued( 
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RootReferences2( 
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE HandleCreated( 
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE HandleDestroyed( 
            /* [in] */ GCHandleID handleId) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback2Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback2 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback2 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback2 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback2 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback2 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback2 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback2 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback2 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback2 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback2 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback2 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback2 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback2 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback2 * This,
            /* [in] */ GCHandleID handleId);
        
        END_INTERFACE
    } ICorProfilerCallback2Vtbl;

    interface ICorProfilerCallback2
    {
        CONST_VTBL struct ICorProfilerCallback2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback2_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback2_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback2_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback2_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback2_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback2_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback2_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback2_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback2_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback2_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback2_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback2_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback2_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback2_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback2_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback2_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback2_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback2_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback2_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback2_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback2_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback2_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback2_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback2_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback2_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback2_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback2_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback2_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback2_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback2_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback2_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback2_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback2_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback2_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback2_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback2_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback2_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback2_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback2_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback2_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback2_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback2_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback2_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback2_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback2_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback2_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback2_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback2_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback2_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback2_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback2_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback2_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback2_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback2_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback2_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback2_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback2_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback2_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback2_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback2_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback2_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback2_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback2_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback2_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback2_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback2_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback2_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback2_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback2_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback2_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback2_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback2_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback2_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback2_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback2_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback2_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback2_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback2_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerCallback3_INTERFACE_DEFINED__
#define __ICorProfilerCallback3_INTERFACE_DEFINED__

/* interface ICorProfilerCallback3 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback3;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("4FD2ED52-7731-4b8d-9469-03D2CC3086C5")
    ICorProfilerCallback3 : public ICorProfilerCallback2
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE InitializeForAttach( 
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ProfilerAttachComplete( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ProfilerDetachSucceeded( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback3Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback3 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback3 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback3 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback3 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback3 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback3 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback3 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback3 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback3 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback3 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback3 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback3 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback3 * This,
            /* [in] */ GCHandleID handleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, InitializeForAttach)
        HRESULT ( STDMETHODCALLTYPE *InitializeForAttach )( 
            ICorProfilerCallback3 * This,
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerAttachComplete)
        HRESULT ( STDMETHODCALLTYPE *ProfilerAttachComplete )( 
            ICorProfilerCallback3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerDetachSucceeded)
        HRESULT ( STDMETHODCALLTYPE *ProfilerDetachSucceeded )( 
            ICorProfilerCallback3 * This);
        
        END_INTERFACE
    } ICorProfilerCallback3Vtbl;

    interface ICorProfilerCallback3
    {
        CONST_VTBL struct ICorProfilerCallback3Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback3_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback3_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback3_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback3_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback3_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback3_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback3_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback3_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback3_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback3_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback3_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback3_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback3_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback3_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback3_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback3_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback3_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback3_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback3_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback3_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback3_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback3_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback3_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback3_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback3_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback3_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback3_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback3_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback3_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback3_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback3_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback3_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback3_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback3_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback3_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback3_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback3_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback3_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback3_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback3_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback3_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback3_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback3_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback3_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback3_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback3_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback3_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback3_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback3_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback3_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback3_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback3_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback3_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback3_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback3_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback3_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback3_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback3_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback3_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback3_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback3_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback3_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback3_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback3_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback3_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback3_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback3_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback3_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback3_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback3_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback3_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback3_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback3_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback3_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback3_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback3_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback3_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback3_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback3_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback3_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 


#define ICorProfilerCallback3_InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData)	\
    ( (This)->lpVtbl -> InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData) ) 

#define ICorProfilerCallback3_ProfilerAttachComplete(This)	\
    ( (This)->lpVtbl -> ProfilerAttachComplete(This) ) 

#define ICorProfilerCallback3_ProfilerDetachSucceeded(This)	\
    ( (This)->lpVtbl -> ProfilerDetachSucceeded(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback3_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerCallback4_INTERFACE_DEFINED__
#define __ICorProfilerCallback4_INTERFACE_DEFINED__

/* interface ICorProfilerCallback4 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback4;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("7B63B2E3-107D-4d48-B2F6-F61E229470D2")
    ICorProfilerCallback4 : public ICorProfilerCallback3
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE ReJITCompilationStarted( 
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ BOOL fIsSafeToBlock) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetReJITParameters( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ ICorProfilerFunctionControl *pFunctionControl) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ReJITCompilationFinished( 
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ReJITError( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE MovedReferences2( 
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SurvivingReferences2( 
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback4Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback4 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback4 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback4 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback4 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback4 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback4 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback4 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback4 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback4 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback4 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback4 * This,
            /* [in] */ GCHandleID handleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, InitializeForAttach)
        HRESULT ( STDMETHODCALLTYPE *InitializeForAttach )( 
            ICorProfilerCallback4 * This,
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerAttachComplete)
        HRESULT ( STDMETHODCALLTYPE *ProfilerAttachComplete )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerDetachSucceeded)
        HRESULT ( STDMETHODCALLTYPE *ProfilerDetachSucceeded )( 
            ICorProfilerCallback4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationStarted )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, GetReJITParameters)
        HRESULT ( STDMETHODCALLTYPE *GetReJITParameters )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ ICorProfilerFunctionControl *pFunctionControl);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationFinished )( 
            ICorProfilerCallback4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITError)
        HRESULT ( STDMETHODCALLTYPE *ReJITError )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, MovedReferences2)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences2 )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, SurvivingReferences2)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences2 )( 
            ICorProfilerCallback4 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        END_INTERFACE
    } ICorProfilerCallback4Vtbl;

    interface ICorProfilerCallback4
    {
        CONST_VTBL struct ICorProfilerCallback4Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback4_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback4_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback4_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback4_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback4_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback4_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback4_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback4_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback4_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback4_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback4_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback4_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback4_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback4_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback4_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback4_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback4_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback4_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback4_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback4_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback4_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback4_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback4_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback4_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback4_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback4_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback4_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback4_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback4_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback4_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback4_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback4_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback4_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback4_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback4_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback4_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback4_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback4_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback4_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback4_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback4_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback4_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback4_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback4_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback4_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback4_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback4_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback4_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback4_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback4_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback4_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback4_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback4_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback4_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback4_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback4_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback4_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback4_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback4_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback4_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback4_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback4_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback4_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback4_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback4_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback4_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback4_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback4_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback4_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback4_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback4_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback4_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback4_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback4_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback4_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback4_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback4_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback4_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback4_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback4_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 


#define ICorProfilerCallback4_InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData)	\
    ( (This)->lpVtbl -> InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData) ) 

#define ICorProfilerCallback4_ProfilerAttachComplete(This)	\
    ( (This)->lpVtbl -> ProfilerAttachComplete(This) ) 

#define ICorProfilerCallback4_ProfilerDetachSucceeded(This)	\
    ( (This)->lpVtbl -> ProfilerDetachSucceeded(This) ) 


#define ICorProfilerCallback4_ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock) ) 

#define ICorProfilerCallback4_GetReJITParameters(This,moduleId,methodId,pFunctionControl)	\
    ( (This)->lpVtbl -> GetReJITParameters(This,moduleId,methodId,pFunctionControl) ) 

#define ICorProfilerCallback4_ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback4_ReJITError(This,moduleId,methodId,functionId,hrStatus)	\
    ( (This)->lpVtbl -> ReJITError(This,moduleId,methodId,functionId,hrStatus) ) 

#define ICorProfilerCallback4_MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback4_SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback4_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerCallback5_INTERFACE_DEFINED__
#define __ICorProfilerCallback5_INTERFACE_DEFINED__

/* interface ICorProfilerCallback5 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback5;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("8DFBA405-8C9F-45F8-BFFA-83B14CEF78B5")
    ICorProfilerCallback5 : public ICorProfilerCallback4
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE ConditionalWeakTableElementReferences( 
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID keyRefIds[  ],
            /* [size_is][in] */ ObjectID valueRefIds[  ],
            /* [size_is][in] */ GCHandleID rootIds[  ]) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback5Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback5 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback5 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback5 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback5 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback5 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback5 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback5 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback5 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback5 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback5 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback5 * This,
            /* [in] */ GCHandleID handleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, InitializeForAttach)
        HRESULT ( STDMETHODCALLTYPE *InitializeForAttach )( 
            ICorProfilerCallback5 * This,
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerAttachComplete)
        HRESULT ( STDMETHODCALLTYPE *ProfilerAttachComplete )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerDetachSucceeded)
        HRESULT ( STDMETHODCALLTYPE *ProfilerDetachSucceeded )( 
            ICorProfilerCallback5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationStarted )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, GetReJITParameters)
        HRESULT ( STDMETHODCALLTYPE *GetReJITParameters )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ ICorProfilerFunctionControl *pFunctionControl);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationFinished )( 
            ICorProfilerCallback5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITError)
        HRESULT ( STDMETHODCALLTYPE *ReJITError )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, MovedReferences2)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences2 )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, SurvivingReferences2)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences2 )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback5, ConditionalWeakTableElementReferences)
        HRESULT ( STDMETHODCALLTYPE *ConditionalWeakTableElementReferences )( 
            ICorProfilerCallback5 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID keyRefIds[  ],
            /* [size_is][in] */ ObjectID valueRefIds[  ],
            /* [size_is][in] */ GCHandleID rootIds[  ]);
        
        END_INTERFACE
    } ICorProfilerCallback5Vtbl;

    interface ICorProfilerCallback5
    {
        CONST_VTBL struct ICorProfilerCallback5Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback5_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback5_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback5_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback5_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback5_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback5_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback5_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback5_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback5_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback5_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback5_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback5_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback5_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback5_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback5_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback5_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback5_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback5_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback5_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback5_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback5_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback5_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback5_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback5_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback5_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback5_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback5_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback5_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback5_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback5_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback5_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback5_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback5_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback5_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback5_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback5_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback5_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback5_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback5_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback5_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback5_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback5_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback5_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback5_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback5_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback5_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback5_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback5_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback5_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback5_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback5_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback5_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback5_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback5_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback5_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback5_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback5_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback5_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback5_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback5_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback5_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback5_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback5_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback5_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback5_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback5_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback5_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback5_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback5_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback5_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback5_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback5_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback5_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback5_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback5_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback5_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback5_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback5_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback5_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback5_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 


#define ICorProfilerCallback5_InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData)	\
    ( (This)->lpVtbl -> InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData) ) 

#define ICorProfilerCallback5_ProfilerAttachComplete(This)	\
    ( (This)->lpVtbl -> ProfilerAttachComplete(This) ) 

#define ICorProfilerCallback5_ProfilerDetachSucceeded(This)	\
    ( (This)->lpVtbl -> ProfilerDetachSucceeded(This) ) 


#define ICorProfilerCallback5_ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock) ) 

#define ICorProfilerCallback5_GetReJITParameters(This,moduleId,methodId,pFunctionControl)	\
    ( (This)->lpVtbl -> GetReJITParameters(This,moduleId,methodId,pFunctionControl) ) 

#define ICorProfilerCallback5_ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback5_ReJITError(This,moduleId,methodId,functionId,hrStatus)	\
    ( (This)->lpVtbl -> ReJITError(This,moduleId,methodId,functionId,hrStatus) ) 

#define ICorProfilerCallback5_MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback5_SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 


#define ICorProfilerCallback5_ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds)	\
    ( (This)->lpVtbl -> ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback5_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerCallback6_INTERFACE_DEFINED__
#define __ICorProfilerCallback6_INTERFACE_DEFINED__

/* interface ICorProfilerCallback6 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback6;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("FC13DF4B-4448-4F4F-950C-BA8D19D00C36")
    ICorProfilerCallback6 : public ICorProfilerCallback5
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetAssemblyReferences( 
            /* [string][in] */ const WCHAR *wszAssemblyPath,
            /* [in] */ ICorProfilerAssemblyReferenceProvider *pAsmRefProvider) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback6Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback6 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback6 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback6 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback6 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback6 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback6 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback6 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback6 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback6 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback6 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback6 * This,
            /* [in] */ GCHandleID handleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, InitializeForAttach)
        HRESULT ( STDMETHODCALLTYPE *InitializeForAttach )( 
            ICorProfilerCallback6 * This,
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerAttachComplete)
        HRESULT ( STDMETHODCALLTYPE *ProfilerAttachComplete )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerDetachSucceeded)
        HRESULT ( STDMETHODCALLTYPE *ProfilerDetachSucceeded )( 
            ICorProfilerCallback6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationStarted )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, GetReJITParameters)
        HRESULT ( STDMETHODCALLTYPE *GetReJITParameters )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ ICorProfilerFunctionControl *pFunctionControl);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationFinished )( 
            ICorProfilerCallback6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITError)
        HRESULT ( STDMETHODCALLTYPE *ReJITError )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, MovedReferences2)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences2 )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, SurvivingReferences2)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences2 )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback5, ConditionalWeakTableElementReferences)
        HRESULT ( STDMETHODCALLTYPE *ConditionalWeakTableElementReferences )( 
            ICorProfilerCallback6 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID keyRefIds[  ],
            /* [size_is][in] */ ObjectID valueRefIds[  ],
            /* [size_is][in] */ GCHandleID rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback6, GetAssemblyReferences)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyReferences )( 
            ICorProfilerCallback6 * This,
            /* [string][in] */ const WCHAR *wszAssemblyPath,
            /* [in] */ ICorProfilerAssemblyReferenceProvider *pAsmRefProvider);
        
        END_INTERFACE
    } ICorProfilerCallback6Vtbl;

    interface ICorProfilerCallback6
    {
        CONST_VTBL struct ICorProfilerCallback6Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback6_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback6_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback6_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback6_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback6_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback6_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback6_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback6_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback6_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback6_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback6_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback6_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback6_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback6_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback6_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback6_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback6_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback6_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback6_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback6_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback6_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback6_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback6_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback6_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback6_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback6_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback6_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback6_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback6_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback6_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback6_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback6_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback6_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback6_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback6_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback6_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback6_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback6_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback6_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback6_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback6_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback6_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback6_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback6_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback6_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback6_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback6_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback6_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback6_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback6_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback6_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback6_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback6_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback6_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback6_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback6_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback6_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback6_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback6_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback6_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback6_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback6_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback6_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback6_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback6_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback6_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback6_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback6_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback6_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback6_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback6_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback6_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback6_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback6_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback6_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback6_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback6_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback6_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback6_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback6_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 


#define ICorProfilerCallback6_InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData)	\
    ( (This)->lpVtbl -> InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData) ) 

#define ICorProfilerCallback6_ProfilerAttachComplete(This)	\
    ( (This)->lpVtbl -> ProfilerAttachComplete(This) ) 

#define ICorProfilerCallback6_ProfilerDetachSucceeded(This)	\
    ( (This)->lpVtbl -> ProfilerDetachSucceeded(This) ) 


#define ICorProfilerCallback6_ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock) ) 

#define ICorProfilerCallback6_GetReJITParameters(This,moduleId,methodId,pFunctionControl)	\
    ( (This)->lpVtbl -> GetReJITParameters(This,moduleId,methodId,pFunctionControl) ) 

#define ICorProfilerCallback6_ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback6_ReJITError(This,moduleId,methodId,functionId,hrStatus)	\
    ( (This)->lpVtbl -> ReJITError(This,moduleId,methodId,functionId,hrStatus) ) 

#define ICorProfilerCallback6_MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback6_SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 


#define ICorProfilerCallback6_ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds)	\
    ( (This)->lpVtbl -> ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds) ) 


#define ICorProfilerCallback6_GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider)	\
    ( (This)->lpVtbl -> GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback6_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerCallback7_INTERFACE_DEFINED__
#define __ICorProfilerCallback7_INTERFACE_DEFINED__

/* interface ICorProfilerCallback7 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback7;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("F76A2DBA-1D52-4539-866C-2AA518F9EFC3")
    ICorProfilerCallback7 : public ICorProfilerCallback6
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE ModuleInMemorySymbolsUpdated( 
            ModuleID moduleId) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback7Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback7 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback7 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback7 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback7 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback7 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback7 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback7 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback7 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback7 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback7 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback7 * This,
            /* [in] */ GCHandleID handleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, InitializeForAttach)
        HRESULT ( STDMETHODCALLTYPE *InitializeForAttach )( 
            ICorProfilerCallback7 * This,
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerAttachComplete)
        HRESULT ( STDMETHODCALLTYPE *ProfilerAttachComplete )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerDetachSucceeded)
        HRESULT ( STDMETHODCALLTYPE *ProfilerDetachSucceeded )( 
            ICorProfilerCallback7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationStarted )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, GetReJITParameters)
        HRESULT ( STDMETHODCALLTYPE *GetReJITParameters )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ ICorProfilerFunctionControl *pFunctionControl);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationFinished )( 
            ICorProfilerCallback7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITError)
        HRESULT ( STDMETHODCALLTYPE *ReJITError )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, MovedReferences2)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences2 )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, SurvivingReferences2)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences2 )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback5, ConditionalWeakTableElementReferences)
        HRESULT ( STDMETHODCALLTYPE *ConditionalWeakTableElementReferences )( 
            ICorProfilerCallback7 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID keyRefIds[  ],
            /* [size_is][in] */ ObjectID valueRefIds[  ],
            /* [size_is][in] */ GCHandleID rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback6, GetAssemblyReferences)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyReferences )( 
            ICorProfilerCallback7 * This,
            /* [string][in] */ const WCHAR *wszAssemblyPath,
            /* [in] */ ICorProfilerAssemblyReferenceProvider *pAsmRefProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback7, ModuleInMemorySymbolsUpdated)
        HRESULT ( STDMETHODCALLTYPE *ModuleInMemorySymbolsUpdated )( 
            ICorProfilerCallback7 * This,
            ModuleID moduleId);
        
        END_INTERFACE
    } ICorProfilerCallback7Vtbl;

    interface ICorProfilerCallback7
    {
        CONST_VTBL struct ICorProfilerCallback7Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback7_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback7_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback7_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback7_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback7_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback7_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback7_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback7_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback7_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback7_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback7_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback7_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback7_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback7_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback7_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback7_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback7_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback7_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback7_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback7_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback7_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback7_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback7_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback7_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback7_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback7_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback7_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback7_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback7_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback7_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback7_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback7_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback7_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback7_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback7_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback7_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback7_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback7_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback7_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback7_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback7_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback7_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback7_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback7_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback7_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback7_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback7_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback7_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback7_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback7_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback7_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback7_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback7_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback7_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback7_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback7_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback7_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback7_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback7_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback7_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback7_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback7_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback7_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback7_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback7_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback7_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback7_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback7_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback7_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback7_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback7_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback7_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback7_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback7_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback7_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback7_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback7_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback7_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback7_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback7_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 


#define ICorProfilerCallback7_InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData)	\
    ( (This)->lpVtbl -> InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData) ) 

#define ICorProfilerCallback7_ProfilerAttachComplete(This)	\
    ( (This)->lpVtbl -> ProfilerAttachComplete(This) ) 

#define ICorProfilerCallback7_ProfilerDetachSucceeded(This)	\
    ( (This)->lpVtbl -> ProfilerDetachSucceeded(This) ) 


#define ICorProfilerCallback7_ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock) ) 

#define ICorProfilerCallback7_GetReJITParameters(This,moduleId,methodId,pFunctionControl)	\
    ( (This)->lpVtbl -> GetReJITParameters(This,moduleId,methodId,pFunctionControl) ) 

#define ICorProfilerCallback7_ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback7_ReJITError(This,moduleId,methodId,functionId,hrStatus)	\
    ( (This)->lpVtbl -> ReJITError(This,moduleId,methodId,functionId,hrStatus) ) 

#define ICorProfilerCallback7_MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback7_SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 


#define ICorProfilerCallback7_ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds)	\
    ( (This)->lpVtbl -> ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds) ) 


#define ICorProfilerCallback7_GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider)	\
    ( (This)->lpVtbl -> GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider) ) 


#define ICorProfilerCallback7_ModuleInMemorySymbolsUpdated(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleInMemorySymbolsUpdated(This,moduleId) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback7_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerCallback8_INTERFACE_DEFINED__
#define __ICorProfilerCallback8_INTERFACE_DEFINED__

/* interface ICorProfilerCallback8 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback8;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("5BED9B15-C079-4D47-BFE2-215A140C07E0")
    ICorProfilerCallback8 : public ICorProfilerCallback7
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE DynamicMethodJITCompilationStarted( 
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock,
            /* [in] */ LPCBYTE pILHeader,
            /* [in] */ ULONG cbILHeader) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE DynamicMethodJITCompilationFinished( 
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback8Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback8 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback8 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback8 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback8 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback8 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback8 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback8 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback8 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback8 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback8 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback8 * This,
            /* [in] */ GCHandleID handleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, InitializeForAttach)
        HRESULT ( STDMETHODCALLTYPE *InitializeForAttach )( 
            ICorProfilerCallback8 * This,
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerAttachComplete)
        HRESULT ( STDMETHODCALLTYPE *ProfilerAttachComplete )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerDetachSucceeded)
        HRESULT ( STDMETHODCALLTYPE *ProfilerDetachSucceeded )( 
            ICorProfilerCallback8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, GetReJITParameters)
        HRESULT ( STDMETHODCALLTYPE *GetReJITParameters )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ ICorProfilerFunctionControl *pFunctionControl);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITError)
        HRESULT ( STDMETHODCALLTYPE *ReJITError )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, MovedReferences2)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences2 )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, SurvivingReferences2)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences2 )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback5, ConditionalWeakTableElementReferences)
        HRESULT ( STDMETHODCALLTYPE *ConditionalWeakTableElementReferences )( 
            ICorProfilerCallback8 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID keyRefIds[  ],
            /* [size_is][in] */ ObjectID valueRefIds[  ],
            /* [size_is][in] */ GCHandleID rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback6, GetAssemblyReferences)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyReferences )( 
            ICorProfilerCallback8 * This,
            /* [string][in] */ const WCHAR *wszAssemblyPath,
            /* [in] */ ICorProfilerAssemblyReferenceProvider *pAsmRefProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback7, ModuleInMemorySymbolsUpdated)
        HRESULT ( STDMETHODCALLTYPE *ModuleInMemorySymbolsUpdated )( 
            ICorProfilerCallback8 * This,
            ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback8, DynamicMethodJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodJITCompilationStarted )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock,
            /* [in] */ LPCBYTE pILHeader,
            /* [in] */ ULONG cbILHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback8, DynamicMethodJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodJITCompilationFinished )( 
            ICorProfilerCallback8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        END_INTERFACE
    } ICorProfilerCallback8Vtbl;

    interface ICorProfilerCallback8
    {
        CONST_VTBL struct ICorProfilerCallback8Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback8_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback8_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback8_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback8_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback8_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback8_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback8_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback8_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback8_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback8_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback8_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback8_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback8_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback8_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback8_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback8_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback8_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback8_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback8_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback8_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback8_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback8_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback8_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback8_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback8_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback8_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback8_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback8_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback8_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback8_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback8_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback8_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback8_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback8_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback8_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback8_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback8_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback8_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback8_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback8_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback8_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback8_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback8_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback8_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback8_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback8_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback8_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback8_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback8_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback8_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback8_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback8_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback8_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback8_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback8_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback8_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback8_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback8_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback8_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback8_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback8_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback8_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback8_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback8_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback8_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback8_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback8_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback8_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback8_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback8_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback8_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback8_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback8_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback8_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback8_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback8_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback8_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback8_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback8_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback8_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 


#define ICorProfilerCallback8_InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData)	\
    ( (This)->lpVtbl -> InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData) ) 

#define ICorProfilerCallback8_ProfilerAttachComplete(This)	\
    ( (This)->lpVtbl -> ProfilerAttachComplete(This) ) 

#define ICorProfilerCallback8_ProfilerDetachSucceeded(This)	\
    ( (This)->lpVtbl -> ProfilerDetachSucceeded(This) ) 


#define ICorProfilerCallback8_ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock) ) 

#define ICorProfilerCallback8_GetReJITParameters(This,moduleId,methodId,pFunctionControl)	\
    ( (This)->lpVtbl -> GetReJITParameters(This,moduleId,methodId,pFunctionControl) ) 

#define ICorProfilerCallback8_ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback8_ReJITError(This,moduleId,methodId,functionId,hrStatus)	\
    ( (This)->lpVtbl -> ReJITError(This,moduleId,methodId,functionId,hrStatus) ) 

#define ICorProfilerCallback8_MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback8_SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 


#define ICorProfilerCallback8_ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds)	\
    ( (This)->lpVtbl -> ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds) ) 


#define ICorProfilerCallback8_GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider)	\
    ( (This)->lpVtbl -> GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider) ) 


#define ICorProfilerCallback8_ModuleInMemorySymbolsUpdated(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleInMemorySymbolsUpdated(This,moduleId) ) 


#define ICorProfilerCallback8_DynamicMethodJITCompilationStarted(This,functionId,fIsSafeToBlock,pILHeader,cbILHeader)	\
    ( (This)->lpVtbl -> DynamicMethodJITCompilationStarted(This,functionId,fIsSafeToBlock,pILHeader,cbILHeader) ) 

#define ICorProfilerCallback8_DynamicMethodJITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> DynamicMethodJITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback8_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerCallback9_INTERFACE_DEFINED__
#define __ICorProfilerCallback9_INTERFACE_DEFINED__

/* interface ICorProfilerCallback9 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback9;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("27583EC3-C8F5-482F-8052-194B8CE4705A")
    ICorProfilerCallback9 : public ICorProfilerCallback8
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE DynamicMethodUnloaded( 
            /* [in] */ FunctionID functionId) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback9Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback9 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback9 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback9 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback9 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback9 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback9 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback9 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback9 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback9 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback9 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback9 * This,
            /* [in] */ GCHandleID handleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, InitializeForAttach)
        HRESULT ( STDMETHODCALLTYPE *InitializeForAttach )( 
            ICorProfilerCallback9 * This,
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerAttachComplete)
        HRESULT ( STDMETHODCALLTYPE *ProfilerAttachComplete )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerDetachSucceeded)
        HRESULT ( STDMETHODCALLTYPE *ProfilerDetachSucceeded )( 
            ICorProfilerCallback9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, GetReJITParameters)
        HRESULT ( STDMETHODCALLTYPE *GetReJITParameters )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ ICorProfilerFunctionControl *pFunctionControl);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITError)
        HRESULT ( STDMETHODCALLTYPE *ReJITError )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, MovedReferences2)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences2 )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, SurvivingReferences2)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences2 )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback5, ConditionalWeakTableElementReferences)
        HRESULT ( STDMETHODCALLTYPE *ConditionalWeakTableElementReferences )( 
            ICorProfilerCallback9 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID keyRefIds[  ],
            /* [size_is][in] */ ObjectID valueRefIds[  ],
            /* [size_is][in] */ GCHandleID rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback6, GetAssemblyReferences)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyReferences )( 
            ICorProfilerCallback9 * This,
            /* [string][in] */ const WCHAR *wszAssemblyPath,
            /* [in] */ ICorProfilerAssemblyReferenceProvider *pAsmRefProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback7, ModuleInMemorySymbolsUpdated)
        HRESULT ( STDMETHODCALLTYPE *ModuleInMemorySymbolsUpdated )( 
            ICorProfilerCallback9 * This,
            ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback8, DynamicMethodJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodJITCompilationStarted )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock,
            /* [in] */ LPCBYTE pILHeader,
            /* [in] */ ULONG cbILHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback8, DynamicMethodJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodJITCompilationFinished )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback9, DynamicMethodUnloaded)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodUnloaded )( 
            ICorProfilerCallback9 * This,
            /* [in] */ FunctionID functionId);
        
        END_INTERFACE
    } ICorProfilerCallback9Vtbl;

    interface ICorProfilerCallback9
    {
        CONST_VTBL struct ICorProfilerCallback9Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback9_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback9_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback9_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback9_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback9_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback9_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback9_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback9_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback9_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback9_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback9_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback9_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback9_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback9_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback9_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback9_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback9_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback9_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback9_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback9_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback9_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback9_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback9_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback9_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback9_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback9_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback9_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback9_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback9_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback9_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback9_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback9_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback9_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback9_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback9_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback9_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback9_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback9_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback9_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback9_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback9_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback9_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback9_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback9_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback9_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback9_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback9_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback9_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback9_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback9_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback9_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback9_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback9_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback9_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback9_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback9_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback9_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback9_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback9_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback9_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback9_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback9_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback9_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback9_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback9_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback9_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback9_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback9_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback9_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback9_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback9_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback9_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback9_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback9_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback9_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback9_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback9_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback9_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback9_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback9_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 


#define ICorProfilerCallback9_InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData)	\
    ( (This)->lpVtbl -> InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData) ) 

#define ICorProfilerCallback9_ProfilerAttachComplete(This)	\
    ( (This)->lpVtbl -> ProfilerAttachComplete(This) ) 

#define ICorProfilerCallback9_ProfilerDetachSucceeded(This)	\
    ( (This)->lpVtbl -> ProfilerDetachSucceeded(This) ) 


#define ICorProfilerCallback9_ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock) ) 

#define ICorProfilerCallback9_GetReJITParameters(This,moduleId,methodId,pFunctionControl)	\
    ( (This)->lpVtbl -> GetReJITParameters(This,moduleId,methodId,pFunctionControl) ) 

#define ICorProfilerCallback9_ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback9_ReJITError(This,moduleId,methodId,functionId,hrStatus)	\
    ( (This)->lpVtbl -> ReJITError(This,moduleId,methodId,functionId,hrStatus) ) 

#define ICorProfilerCallback9_MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback9_SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 


#define ICorProfilerCallback9_ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds)	\
    ( (This)->lpVtbl -> ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds) ) 


#define ICorProfilerCallback9_GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider)	\
    ( (This)->lpVtbl -> GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider) ) 


#define ICorProfilerCallback9_ModuleInMemorySymbolsUpdated(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleInMemorySymbolsUpdated(This,moduleId) ) 


#define ICorProfilerCallback9_DynamicMethodJITCompilationStarted(This,functionId,fIsSafeToBlock,pILHeader,cbILHeader)	\
    ( (This)->lpVtbl -> DynamicMethodJITCompilationStarted(This,functionId,fIsSafeToBlock,pILHeader,cbILHeader) ) 

#define ICorProfilerCallback9_DynamicMethodJITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> DynamicMethodJITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 


#define ICorProfilerCallback9_DynamicMethodUnloaded(This,functionId)	\
    ( (This)->lpVtbl -> DynamicMethodUnloaded(This,functionId) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback9_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerCallback10_INTERFACE_DEFINED__
#define __ICorProfilerCallback10_INTERFACE_DEFINED__

/* interface ICorProfilerCallback10 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback10;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("CEC5B60E-C69C-495F-87F6-84D28EE16FFB")
    ICorProfilerCallback10 : public ICorProfilerCallback9
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EventPipeEventDelivered( 
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [in] */ DWORD eventId,
            /* [in] */ DWORD eventVersion,
            /* [in] */ ULONG cbMetadataBlob,
            /* [size_is][in] */ LPCBYTE metadataBlob,
            /* [in] */ ULONG cbEventData,
            /* [size_is][in] */ LPCBYTE eventData,
            /* [in] */ LPCGUID pActivityId,
            /* [in] */ LPCGUID pRelatedActivityId,
            /* [in] */ ThreadID eventThread,
            /* [in] */ ULONG numStackFrames,
            /* [length_is][in] */ UINT_PTR stackFrames[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EventPipeProviderCreated( 
            /* [in] */ EVENTPIPE_PROVIDER provider) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback10Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback10 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback10 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback10 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback10 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback10 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback10 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback10 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback10 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback10 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback10 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback10 * This,
            /* [in] */ GCHandleID handleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, InitializeForAttach)
        HRESULT ( STDMETHODCALLTYPE *InitializeForAttach )( 
            ICorProfilerCallback10 * This,
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerAttachComplete)
        HRESULT ( STDMETHODCALLTYPE *ProfilerAttachComplete )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerDetachSucceeded)
        HRESULT ( STDMETHODCALLTYPE *ProfilerDetachSucceeded )( 
            ICorProfilerCallback10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, GetReJITParameters)
        HRESULT ( STDMETHODCALLTYPE *GetReJITParameters )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ ICorProfilerFunctionControl *pFunctionControl);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITError)
        HRESULT ( STDMETHODCALLTYPE *ReJITError )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, MovedReferences2)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences2 )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, SurvivingReferences2)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences2 )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback5, ConditionalWeakTableElementReferences)
        HRESULT ( STDMETHODCALLTYPE *ConditionalWeakTableElementReferences )( 
            ICorProfilerCallback10 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID keyRefIds[  ],
            /* [size_is][in] */ ObjectID valueRefIds[  ],
            /* [size_is][in] */ GCHandleID rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback6, GetAssemblyReferences)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyReferences )( 
            ICorProfilerCallback10 * This,
            /* [string][in] */ const WCHAR *wszAssemblyPath,
            /* [in] */ ICorProfilerAssemblyReferenceProvider *pAsmRefProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback7, ModuleInMemorySymbolsUpdated)
        HRESULT ( STDMETHODCALLTYPE *ModuleInMemorySymbolsUpdated )( 
            ICorProfilerCallback10 * This,
            ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback8, DynamicMethodJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodJITCompilationStarted )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock,
            /* [in] */ LPCBYTE pILHeader,
            /* [in] */ ULONG cbILHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback8, DynamicMethodJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodJITCompilationFinished )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback9, DynamicMethodUnloaded)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodUnloaded )( 
            ICorProfilerCallback10 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback10, EventPipeEventDelivered)
        HRESULT ( STDMETHODCALLTYPE *EventPipeEventDelivered )( 
            ICorProfilerCallback10 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [in] */ DWORD eventId,
            /* [in] */ DWORD eventVersion,
            /* [in] */ ULONG cbMetadataBlob,
            /* [size_is][in] */ LPCBYTE metadataBlob,
            /* [in] */ ULONG cbEventData,
            /* [size_is][in] */ LPCBYTE eventData,
            /* [in] */ LPCGUID pActivityId,
            /* [in] */ LPCGUID pRelatedActivityId,
            /* [in] */ ThreadID eventThread,
            /* [in] */ ULONG numStackFrames,
            /* [length_is][in] */ UINT_PTR stackFrames[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback10, EventPipeProviderCreated)
        HRESULT ( STDMETHODCALLTYPE *EventPipeProviderCreated )( 
            ICorProfilerCallback10 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider);
        
        END_INTERFACE
    } ICorProfilerCallback10Vtbl;

    interface ICorProfilerCallback10
    {
        CONST_VTBL struct ICorProfilerCallback10Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback10_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback10_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback10_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback10_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback10_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback10_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback10_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback10_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback10_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback10_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback10_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback10_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback10_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback10_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback10_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback10_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback10_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback10_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback10_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback10_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback10_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback10_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback10_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback10_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback10_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback10_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback10_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback10_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback10_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback10_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback10_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback10_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback10_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback10_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback10_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback10_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback10_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback10_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback10_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback10_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback10_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback10_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback10_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback10_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback10_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback10_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback10_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback10_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback10_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback10_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback10_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback10_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback10_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback10_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback10_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback10_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback10_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback10_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback10_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback10_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback10_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback10_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback10_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback10_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback10_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback10_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback10_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback10_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback10_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback10_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback10_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback10_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback10_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback10_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback10_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback10_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback10_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback10_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback10_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback10_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 


#define ICorProfilerCallback10_InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData)	\
    ( (This)->lpVtbl -> InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData) ) 

#define ICorProfilerCallback10_ProfilerAttachComplete(This)	\
    ( (This)->lpVtbl -> ProfilerAttachComplete(This) ) 

#define ICorProfilerCallback10_ProfilerDetachSucceeded(This)	\
    ( (This)->lpVtbl -> ProfilerDetachSucceeded(This) ) 


#define ICorProfilerCallback10_ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock) ) 

#define ICorProfilerCallback10_GetReJITParameters(This,moduleId,methodId,pFunctionControl)	\
    ( (This)->lpVtbl -> GetReJITParameters(This,moduleId,methodId,pFunctionControl) ) 

#define ICorProfilerCallback10_ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback10_ReJITError(This,moduleId,methodId,functionId,hrStatus)	\
    ( (This)->lpVtbl -> ReJITError(This,moduleId,methodId,functionId,hrStatus) ) 

#define ICorProfilerCallback10_MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback10_SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 


#define ICorProfilerCallback10_ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds)	\
    ( (This)->lpVtbl -> ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds) ) 


#define ICorProfilerCallback10_GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider)	\
    ( (This)->lpVtbl -> GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider) ) 


#define ICorProfilerCallback10_ModuleInMemorySymbolsUpdated(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleInMemorySymbolsUpdated(This,moduleId) ) 


#define ICorProfilerCallback10_DynamicMethodJITCompilationStarted(This,functionId,fIsSafeToBlock,pILHeader,cbILHeader)	\
    ( (This)->lpVtbl -> DynamicMethodJITCompilationStarted(This,functionId,fIsSafeToBlock,pILHeader,cbILHeader) ) 

#define ICorProfilerCallback10_DynamicMethodJITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> DynamicMethodJITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 


#define ICorProfilerCallback10_DynamicMethodUnloaded(This,functionId)	\
    ( (This)->lpVtbl -> DynamicMethodUnloaded(This,functionId) ) 


#define ICorProfilerCallback10_EventPipeEventDelivered(This,provider,eventId,eventVersion,cbMetadataBlob,metadataBlob,cbEventData,eventData,pActivityId,pRelatedActivityId,eventThread,numStackFrames,stackFrames)	\
    ( (This)->lpVtbl -> EventPipeEventDelivered(This,provider,eventId,eventVersion,cbMetadataBlob,metadataBlob,cbEventData,eventData,pActivityId,pRelatedActivityId,eventThread,numStackFrames,stackFrames) ) 

#define ICorProfilerCallback10_EventPipeProviderCreated(This,provider)	\
    ( (This)->lpVtbl -> EventPipeProviderCreated(This,provider) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback10_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerCallback11_INTERFACE_DEFINED__
#define __ICorProfilerCallback11_INTERFACE_DEFINED__

/* interface ICorProfilerCallback11 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerCallback11;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("42350846-AAED-47F7-B128-FD0C98881CDE")
    ICorProfilerCallback11 : public ICorProfilerCallback10
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE LoadAsNotificationOnly( 
            BOOL *pbNotificationOnly) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerCallback11Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerCallback11 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Initialize)
        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
            ICorProfilerCallback11 * This,
            /* [in] */ IUnknown *pICorProfilerInfoUnk);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, Shutdown)
        HRESULT ( STDMETHODCALLTYPE *Shutdown )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainCreationFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainCreationFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownStarted)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ AppDomainID appDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AppDomainShutdownFinished)
        HRESULT ( STDMETHODCALLTYPE *AppDomainShutdownFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyLoadFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ AssemblyID assemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, AssemblyUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *AssemblyUnloadFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleLoadFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ModuleUnloadFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ModuleAttachedToAssembly)
        HRESULT ( STDMETHODCALLTYPE *ModuleAttachedToAssembly )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ AssemblyID AssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassLoadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassLoadFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ClassUnloadFinished)
        HRESULT ( STDMETHODCALLTYPE *ClassUnloadFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ClassID classId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, FunctionUnloadStarted)
        HRESULT ( STDMETHODCALLTYPE *FunctionUnloadStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCompilationFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchStarted)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *pbUseCachedFunction);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITCachedFunctionSearchFinished)
        HRESULT ( STDMETHODCALLTYPE *JITCachedFunctionSearchFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_JIT_CACHE result);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITFunctionPitched)
        HRESULT ( STDMETHODCALLTYPE *JITFunctionPitched )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, JITInlining)
        HRESULT ( STDMETHODCALLTYPE *JITInlining )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID callerId,
            /* [in] */ FunctionID calleeId,
            /* [out] */ BOOL *pfShouldInline);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadCreated)
        HRESULT ( STDMETHODCALLTYPE *ThreadCreated )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadDestroyed)
        HRESULT ( STDMETHODCALLTYPE *ThreadDestroyed )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ThreadAssignedToOSThread)
        HRESULT ( STDMETHODCALLTYPE *ThreadAssignedToOSThread )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ThreadID managedThreadId,
            /* [in] */ DWORD osThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationStarted )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientSendingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientSendingMessage )( 
            ICorProfilerCallback11 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientReceivingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientReceivingReply )( 
            ICorProfilerCallback11 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingClientInvocationFinished)
        HRESULT ( STDMETHODCALLTYPE *RemotingClientInvocationFinished )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerReceivingMessage)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerReceivingMessage )( 
            ICorProfilerCallback11 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationStarted)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationStarted )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerInvocationReturned)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerInvocationReturned )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RemotingServerSendingReply)
        HRESULT ( STDMETHODCALLTYPE *RemotingServerSendingReply )( 
            ICorProfilerCallback11 * This,
            /* [in] */ GUID *pCookie,
            /* [in] */ BOOL fIsAsync);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, UnmanagedToManagedTransition)
        HRESULT ( STDMETHODCALLTYPE *UnmanagedToManagedTransition )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ManagedToUnmanagedTransition)
        HRESULT ( STDMETHODCALLTYPE *ManagedToUnmanagedTransition )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_TRANSITION_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ COR_PRF_SUSPEND_REASON suspendReason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendFinished )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeSuspendAborted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeSuspendAborted )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeStarted)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeStarted )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeResumeFinished)
        HRESULT ( STDMETHODCALLTYPE *RuntimeResumeFinished )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadSuspended)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadSuspended )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RuntimeThreadResumed)
        HRESULT ( STDMETHODCALLTYPE *RuntimeThreadResumed )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ThreadID threadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, MovedReferences)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectAllocated)
        HRESULT ( STDMETHODCALLTYPE *ObjectAllocated )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectsAllocatedByClass)
        HRESULT ( STDMETHODCALLTYPE *ObjectsAllocatedByClass )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ULONG cClassCount,
            /* [size_is][in] */ ClassID classIds[  ],
            /* [size_is][in] */ ULONG cObjects[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *ObjectReferences )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG cObjectRefs,
            /* [size_is][in] */ ObjectID objectRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, RootReferences)
        HRESULT ( STDMETHODCALLTYPE *RootReferences )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionThrown)
        HRESULT ( STDMETHODCALLTYPE *ExceptionThrown )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ObjectID thrownObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionEnter )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFunctionLeave )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterEnter )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchFilterLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchFilterLeave )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionSearchCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionSearchCatcherFound )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerEnter )( 
            ICorProfilerCallback11 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionOSHandlerLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionOSHandlerLeave )( 
            ICorProfilerCallback11 * This,
            /* [in] */ UINT_PTR __unused);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionEnter )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFunctionLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFunctionLeave )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyEnter )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionUnwindFinallyLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionUnwindFinallyLeave )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherEnter)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherEnter )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ObjectID objectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCatcherLeave)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCatcherLeave )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableCreated)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableCreated )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable,
            /* [in] */ ULONG cSlots);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, COMClassicVTableDestroyed)
        HRESULT ( STDMETHODCALLTYPE *COMClassicVTableDestroyed )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ClassID wrappedClassId,
            /* [in] */ REFGUID implementedIID,
            /* [in] */ void *pVTable);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherFound)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherFound )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback, ExceptionCLRCatcherExecute)
        HRESULT ( STDMETHODCALLTYPE *ExceptionCLRCatcherExecute )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, ThreadNameChanged)
        HRESULT ( STDMETHODCALLTYPE *ThreadNameChanged )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ThreadID threadId,
            /* [in] */ ULONG cchName,
            /* [annotation][in] */ 
            _In_reads_opt_(cchName)  WCHAR name[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionStarted)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ int cGenerations,
            /* [size_is][in] */ BOOL generationCollected[  ],
            /* [in] */ COR_PRF_GC_REASON reason);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, SurvivingReferences)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ ULONG cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, GarbageCollectionFinished)
        HRESULT ( STDMETHODCALLTYPE *GarbageCollectionFinished )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, FinalizeableObjectQueued)
        HRESULT ( STDMETHODCALLTYPE *FinalizeableObjectQueued )( 
            ICorProfilerCallback11 * This,
            /* [in] */ DWORD finalizerFlags,
            /* [in] */ ObjectID objectID);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, RootReferences2)
        HRESULT ( STDMETHODCALLTYPE *RootReferences2 )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID rootRefIds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_KIND rootKinds[  ],
            /* [size_is][in] */ COR_PRF_GC_ROOT_FLAGS rootFlags[  ],
            /* [size_is][in] */ UINT_PTR rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleCreated)
        HRESULT ( STDMETHODCALLTYPE *HandleCreated )( 
            ICorProfilerCallback11 * This,
            /* [in] */ GCHandleID handleId,
            /* [in] */ ObjectID initialObjectId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback2, HandleDestroyed)
        HRESULT ( STDMETHODCALLTYPE *HandleDestroyed )( 
            ICorProfilerCallback11 * This,
            /* [in] */ GCHandleID handleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, InitializeForAttach)
        HRESULT ( STDMETHODCALLTYPE *InitializeForAttach )( 
            ICorProfilerCallback11 * This,
            /* [in] */ IUnknown *pCorProfilerInfoUnk,
            /* [in] */ void *pvClientData,
            /* [in] */ UINT cbClientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerAttachComplete)
        HRESULT ( STDMETHODCALLTYPE *ProfilerAttachComplete )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback3, ProfilerDetachSucceeded)
        HRESULT ( STDMETHODCALLTYPE *ProfilerDetachSucceeded )( 
            ICorProfilerCallback11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, GetReJITParameters)
        HRESULT ( STDMETHODCALLTYPE *GetReJITParameters )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ ICorProfilerFunctionControl *pFunctionControl);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *ReJITCompilationFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID rejitId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, ReJITError)
        HRESULT ( STDMETHODCALLTYPE *ReJITError )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, MovedReferences2)
        HRESULT ( STDMETHODCALLTYPE *MovedReferences2 )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ULONG cMovedObjectIDRanges,
            /* [size_is][in] */ ObjectID oldObjectIDRangeStart[  ],
            /* [size_is][in] */ ObjectID newObjectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback4, SurvivingReferences2)
        HRESULT ( STDMETHODCALLTYPE *SurvivingReferences2 )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ULONG cSurvivingObjectIDRanges,
            /* [size_is][in] */ ObjectID objectIDRangeStart[  ],
            /* [size_is][in] */ SIZE_T cObjectIDRangeLength[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback5, ConditionalWeakTableElementReferences)
        HRESULT ( STDMETHODCALLTYPE *ConditionalWeakTableElementReferences )( 
            ICorProfilerCallback11 * This,
            /* [in] */ ULONG cRootRefs,
            /* [size_is][in] */ ObjectID keyRefIds[  ],
            /* [size_is][in] */ ObjectID valueRefIds[  ],
            /* [size_is][in] */ GCHandleID rootIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback6, GetAssemblyReferences)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyReferences )( 
            ICorProfilerCallback11 * This,
            /* [string][in] */ const WCHAR *wszAssemblyPath,
            /* [in] */ ICorProfilerAssemblyReferenceProvider *pAsmRefProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback7, ModuleInMemorySymbolsUpdated)
        HRESULT ( STDMETHODCALLTYPE *ModuleInMemorySymbolsUpdated )( 
            ICorProfilerCallback11 * This,
            ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback8, DynamicMethodJITCompilationStarted)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodJITCompilationStarted )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fIsSafeToBlock,
            /* [in] */ LPCBYTE pILHeader,
            /* [in] */ ULONG cbILHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback8, DynamicMethodJITCompilationFinished)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodJITCompilationFinished )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ HRESULT hrStatus,
            /* [in] */ BOOL fIsSafeToBlock);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback9, DynamicMethodUnloaded)
        HRESULT ( STDMETHODCALLTYPE *DynamicMethodUnloaded )( 
            ICorProfilerCallback11 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback10, EventPipeEventDelivered)
        HRESULT ( STDMETHODCALLTYPE *EventPipeEventDelivered )( 
            ICorProfilerCallback11 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [in] */ DWORD eventId,
            /* [in] */ DWORD eventVersion,
            /* [in] */ ULONG cbMetadataBlob,
            /* [size_is][in] */ LPCBYTE metadataBlob,
            /* [in] */ ULONG cbEventData,
            /* [size_is][in] */ LPCBYTE eventData,
            /* [in] */ LPCGUID pActivityId,
            /* [in] */ LPCGUID pRelatedActivityId,
            /* [in] */ ThreadID eventThread,
            /* [in] */ ULONG numStackFrames,
            /* [length_is][in] */ UINT_PTR stackFrames[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback10, EventPipeProviderCreated)
        HRESULT ( STDMETHODCALLTYPE *EventPipeProviderCreated )( 
            ICorProfilerCallback11 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider);
        
        DECLSPEC_XFGVIRT(ICorProfilerCallback11, LoadAsNotificationOnly)
        HRESULT ( STDMETHODCALLTYPE *LoadAsNotificationOnly )( 
            ICorProfilerCallback11 * This,
            BOOL *pbNotificationOnly);
        
        END_INTERFACE
    } ICorProfilerCallback11Vtbl;

    interface ICorProfilerCallback11
    {
        CONST_VTBL struct ICorProfilerCallback11Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerCallback11_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerCallback11_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerCallback11_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerCallback11_Initialize(This,pICorProfilerInfoUnk)	\
    ( (This)->lpVtbl -> Initialize(This,pICorProfilerInfoUnk) ) 

#define ICorProfilerCallback11_Shutdown(This)	\
    ( (This)->lpVtbl -> Shutdown(This) ) 

#define ICorProfilerCallback11_AppDomainCreationStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainCreationStarted(This,appDomainId) ) 

#define ICorProfilerCallback11_AppDomainCreationFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainCreationFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback11_AppDomainShutdownStarted(This,appDomainId)	\
    ( (This)->lpVtbl -> AppDomainShutdownStarted(This,appDomainId) ) 

#define ICorProfilerCallback11_AppDomainShutdownFinished(This,appDomainId,hrStatus)	\
    ( (This)->lpVtbl -> AppDomainShutdownFinished(This,appDomainId,hrStatus) ) 

#define ICorProfilerCallback11_AssemblyLoadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyLoadStarted(This,assemblyId) ) 

#define ICorProfilerCallback11_AssemblyLoadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyLoadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback11_AssemblyUnloadStarted(This,assemblyId)	\
    ( (This)->lpVtbl -> AssemblyUnloadStarted(This,assemblyId) ) 

#define ICorProfilerCallback11_AssemblyUnloadFinished(This,assemblyId,hrStatus)	\
    ( (This)->lpVtbl -> AssemblyUnloadFinished(This,assemblyId,hrStatus) ) 

#define ICorProfilerCallback11_ModuleLoadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleLoadStarted(This,moduleId) ) 

#define ICorProfilerCallback11_ModuleLoadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleLoadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback11_ModuleUnloadStarted(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleUnloadStarted(This,moduleId) ) 

#define ICorProfilerCallback11_ModuleUnloadFinished(This,moduleId,hrStatus)	\
    ( (This)->lpVtbl -> ModuleUnloadFinished(This,moduleId,hrStatus) ) 

#define ICorProfilerCallback11_ModuleAttachedToAssembly(This,moduleId,AssemblyId)	\
    ( (This)->lpVtbl -> ModuleAttachedToAssembly(This,moduleId,AssemblyId) ) 

#define ICorProfilerCallback11_ClassLoadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassLoadStarted(This,classId) ) 

#define ICorProfilerCallback11_ClassLoadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassLoadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback11_ClassUnloadStarted(This,classId)	\
    ( (This)->lpVtbl -> ClassUnloadStarted(This,classId) ) 

#define ICorProfilerCallback11_ClassUnloadFinished(This,classId,hrStatus)	\
    ( (This)->lpVtbl -> ClassUnloadFinished(This,classId,hrStatus) ) 

#define ICorProfilerCallback11_FunctionUnloadStarted(This,functionId)	\
    ( (This)->lpVtbl -> FunctionUnloadStarted(This,functionId) ) 

#define ICorProfilerCallback11_JITCompilationStarted(This,functionId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationStarted(This,functionId,fIsSafeToBlock) ) 

#define ICorProfilerCallback11_JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> JITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback11_JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchStarted(This,functionId,pbUseCachedFunction) ) 

#define ICorProfilerCallback11_JITCachedFunctionSearchFinished(This,functionId,result)	\
    ( (This)->lpVtbl -> JITCachedFunctionSearchFinished(This,functionId,result) ) 

#define ICorProfilerCallback11_JITFunctionPitched(This,functionId)	\
    ( (This)->lpVtbl -> JITFunctionPitched(This,functionId) ) 

#define ICorProfilerCallback11_JITInlining(This,callerId,calleeId,pfShouldInline)	\
    ( (This)->lpVtbl -> JITInlining(This,callerId,calleeId,pfShouldInline) ) 

#define ICorProfilerCallback11_ThreadCreated(This,threadId)	\
    ( (This)->lpVtbl -> ThreadCreated(This,threadId) ) 

#define ICorProfilerCallback11_ThreadDestroyed(This,threadId)	\
    ( (This)->lpVtbl -> ThreadDestroyed(This,threadId) ) 

#define ICorProfilerCallback11_ThreadAssignedToOSThread(This,managedThreadId,osThreadId)	\
    ( (This)->lpVtbl -> ThreadAssignedToOSThread(This,managedThreadId,osThreadId) ) 

#define ICorProfilerCallback11_RemotingClientInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationStarted(This) ) 

#define ICorProfilerCallback11_RemotingClientSendingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientSendingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback11_RemotingClientReceivingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingClientReceivingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback11_RemotingClientInvocationFinished(This)	\
    ( (This)->lpVtbl -> RemotingClientInvocationFinished(This) ) 

#define ICorProfilerCallback11_RemotingServerReceivingMessage(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerReceivingMessage(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback11_RemotingServerInvocationStarted(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationStarted(This) ) 

#define ICorProfilerCallback11_RemotingServerInvocationReturned(This)	\
    ( (This)->lpVtbl -> RemotingServerInvocationReturned(This) ) 

#define ICorProfilerCallback11_RemotingServerSendingReply(This,pCookie,fIsAsync)	\
    ( (This)->lpVtbl -> RemotingServerSendingReply(This,pCookie,fIsAsync) ) 

#define ICorProfilerCallback11_UnmanagedToManagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> UnmanagedToManagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback11_ManagedToUnmanagedTransition(This,functionId,reason)	\
    ( (This)->lpVtbl -> ManagedToUnmanagedTransition(This,functionId,reason) ) 

#define ICorProfilerCallback11_RuntimeSuspendStarted(This,suspendReason)	\
    ( (This)->lpVtbl -> RuntimeSuspendStarted(This,suspendReason) ) 

#define ICorProfilerCallback11_RuntimeSuspendFinished(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendFinished(This) ) 

#define ICorProfilerCallback11_RuntimeSuspendAborted(This)	\
    ( (This)->lpVtbl -> RuntimeSuspendAborted(This) ) 

#define ICorProfilerCallback11_RuntimeResumeStarted(This)	\
    ( (This)->lpVtbl -> RuntimeResumeStarted(This) ) 

#define ICorProfilerCallback11_RuntimeResumeFinished(This)	\
    ( (This)->lpVtbl -> RuntimeResumeFinished(This) ) 

#define ICorProfilerCallback11_RuntimeThreadSuspended(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadSuspended(This,threadId) ) 

#define ICorProfilerCallback11_RuntimeThreadResumed(This,threadId)	\
    ( (This)->lpVtbl -> RuntimeThreadResumed(This,threadId) ) 

#define ICorProfilerCallback11_MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback11_ObjectAllocated(This,objectId,classId)	\
    ( (This)->lpVtbl -> ObjectAllocated(This,objectId,classId) ) 

#define ICorProfilerCallback11_ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects)	\
    ( (This)->lpVtbl -> ObjectsAllocatedByClass(This,cClassCount,classIds,cObjects) ) 

#define ICorProfilerCallback11_ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds)	\
    ( (This)->lpVtbl -> ObjectReferences(This,objectId,classId,cObjectRefs,objectRefIds) ) 

#define ICorProfilerCallback11_RootReferences(This,cRootRefs,rootRefIds)	\
    ( (This)->lpVtbl -> RootReferences(This,cRootRefs,rootRefIds) ) 

#define ICorProfilerCallback11_ExceptionThrown(This,thrownObjectId)	\
    ( (This)->lpVtbl -> ExceptionThrown(This,thrownObjectId) ) 

#define ICorProfilerCallback11_ExceptionSearchFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback11_ExceptionSearchFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFunctionLeave(This) ) 

#define ICorProfilerCallback11_ExceptionSearchFilterEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterEnter(This,functionId) ) 

#define ICorProfilerCallback11_ExceptionSearchFilterLeave(This)	\
    ( (This)->lpVtbl -> ExceptionSearchFilterLeave(This) ) 

#define ICorProfilerCallback11_ExceptionSearchCatcherFound(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionSearchCatcherFound(This,functionId) ) 

#define ICorProfilerCallback11_ExceptionOSHandlerEnter(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerEnter(This,__unused) ) 

#define ICorProfilerCallback11_ExceptionOSHandlerLeave(This,__unused)	\
    ( (This)->lpVtbl -> ExceptionOSHandlerLeave(This,__unused) ) 

#define ICorProfilerCallback11_ExceptionUnwindFunctionEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionEnter(This,functionId) ) 

#define ICorProfilerCallback11_ExceptionUnwindFunctionLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFunctionLeave(This) ) 

#define ICorProfilerCallback11_ExceptionUnwindFinallyEnter(This,functionId)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyEnter(This,functionId) ) 

#define ICorProfilerCallback11_ExceptionUnwindFinallyLeave(This)	\
    ( (This)->lpVtbl -> ExceptionUnwindFinallyLeave(This) ) 

#define ICorProfilerCallback11_ExceptionCatcherEnter(This,functionId,objectId)	\
    ( (This)->lpVtbl -> ExceptionCatcherEnter(This,functionId,objectId) ) 

#define ICorProfilerCallback11_ExceptionCatcherLeave(This)	\
    ( (This)->lpVtbl -> ExceptionCatcherLeave(This) ) 

#define ICorProfilerCallback11_COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots)	\
    ( (This)->lpVtbl -> COMClassicVTableCreated(This,wrappedClassId,implementedIID,pVTable,cSlots) ) 

#define ICorProfilerCallback11_COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable)	\
    ( (This)->lpVtbl -> COMClassicVTableDestroyed(This,wrappedClassId,implementedIID,pVTable) ) 

#define ICorProfilerCallback11_ExceptionCLRCatcherFound(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherFound(This) ) 

#define ICorProfilerCallback11_ExceptionCLRCatcherExecute(This)	\
    ( (This)->lpVtbl -> ExceptionCLRCatcherExecute(This) ) 


#define ICorProfilerCallback11_ThreadNameChanged(This,threadId,cchName,name)	\
    ( (This)->lpVtbl -> ThreadNameChanged(This,threadId,cchName,name) ) 

#define ICorProfilerCallback11_GarbageCollectionStarted(This,cGenerations,generationCollected,reason)	\
    ( (This)->lpVtbl -> GarbageCollectionStarted(This,cGenerations,generationCollected,reason) ) 

#define ICorProfilerCallback11_SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback11_GarbageCollectionFinished(This)	\
    ( (This)->lpVtbl -> GarbageCollectionFinished(This) ) 

#define ICorProfilerCallback11_FinalizeableObjectQueued(This,finalizerFlags,objectID)	\
    ( (This)->lpVtbl -> FinalizeableObjectQueued(This,finalizerFlags,objectID) ) 

#define ICorProfilerCallback11_RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds)	\
    ( (This)->lpVtbl -> RootReferences2(This,cRootRefs,rootRefIds,rootKinds,rootFlags,rootIds) ) 

#define ICorProfilerCallback11_HandleCreated(This,handleId,initialObjectId)	\
    ( (This)->lpVtbl -> HandleCreated(This,handleId,initialObjectId) ) 

#define ICorProfilerCallback11_HandleDestroyed(This,handleId)	\
    ( (This)->lpVtbl -> HandleDestroyed(This,handleId) ) 


#define ICorProfilerCallback11_InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData)	\
    ( (This)->lpVtbl -> InitializeForAttach(This,pCorProfilerInfoUnk,pvClientData,cbClientData) ) 

#define ICorProfilerCallback11_ProfilerAttachComplete(This)	\
    ( (This)->lpVtbl -> ProfilerAttachComplete(This) ) 

#define ICorProfilerCallback11_ProfilerDetachSucceeded(This)	\
    ( (This)->lpVtbl -> ProfilerDetachSucceeded(This) ) 


#define ICorProfilerCallback11_ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationStarted(This,functionId,rejitId,fIsSafeToBlock) ) 

#define ICorProfilerCallback11_GetReJITParameters(This,moduleId,methodId,pFunctionControl)	\
    ( (This)->lpVtbl -> GetReJITParameters(This,moduleId,methodId,pFunctionControl) ) 

#define ICorProfilerCallback11_ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> ReJITCompilationFinished(This,functionId,rejitId,hrStatus,fIsSafeToBlock) ) 

#define ICorProfilerCallback11_ReJITError(This,moduleId,methodId,functionId,hrStatus)	\
    ( (This)->lpVtbl -> ReJITError(This,moduleId,methodId,functionId,hrStatus) ) 

#define ICorProfilerCallback11_MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> MovedReferences2(This,cMovedObjectIDRanges,oldObjectIDRangeStart,newObjectIDRangeStart,cObjectIDRangeLength) ) 

#define ICorProfilerCallback11_SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength)	\
    ( (This)->lpVtbl -> SurvivingReferences2(This,cSurvivingObjectIDRanges,objectIDRangeStart,cObjectIDRangeLength) ) 


#define ICorProfilerCallback11_ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds)	\
    ( (This)->lpVtbl -> ConditionalWeakTableElementReferences(This,cRootRefs,keyRefIds,valueRefIds,rootIds) ) 


#define ICorProfilerCallback11_GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider)	\
    ( (This)->lpVtbl -> GetAssemblyReferences(This,wszAssemblyPath,pAsmRefProvider) ) 


#define ICorProfilerCallback11_ModuleInMemorySymbolsUpdated(This,moduleId)	\
    ( (This)->lpVtbl -> ModuleInMemorySymbolsUpdated(This,moduleId) ) 


#define ICorProfilerCallback11_DynamicMethodJITCompilationStarted(This,functionId,fIsSafeToBlock,pILHeader,cbILHeader)	\
    ( (This)->lpVtbl -> DynamicMethodJITCompilationStarted(This,functionId,fIsSafeToBlock,pILHeader,cbILHeader) ) 

#define ICorProfilerCallback11_DynamicMethodJITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock)	\
    ( (This)->lpVtbl -> DynamicMethodJITCompilationFinished(This,functionId,hrStatus,fIsSafeToBlock) ) 


#define ICorProfilerCallback11_DynamicMethodUnloaded(This,functionId)	\
    ( (This)->lpVtbl -> DynamicMethodUnloaded(This,functionId) ) 


#define ICorProfilerCallback11_EventPipeEventDelivered(This,provider,eventId,eventVersion,cbMetadataBlob,metadataBlob,cbEventData,eventData,pActivityId,pRelatedActivityId,eventThread,numStackFrames,stackFrames)	\
    ( (This)->lpVtbl -> EventPipeEventDelivered(This,provider,eventId,eventVersion,cbMetadataBlob,metadataBlob,cbEventData,eventData,pActivityId,pRelatedActivityId,eventThread,numStackFrames,stackFrames) ) 

#define ICorProfilerCallback11_EventPipeProviderCreated(This,provider)	\
    ( (This)->lpVtbl -> EventPipeProviderCreated(This,provider) ) 


#define ICorProfilerCallback11_LoadAsNotificationOnly(This,pbNotificationOnly)	\
    ( (This)->lpVtbl -> LoadAsNotificationOnly(This,pbNotificationOnly) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerCallback11_INTERFACE_DEFINED__ */


/* interface __MIDL_itf_corprof_0000_0011 */
/* [local] */ 

typedef /* [public] */ 
enum __MIDL___MIDL_itf_corprof_0000_0011_0001
    {
        COR_PRF_CODEGEN_DISABLE_INLINING	= 0x1,
        COR_PRF_CODEGEN_DISABLE_ALL_OPTIMIZATIONS	= 0x2,
        COR_PRF_CODEGEN_DEBUG_INFO	= 0x3
    } 	COR_PRF_CODEGEN_FLAGS;



extern RPC_IF_HANDLE __MIDL_itf_corprof_0000_0011_v0_0_c_ifspec;
extern RPC_IF_HANDLE __MIDL_itf_corprof_0000_0011_v0_0_s_ifspec;

#ifndef __ICorProfilerInfo_INTERFACE_DEFINED__
#define __ICorProfilerInfo_INTERFACE_DEFINED__

/* interface ICorProfilerInfo */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("28B5557D-3F3F-48b4-90B2-5F9EEA2F6C48")
    ICorProfilerInfo : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetClassFromObject( 
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetClassFromToken( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCodeInfo( 
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetEventMask( 
            /* [out] */ DWORD *pdwEvents) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionFromIP( 
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionFromToken( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetHandleFromThread( 
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetObjectSize( 
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE IsArrayClass( 
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetThreadInfo( 
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCurrentThreadID( 
            /* [out] */ ThreadID *pThreadId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetClassIDInfo( 
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionInfo( 
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetEventMask( 
            /* [in] */ DWORD dwEvents) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetEnterLeaveFunctionHooks( 
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetFunctionIDMapper( 
            /* [in] */ FunctionIDMapper *pFunc) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetTokenAndMetaDataFromFunction( 
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetModuleInfo( 
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetModuleMetaData( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetILFunctionBody( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetILFunctionBodyAllocator( 
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetILFunctionBody( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetAppDomainInfo( 
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetAssemblyInfo( 
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetFunctionReJIT( 
            /* [in] */ FunctionID functionId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ForceGC( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetILInstrumentedCodeMap( 
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetInprocInspectionInterface( 
            /* [out] */ IUnknown **ppicd) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetInprocInspectionIThisThread( 
            /* [out] */ IUnknown **ppicd) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetThreadContext( 
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE BeginInprocDebugging( 
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EndInprocDebugging( 
            /* [in] */ DWORD dwProfilerContext) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetILToNativeMapping( 
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfoVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        END_INTERFACE
    } ICorProfilerInfoVtbl;

    interface ICorProfilerInfo
    {
        CONST_VTBL struct ICorProfilerInfoVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo2_INTERFACE_DEFINED__
#define __ICorProfilerInfo2_INTERFACE_DEFINED__

/* interface ICorProfilerInfo2 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo2;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("CC0935CD-A518-487d-B0BB-A93214E65478")
    ICorProfilerInfo2 : public ICorProfilerInfo
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE DoStackSnapshot( 
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetEnterLeaveFunctionHooks2( 
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionInfo2( 
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetStringLayout( 
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetClassLayout( 
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetClassIDInfo2( 
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCodeInfo2( 
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetClassFromTokenAndTypeArgs( 
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionFromTokenAndTypeArgs( 
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EnumModuleFrozenObjects( 
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetArrayObjectInfo( 
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetBoxClassLayout( 
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetThreadAppDomain( 
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetRVAStaticAddress( 
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetAppDomainStaticAddress( 
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetThreadStaticAddress( 
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetContextStaticAddress( 
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetStaticFieldInfo( 
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetGenerationBounds( 
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetObjectGeneration( 
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetNotifiedExceptionClauseInfo( 
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo2Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo2 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo2 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo2 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo2 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo2 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo2 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo2 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo2 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo2 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo2 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo2 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo2 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo2 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo2 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo2 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo2 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo2 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        END_INTERFACE
    } ICorProfilerInfo2Vtbl;

    interface ICorProfilerInfo2
    {
        CONST_VTBL struct ICorProfilerInfo2Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo2_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo2_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo2_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo2_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo2_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo2_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo2_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo2_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo2_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo2_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo2_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo2_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo2_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo2_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo2_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo2_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo2_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo2_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo2_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo2_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo2_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo2_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo2_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo2_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo2_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo2_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo2_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo2_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo2_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo2_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo2_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo2_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo2_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo2_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo2_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo2_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo2_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo2_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo2_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo2_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo2_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo2_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo2_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo2_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo2_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo2_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo2_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo2_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo2_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo2_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo2_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo2_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo2_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo2_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo2_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo2_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo2_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo2_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo3_INTERFACE_DEFINED__
#define __ICorProfilerInfo3_INTERFACE_DEFINED__

/* interface ICorProfilerInfo3 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo3;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("B555ED4F-452A-4E54-8B39-B5360BAD32A0")
    ICorProfilerInfo3 : public ICorProfilerInfo2
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EnumJITedFunctions( 
            /* [out] */ ICorProfilerFunctionEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RequestProfilerDetach( 
            /* [in] */ DWORD dwExpectedCompletionMilliseconds) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetFunctionIDMapper2( 
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetStringLayout2( 
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetEnterLeaveFunctionHooks3( 
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetEnterLeaveFunctionHooks3WithInfo( 
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionEnter3Info( 
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionLeave3Info( 
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionTailcall3Info( 
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EnumModules( 
            /* [out] */ ICorProfilerModuleEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetRuntimeInformation( 
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetThreadStaticAddress2( 
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetAppDomainsContainingModule( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetModuleInfo2( 
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo3Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo3 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo3 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo3 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo3 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo3 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo3 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo3 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo3 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo3 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo3 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo3 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo3 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo3 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo3 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo3 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo3 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo3 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo3 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo3 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo3 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        END_INTERFACE
    } ICorProfilerInfo3Vtbl;

    interface ICorProfilerInfo3
    {
        CONST_VTBL struct ICorProfilerInfo3Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo3_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo3_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo3_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo3_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo3_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo3_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo3_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo3_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo3_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo3_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo3_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo3_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo3_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo3_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo3_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo3_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo3_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo3_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo3_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo3_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo3_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo3_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo3_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo3_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo3_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo3_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo3_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo3_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo3_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo3_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo3_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo3_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo3_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo3_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo3_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo3_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo3_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo3_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo3_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo3_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo3_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo3_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo3_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo3_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo3_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo3_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo3_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo3_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo3_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo3_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo3_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo3_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo3_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo3_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo3_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo3_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo3_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo3_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo3_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo3_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo3_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo3_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo3_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo3_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo3_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo3_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo3_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo3_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo3_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo3_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo3_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo3_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerObjectEnum_INTERFACE_DEFINED__
#define __ICorProfilerObjectEnum_INTERFACE_DEFINED__

/* interface ICorProfilerObjectEnum */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerObjectEnum;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("2C6269BD-2D13-4321-AE12-6686365FD6AF")
    ICorProfilerObjectEnum : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Skip( 
            /* [in] */ ULONG celt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Clone( 
            /* [out] */ ICorProfilerObjectEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCount( 
            /* [out] */ ULONG *pcelt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Next( 
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ ObjectID objects[  ],
            /* [out] */ ULONG *pceltFetched) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerObjectEnumVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerObjectEnum * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerObjectEnum * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerObjectEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerObjectEnum, Skip)
        HRESULT ( STDMETHODCALLTYPE *Skip )( 
            ICorProfilerObjectEnum * This,
            /* [in] */ ULONG celt);
        
        DECLSPEC_XFGVIRT(ICorProfilerObjectEnum, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ICorProfilerObjectEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerObjectEnum, Clone)
        HRESULT ( STDMETHODCALLTYPE *Clone )( 
            ICorProfilerObjectEnum * This,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerObjectEnum, GetCount)
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            ICorProfilerObjectEnum * This,
            /* [out] */ ULONG *pcelt);
        
        DECLSPEC_XFGVIRT(ICorProfilerObjectEnum, Next)
        HRESULT ( STDMETHODCALLTYPE *Next )( 
            ICorProfilerObjectEnum * This,
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ ObjectID objects[  ],
            /* [out] */ ULONG *pceltFetched);
        
        END_INTERFACE
    } ICorProfilerObjectEnumVtbl;

    interface ICorProfilerObjectEnum
    {
        CONST_VTBL struct ICorProfilerObjectEnumVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerObjectEnum_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerObjectEnum_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerObjectEnum_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerObjectEnum_Skip(This,celt)	\
    ( (This)->lpVtbl -> Skip(This,celt) ) 

#define ICorProfilerObjectEnum_Reset(This)	\
    ( (This)->lpVtbl -> Reset(This) ) 

#define ICorProfilerObjectEnum_Clone(This,ppEnum)	\
    ( (This)->lpVtbl -> Clone(This,ppEnum) ) 

#define ICorProfilerObjectEnum_GetCount(This,pcelt)	\
    ( (This)->lpVtbl -> GetCount(This,pcelt) ) 

#define ICorProfilerObjectEnum_Next(This,celt,objects,pceltFetched)	\
    ( (This)->lpVtbl -> Next(This,celt,objects,pceltFetched) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerObjectEnum_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerFunctionEnum_INTERFACE_DEFINED__
#define __ICorProfilerFunctionEnum_INTERFACE_DEFINED__

/* interface ICorProfilerFunctionEnum */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerFunctionEnum;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("FF71301A-B994-429D-A10B-B345A65280EF")
    ICorProfilerFunctionEnum : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Skip( 
            /* [in] */ ULONG celt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Clone( 
            /* [out] */ ICorProfilerFunctionEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCount( 
            /* [out] */ ULONG *pcelt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Next( 
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ COR_PRF_FUNCTION ids[  ],
            /* [out] */ ULONG *pceltFetched) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerFunctionEnumVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerFunctionEnum * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerFunctionEnum * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerFunctionEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerFunctionEnum, Skip)
        HRESULT ( STDMETHODCALLTYPE *Skip )( 
            ICorProfilerFunctionEnum * This,
            /* [in] */ ULONG celt);
        
        DECLSPEC_XFGVIRT(ICorProfilerFunctionEnum, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ICorProfilerFunctionEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerFunctionEnum, Clone)
        HRESULT ( STDMETHODCALLTYPE *Clone )( 
            ICorProfilerFunctionEnum * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerFunctionEnum, GetCount)
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            ICorProfilerFunctionEnum * This,
            /* [out] */ ULONG *pcelt);
        
        DECLSPEC_XFGVIRT(ICorProfilerFunctionEnum, Next)
        HRESULT ( STDMETHODCALLTYPE *Next )( 
            ICorProfilerFunctionEnum * This,
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ COR_PRF_FUNCTION ids[  ],
            /* [out] */ ULONG *pceltFetched);
        
        END_INTERFACE
    } ICorProfilerFunctionEnumVtbl;

    interface ICorProfilerFunctionEnum
    {
        CONST_VTBL struct ICorProfilerFunctionEnumVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerFunctionEnum_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerFunctionEnum_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerFunctionEnum_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerFunctionEnum_Skip(This,celt)	\
    ( (This)->lpVtbl -> Skip(This,celt) ) 

#define ICorProfilerFunctionEnum_Reset(This)	\
    ( (This)->lpVtbl -> Reset(This) ) 

#define ICorProfilerFunctionEnum_Clone(This,ppEnum)	\
    ( (This)->lpVtbl -> Clone(This,ppEnum) ) 

#define ICorProfilerFunctionEnum_GetCount(This,pcelt)	\
    ( (This)->lpVtbl -> GetCount(This,pcelt) ) 

#define ICorProfilerFunctionEnum_Next(This,celt,ids,pceltFetched)	\
    ( (This)->lpVtbl -> Next(This,celt,ids,pceltFetched) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerFunctionEnum_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerModuleEnum_INTERFACE_DEFINED__
#define __ICorProfilerModuleEnum_INTERFACE_DEFINED__

/* interface ICorProfilerModuleEnum */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerModuleEnum;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("b0266d75-2081-4493-af7f-028ba34db891")
    ICorProfilerModuleEnum : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Skip( 
            /* [in] */ ULONG celt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Clone( 
            /* [out] */ ICorProfilerModuleEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCount( 
            /* [out] */ ULONG *pcelt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Next( 
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ ModuleID ids[  ],
            /* [out] */ ULONG *pceltFetched) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerModuleEnumVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerModuleEnum * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerModuleEnum * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerModuleEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerModuleEnum, Skip)
        HRESULT ( STDMETHODCALLTYPE *Skip )( 
            ICorProfilerModuleEnum * This,
            /* [in] */ ULONG celt);
        
        DECLSPEC_XFGVIRT(ICorProfilerModuleEnum, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ICorProfilerModuleEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerModuleEnum, Clone)
        HRESULT ( STDMETHODCALLTYPE *Clone )( 
            ICorProfilerModuleEnum * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerModuleEnum, GetCount)
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            ICorProfilerModuleEnum * This,
            /* [out] */ ULONG *pcelt);
        
        DECLSPEC_XFGVIRT(ICorProfilerModuleEnum, Next)
        HRESULT ( STDMETHODCALLTYPE *Next )( 
            ICorProfilerModuleEnum * This,
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ ModuleID ids[  ],
            /* [out] */ ULONG *pceltFetched);
        
        END_INTERFACE
    } ICorProfilerModuleEnumVtbl;

    interface ICorProfilerModuleEnum
    {
        CONST_VTBL struct ICorProfilerModuleEnumVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerModuleEnum_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerModuleEnum_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerModuleEnum_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerModuleEnum_Skip(This,celt)	\
    ( (This)->lpVtbl -> Skip(This,celt) ) 

#define ICorProfilerModuleEnum_Reset(This)	\
    ( (This)->lpVtbl -> Reset(This) ) 

#define ICorProfilerModuleEnum_Clone(This,ppEnum)	\
    ( (This)->lpVtbl -> Clone(This,ppEnum) ) 

#define ICorProfilerModuleEnum_GetCount(This,pcelt)	\
    ( (This)->lpVtbl -> GetCount(This,pcelt) ) 

#define ICorProfilerModuleEnum_Next(This,celt,ids,pceltFetched)	\
    ( (This)->lpVtbl -> Next(This,celt,ids,pceltFetched) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerModuleEnum_INTERFACE_DEFINED__ */


#ifndef __IMethodMalloc_INTERFACE_DEFINED__
#define __IMethodMalloc_INTERFACE_DEFINED__

/* interface IMethodMalloc */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_IMethodMalloc;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("A0EFB28B-6EE2-4d7b-B983-A75EF7BEEDB8")
    IMethodMalloc : public IUnknown
    {
    public:
        virtual PVOID STDMETHODCALLTYPE Alloc( 
            /* [in] */ ULONG cb) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct IMethodMallocVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IMethodMalloc * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IMethodMalloc * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IMethodMalloc * This);
        
        DECLSPEC_XFGVIRT(IMethodMalloc, Alloc)
        PVOID ( STDMETHODCALLTYPE *Alloc )( 
            IMethodMalloc * This,
            /* [in] */ ULONG cb);
        
        END_INTERFACE
    } IMethodMallocVtbl;

    interface IMethodMalloc
    {
        CONST_VTBL struct IMethodMallocVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IMethodMalloc_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define IMethodMalloc_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define IMethodMalloc_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define IMethodMalloc_Alloc(This,cb)	\
    ( (This)->lpVtbl -> Alloc(This,cb) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __IMethodMalloc_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerFunctionControl_INTERFACE_DEFINED__
#define __ICorProfilerFunctionControl_INTERFACE_DEFINED__

/* interface ICorProfilerFunctionControl */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerFunctionControl;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("F0963021-E1EA-4732-8581-E01B0BD3C0C6")
    ICorProfilerFunctionControl : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE SetCodegenFlags( 
            /* [in] */ DWORD flags) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetILFunctionBody( 
            /* [in] */ ULONG cbNewILMethodHeader,
            /* [size_is][in] */ LPCBYTE pbNewILMethodHeader) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetILInstrumentedCodeMap( 
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerFunctionControlVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerFunctionControl * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerFunctionControl * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerFunctionControl * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerFunctionControl, SetCodegenFlags)
        HRESULT ( STDMETHODCALLTYPE *SetCodegenFlags )( 
            ICorProfilerFunctionControl * This,
            /* [in] */ DWORD flags);
        
        DECLSPEC_XFGVIRT(ICorProfilerFunctionControl, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerFunctionControl * This,
            /* [in] */ ULONG cbNewILMethodHeader,
            /* [size_is][in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerFunctionControl, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerFunctionControl * This,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        END_INTERFACE
    } ICorProfilerFunctionControlVtbl;

    interface ICorProfilerFunctionControl
    {
        CONST_VTBL struct ICorProfilerFunctionControlVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerFunctionControl_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerFunctionControl_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerFunctionControl_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerFunctionControl_SetCodegenFlags(This,flags)	\
    ( (This)->lpVtbl -> SetCodegenFlags(This,flags) ) 

#define ICorProfilerFunctionControl_SetILFunctionBody(This,cbNewILMethodHeader,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,cbNewILMethodHeader,pbNewILMethodHeader) ) 

#define ICorProfilerFunctionControl_SetILInstrumentedCodeMap(This,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,cILMapEntries,rgILMapEntries) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerFunctionControl_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo4_INTERFACE_DEFINED__
#define __ICorProfilerInfo4_INTERFACE_DEFINED__

/* interface ICorProfilerInfo4 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo4;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("0d8fdcaa-6257-47bf-b1bf-94dac88466ee")
    ICorProfilerInfo4 : public ICorProfilerInfo3
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EnumThreads( 
            /* [out] */ ICorProfilerThreadEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE InitializeCurrentThread( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RequestReJIT( 
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RequestRevert( 
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCodeInfo3( 
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionFromIP2( 
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetReJITIDs( 
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetILToNativeMapping2( 
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EnumJITedFunctions2( 
            /* [out] */ ICorProfilerFunctionEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetObjectSize2( 
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo4Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo4 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo4 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo4 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo4 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo4 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo4 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo4 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo4 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo4 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo4 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo4 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo4 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo4 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo4 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo4 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo4 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo4 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo4 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo4 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo4 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo4 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        END_INTERFACE
    } ICorProfilerInfo4Vtbl;

    interface ICorProfilerInfo4
    {
        CONST_VTBL struct ICorProfilerInfo4Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo4_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo4_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo4_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo4_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo4_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo4_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo4_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo4_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo4_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo4_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo4_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo4_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo4_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo4_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo4_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo4_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo4_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo4_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo4_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo4_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo4_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo4_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo4_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo4_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo4_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo4_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo4_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo4_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo4_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo4_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo4_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo4_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo4_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo4_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo4_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo4_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo4_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo4_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo4_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo4_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo4_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo4_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo4_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo4_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo4_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo4_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo4_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo4_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo4_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo4_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo4_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo4_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo4_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo4_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo4_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo4_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo4_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo4_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo4_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo4_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo4_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo4_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo4_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo4_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo4_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo4_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo4_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo4_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo4_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo4_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo4_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo4_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo4_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo4_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo4_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo4_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo4_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo4_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo4_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo4_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo4_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo4_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo5_INTERFACE_DEFINED__
#define __ICorProfilerInfo5_INTERFACE_DEFINED__

/* interface ICorProfilerInfo5 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo5;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("07602928-CE38-4B83-81E7-74ADAF781214")
    ICorProfilerInfo5 : public ICorProfilerInfo4
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetEventMask2( 
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetEventMask2( 
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo5Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo5 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo5 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo5 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo5 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo5 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo5 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo5 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo5 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo5 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo5 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo5 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo5 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo5 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo5 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo5 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo5 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo5 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo5 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo5 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo5 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo5 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo5 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        END_INTERFACE
    } ICorProfilerInfo5Vtbl;

    interface ICorProfilerInfo5
    {
        CONST_VTBL struct ICorProfilerInfo5Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo5_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo5_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo5_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo5_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo5_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo5_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo5_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo5_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo5_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo5_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo5_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo5_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo5_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo5_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo5_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo5_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo5_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo5_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo5_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo5_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo5_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo5_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo5_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo5_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo5_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo5_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo5_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo5_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo5_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo5_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo5_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo5_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo5_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo5_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo5_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo5_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo5_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo5_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo5_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo5_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo5_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo5_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo5_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo5_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo5_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo5_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo5_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo5_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo5_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo5_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo5_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo5_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo5_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo5_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo5_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo5_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo5_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo5_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo5_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo5_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo5_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo5_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo5_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo5_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo5_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo5_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo5_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo5_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo5_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo5_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo5_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo5_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo5_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo5_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo5_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo5_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo5_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo5_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo5_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo5_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo5_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo5_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo5_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo5_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo6_INTERFACE_DEFINED__
#define __ICorProfilerInfo6_INTERFACE_DEFINED__

/* interface ICorProfilerInfo6 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo6;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("F30A070D-BFFB-46A7-B1D8-8781EF7B698A")
    ICorProfilerInfo6 : public ICorProfilerInfo5
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EnumNgenModuleMethodsInliningThisMethod( 
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo6Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo6 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo6 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo6 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo6 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo6 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo6 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo6 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo6 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo6 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo6 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo6 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo6 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo6 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo6 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo6 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo6 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo6 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo6 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo6 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo6 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo6 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo6 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo6 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        END_INTERFACE
    } ICorProfilerInfo6Vtbl;

    interface ICorProfilerInfo6
    {
        CONST_VTBL struct ICorProfilerInfo6Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo6_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo6_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo6_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo6_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo6_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo6_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo6_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo6_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo6_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo6_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo6_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo6_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo6_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo6_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo6_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo6_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo6_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo6_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo6_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo6_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo6_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo6_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo6_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo6_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo6_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo6_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo6_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo6_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo6_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo6_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo6_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo6_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo6_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo6_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo6_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo6_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo6_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo6_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo6_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo6_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo6_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo6_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo6_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo6_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo6_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo6_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo6_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo6_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo6_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo6_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo6_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo6_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo6_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo6_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo6_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo6_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo6_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo6_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo6_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo6_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo6_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo6_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo6_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo6_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo6_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo6_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo6_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo6_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo6_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo6_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo6_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo6_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo6_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo6_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo6_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo6_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo6_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo6_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo6_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo6_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo6_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo6_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo6_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo6_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo6_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo7_INTERFACE_DEFINED__
#define __ICorProfilerInfo7_INTERFACE_DEFINED__

/* interface ICorProfilerInfo7 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo7;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("9AEECC0D-63E0-4187-8C00-E312F503F663")
    ICorProfilerInfo7 : public ICorProfilerInfo6
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE ApplyMetaData( 
            /* [in] */ ModuleID moduleId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetInMemorySymbolsLength( 
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ReadInMemorySymbols( 
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo7Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo7 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo7 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo7 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo7 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo7 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo7 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo7 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo7 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo7 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo7 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo7 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo7 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo7 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo7 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo7 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo7 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo7 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo7 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo7 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo7 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo7 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo7 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ApplyMetaData)
        HRESULT ( STDMETHODCALLTYPE *ApplyMetaData )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, GetInMemorySymbolsLength)
        HRESULT ( STDMETHODCALLTYPE *GetInMemorySymbolsLength )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ReadInMemorySymbols)
        HRESULT ( STDMETHODCALLTYPE *ReadInMemorySymbols )( 
            ICorProfilerInfo7 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead);
        
        END_INTERFACE
    } ICorProfilerInfo7Vtbl;

    interface ICorProfilerInfo7
    {
        CONST_VTBL struct ICorProfilerInfo7Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo7_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo7_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo7_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo7_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo7_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo7_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo7_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo7_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo7_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo7_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo7_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo7_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo7_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo7_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo7_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo7_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo7_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo7_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo7_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo7_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo7_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo7_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo7_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo7_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo7_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo7_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo7_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo7_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo7_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo7_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo7_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo7_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo7_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo7_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo7_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo7_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo7_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo7_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo7_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo7_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo7_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo7_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo7_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo7_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo7_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo7_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo7_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo7_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo7_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo7_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo7_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo7_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo7_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo7_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo7_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo7_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo7_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo7_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo7_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo7_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo7_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo7_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo7_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo7_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo7_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo7_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo7_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo7_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo7_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo7_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo7_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo7_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo7_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo7_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo7_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo7_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo7_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo7_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo7_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo7_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo7_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo7_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo7_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo7_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 


#define ICorProfilerInfo7_ApplyMetaData(This,moduleId)	\
    ( (This)->lpVtbl -> ApplyMetaData(This,moduleId) ) 

#define ICorProfilerInfo7_GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes)	\
    ( (This)->lpVtbl -> GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes) ) 

#define ICorProfilerInfo7_ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead)	\
    ( (This)->lpVtbl -> ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo7_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo8_INTERFACE_DEFINED__
#define __ICorProfilerInfo8_INTERFACE_DEFINED__

/* interface ICorProfilerInfo8 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo8;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("C5AC80A6-782E-4716-8044-39598C60CFBF")
    ICorProfilerInfo8 : public ICorProfilerInfo7
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE IsFunctionDynamic( 
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *isDynamic) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetFunctionFromIP3( 
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *functionId,
            /* [out] */ ReJITID *pReJitId) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetDynamicFunctionInfo( 
            /* [in] */ FunctionID functionId,
            /* [out] */ ModuleID *moduleId,
            /* [out] */ PCCOR_SIGNATURE *ppvSig,
            /* [out] */ ULONG *pbSig,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [out] */ WCHAR wszName[  ]) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo8Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo8 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo8 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo8 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo8 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo8 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo8 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo8 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo8 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo8 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo8 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo8 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo8 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo8 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo8 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo8 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo8 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo8 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo8 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo8 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo8 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo8 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ApplyMetaData)
        HRESULT ( STDMETHODCALLTYPE *ApplyMetaData )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, GetInMemorySymbolsLength)
        HRESULT ( STDMETHODCALLTYPE *GetInMemorySymbolsLength )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ReadInMemorySymbols)
        HRESULT ( STDMETHODCALLTYPE *ReadInMemorySymbols )( 
            ICorProfilerInfo8 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, IsFunctionDynamic)
        HRESULT ( STDMETHODCALLTYPE *IsFunctionDynamic )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *isDynamic);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetFunctionFromIP3)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP3 )( 
            ICorProfilerInfo8 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *functionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetDynamicFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetDynamicFunctionInfo )( 
            ICorProfilerInfo8 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ModuleID *moduleId,
            /* [out] */ PCCOR_SIGNATURE *ppvSig,
            /* [out] */ ULONG *pbSig,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [out] */ WCHAR wszName[  ]);
        
        END_INTERFACE
    } ICorProfilerInfo8Vtbl;

    interface ICorProfilerInfo8
    {
        CONST_VTBL struct ICorProfilerInfo8Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo8_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo8_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo8_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo8_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo8_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo8_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo8_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo8_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo8_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo8_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo8_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo8_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo8_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo8_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo8_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo8_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo8_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo8_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo8_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo8_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo8_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo8_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo8_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo8_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo8_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo8_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo8_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo8_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo8_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo8_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo8_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo8_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo8_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo8_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo8_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo8_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo8_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo8_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo8_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo8_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo8_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo8_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo8_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo8_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo8_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo8_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo8_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo8_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo8_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo8_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo8_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo8_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo8_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo8_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo8_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo8_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo8_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo8_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo8_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo8_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo8_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo8_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo8_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo8_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo8_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo8_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo8_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo8_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo8_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo8_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo8_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo8_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo8_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo8_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo8_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo8_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo8_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo8_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo8_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo8_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo8_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo8_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo8_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo8_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 


#define ICorProfilerInfo8_ApplyMetaData(This,moduleId)	\
    ( (This)->lpVtbl -> ApplyMetaData(This,moduleId) ) 

#define ICorProfilerInfo8_GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes)	\
    ( (This)->lpVtbl -> GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes) ) 

#define ICorProfilerInfo8_ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead)	\
    ( (This)->lpVtbl -> ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead) ) 


#define ICorProfilerInfo8_IsFunctionDynamic(This,functionId,isDynamic)	\
    ( (This)->lpVtbl -> IsFunctionDynamic(This,functionId,isDynamic) ) 

#define ICorProfilerInfo8_GetFunctionFromIP3(This,ip,functionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP3(This,ip,functionId,pReJitId) ) 

#define ICorProfilerInfo8_GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName)	\
    ( (This)->lpVtbl -> GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo8_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo9_INTERFACE_DEFINED__
#define __ICorProfilerInfo9_INTERFACE_DEFINED__

/* interface ICorProfilerInfo9 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo9;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("008170DB-F8CC-4796-9A51-DC8AA0B47012")
    ICorProfilerInfo9 : public ICorProfilerInfo8
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetNativeCodeStartAddresses( 
            FunctionID functionID,
            ReJITID reJitId,
            ULONG32 cCodeStartAddresses,
            ULONG32 *pcCodeStartAddresses,
            UINT_PTR codeStartAddresses[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetILToNativeMapping3( 
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cMap,
            ULONG32 *pcMap,
            COR_DEBUG_IL_TO_NATIVE_MAP map[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCodeInfo4( 
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cCodeInfos,
            ULONG32 *pcCodeInfos,
            COR_PRF_CODE_INFO codeInfos[  ]) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo9Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo9 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo9 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo9 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo9 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo9 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo9 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo9 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo9 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo9 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo9 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo9 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo9 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo9 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo9 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo9 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo9 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo9 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo9 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo9 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo9 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo9 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ApplyMetaData)
        HRESULT ( STDMETHODCALLTYPE *ApplyMetaData )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, GetInMemorySymbolsLength)
        HRESULT ( STDMETHODCALLTYPE *GetInMemorySymbolsLength )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ReadInMemorySymbols)
        HRESULT ( STDMETHODCALLTYPE *ReadInMemorySymbols )( 
            ICorProfilerInfo9 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, IsFunctionDynamic)
        HRESULT ( STDMETHODCALLTYPE *IsFunctionDynamic )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *isDynamic);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetFunctionFromIP3)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP3 )( 
            ICorProfilerInfo9 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *functionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetDynamicFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetDynamicFunctionInfo )( 
            ICorProfilerInfo9 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ModuleID *moduleId,
            /* [out] */ PCCOR_SIGNATURE *ppvSig,
            /* [out] */ ULONG *pbSig,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [out] */ WCHAR wszName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetNativeCodeStartAddresses)
        HRESULT ( STDMETHODCALLTYPE *GetNativeCodeStartAddresses )( 
            ICorProfilerInfo9 * This,
            FunctionID functionID,
            ReJITID reJitId,
            ULONG32 cCodeStartAddresses,
            ULONG32 *pcCodeStartAddresses,
            UINT_PTR codeStartAddresses[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetILToNativeMapping3)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping3 )( 
            ICorProfilerInfo9 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cMap,
            ULONG32 *pcMap,
            COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetCodeInfo4)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo4 )( 
            ICorProfilerInfo9 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cCodeInfos,
            ULONG32 *pcCodeInfos,
            COR_PRF_CODE_INFO codeInfos[  ]);
        
        END_INTERFACE
    } ICorProfilerInfo9Vtbl;

    interface ICorProfilerInfo9
    {
        CONST_VTBL struct ICorProfilerInfo9Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo9_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo9_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo9_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo9_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo9_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo9_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo9_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo9_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo9_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo9_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo9_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo9_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo9_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo9_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo9_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo9_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo9_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo9_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo9_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo9_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo9_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo9_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo9_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo9_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo9_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo9_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo9_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo9_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo9_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo9_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo9_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo9_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo9_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo9_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo9_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo9_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo9_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo9_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo9_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo9_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo9_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo9_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo9_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo9_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo9_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo9_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo9_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo9_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo9_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo9_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo9_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo9_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo9_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo9_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo9_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo9_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo9_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo9_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo9_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo9_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo9_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo9_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo9_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo9_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo9_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo9_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo9_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo9_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo9_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo9_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo9_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo9_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo9_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo9_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo9_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo9_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo9_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo9_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo9_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo9_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo9_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo9_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo9_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo9_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 


#define ICorProfilerInfo9_ApplyMetaData(This,moduleId)	\
    ( (This)->lpVtbl -> ApplyMetaData(This,moduleId) ) 

#define ICorProfilerInfo9_GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes)	\
    ( (This)->lpVtbl -> GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes) ) 

#define ICorProfilerInfo9_ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead)	\
    ( (This)->lpVtbl -> ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead) ) 


#define ICorProfilerInfo9_IsFunctionDynamic(This,functionId,isDynamic)	\
    ( (This)->lpVtbl -> IsFunctionDynamic(This,functionId,isDynamic) ) 

#define ICorProfilerInfo9_GetFunctionFromIP3(This,ip,functionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP3(This,ip,functionId,pReJitId) ) 

#define ICorProfilerInfo9_GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName)	\
    ( (This)->lpVtbl -> GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName) ) 


#define ICorProfilerInfo9_GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses)	\
    ( (This)->lpVtbl -> GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses) ) 

#define ICorProfilerInfo9_GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map) ) 

#define ICorProfilerInfo9_GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo9_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo10_INTERFACE_DEFINED__
#define __ICorProfilerInfo10_INTERFACE_DEFINED__

/* interface ICorProfilerInfo10 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo10;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("2F1B5152-C869-40C9-AA5F-3ABE026BD720")
    ICorProfilerInfo10 : public ICorProfilerInfo9
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EnumerateObjectReferences( 
            ObjectID objectId,
            ObjectReferenceCallback callback,
            void *clientData) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE IsFrozenObject( 
            ObjectID objectId,
            BOOL *pbFrozen) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetLOHObjectSizeThreshold( 
            DWORD *pThreshold) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE RequestReJITWithInliners( 
            /* [in] */ DWORD dwRejitFlags,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SuspendRuntime( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE ResumeRuntime( void) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo10Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo10 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo10 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo10 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo10 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo10 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo10 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo10 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo10 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo10 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo10 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo10 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo10 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo10 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo10 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo10 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo10 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo10 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo10 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo10 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo10 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ApplyMetaData)
        HRESULT ( STDMETHODCALLTYPE *ApplyMetaData )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, GetInMemorySymbolsLength)
        HRESULT ( STDMETHODCALLTYPE *GetInMemorySymbolsLength )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ReadInMemorySymbols)
        HRESULT ( STDMETHODCALLTYPE *ReadInMemorySymbols )( 
            ICorProfilerInfo10 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, IsFunctionDynamic)
        HRESULT ( STDMETHODCALLTYPE *IsFunctionDynamic )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *isDynamic);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetFunctionFromIP3)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP3 )( 
            ICorProfilerInfo10 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *functionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetDynamicFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetDynamicFunctionInfo )( 
            ICorProfilerInfo10 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ModuleID *moduleId,
            /* [out] */ PCCOR_SIGNATURE *ppvSig,
            /* [out] */ ULONG *pbSig,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [out] */ WCHAR wszName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetNativeCodeStartAddresses)
        HRESULT ( STDMETHODCALLTYPE *GetNativeCodeStartAddresses )( 
            ICorProfilerInfo10 * This,
            FunctionID functionID,
            ReJITID reJitId,
            ULONG32 cCodeStartAddresses,
            ULONG32 *pcCodeStartAddresses,
            UINT_PTR codeStartAddresses[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetILToNativeMapping3)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping3 )( 
            ICorProfilerInfo10 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cMap,
            ULONG32 *pcMap,
            COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetCodeInfo4)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo4 )( 
            ICorProfilerInfo10 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cCodeInfos,
            ULONG32 *pcCodeInfos,
            COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, EnumerateObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *EnumerateObjectReferences )( 
            ICorProfilerInfo10 * This,
            ObjectID objectId,
            ObjectReferenceCallback callback,
            void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, IsFrozenObject)
        HRESULT ( STDMETHODCALLTYPE *IsFrozenObject )( 
            ICorProfilerInfo10 * This,
            ObjectID objectId,
            BOOL *pbFrozen);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, GetLOHObjectSizeThreshold)
        HRESULT ( STDMETHODCALLTYPE *GetLOHObjectSizeThreshold )( 
            ICorProfilerInfo10 * This,
            DWORD *pThreshold);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, RequestReJITWithInliners)
        HRESULT ( STDMETHODCALLTYPE *RequestReJITWithInliners )( 
            ICorProfilerInfo10 * This,
            /* [in] */ DWORD dwRejitFlags,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, SuspendRuntime)
        HRESULT ( STDMETHODCALLTYPE *SuspendRuntime )( 
            ICorProfilerInfo10 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, ResumeRuntime)
        HRESULT ( STDMETHODCALLTYPE *ResumeRuntime )( 
            ICorProfilerInfo10 * This);
        
        END_INTERFACE
    } ICorProfilerInfo10Vtbl;

    interface ICorProfilerInfo10
    {
        CONST_VTBL struct ICorProfilerInfo10Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo10_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo10_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo10_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo10_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo10_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo10_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo10_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo10_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo10_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo10_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo10_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo10_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo10_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo10_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo10_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo10_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo10_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo10_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo10_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo10_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo10_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo10_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo10_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo10_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo10_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo10_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo10_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo10_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo10_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo10_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo10_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo10_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo10_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo10_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo10_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo10_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo10_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo10_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo10_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo10_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo10_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo10_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo10_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo10_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo10_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo10_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo10_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo10_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo10_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo10_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo10_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo10_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo10_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo10_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo10_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo10_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo10_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo10_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo10_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo10_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo10_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo10_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo10_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo10_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo10_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo10_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo10_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo10_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo10_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo10_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo10_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo10_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo10_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo10_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo10_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo10_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo10_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo10_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo10_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo10_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo10_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo10_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo10_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo10_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 


#define ICorProfilerInfo10_ApplyMetaData(This,moduleId)	\
    ( (This)->lpVtbl -> ApplyMetaData(This,moduleId) ) 

#define ICorProfilerInfo10_GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes)	\
    ( (This)->lpVtbl -> GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes) ) 

#define ICorProfilerInfo10_ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead)	\
    ( (This)->lpVtbl -> ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead) ) 


#define ICorProfilerInfo10_IsFunctionDynamic(This,functionId,isDynamic)	\
    ( (This)->lpVtbl -> IsFunctionDynamic(This,functionId,isDynamic) ) 

#define ICorProfilerInfo10_GetFunctionFromIP3(This,ip,functionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP3(This,ip,functionId,pReJitId) ) 

#define ICorProfilerInfo10_GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName)	\
    ( (This)->lpVtbl -> GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName) ) 


#define ICorProfilerInfo10_GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses)	\
    ( (This)->lpVtbl -> GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses) ) 

#define ICorProfilerInfo10_GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map) ) 

#define ICorProfilerInfo10_GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos) ) 


#define ICorProfilerInfo10_EnumerateObjectReferences(This,objectId,callback,clientData)	\
    ( (This)->lpVtbl -> EnumerateObjectReferences(This,objectId,callback,clientData) ) 

#define ICorProfilerInfo10_IsFrozenObject(This,objectId,pbFrozen)	\
    ( (This)->lpVtbl -> IsFrozenObject(This,objectId,pbFrozen) ) 

#define ICorProfilerInfo10_GetLOHObjectSizeThreshold(This,pThreshold)	\
    ( (This)->lpVtbl -> GetLOHObjectSizeThreshold(This,pThreshold) ) 

#define ICorProfilerInfo10_RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo10_SuspendRuntime(This)	\
    ( (This)->lpVtbl -> SuspendRuntime(This) ) 

#define ICorProfilerInfo10_ResumeRuntime(This)	\
    ( (This)->lpVtbl -> ResumeRuntime(This) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo10_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo11_INTERFACE_DEFINED__
#define __ICorProfilerInfo11_INTERFACE_DEFINED__

/* interface ICorProfilerInfo11 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo11;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("06398876-8987-4154-B621-40A00D6E4D04")
    ICorProfilerInfo11 : public ICorProfilerInfo10
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE GetEnvironmentVariable( 
            /* [string][in] */ const WCHAR *szName,
            /* [in] */ ULONG cchValue,
            /* [out] */ ULONG *pcchValue,
            /* [annotation][out] */ 
            _Out_writes_to_(cchValue, *pcchValue)  WCHAR szValue[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE SetEnvironmentVariable( 
            /* [string][in] */ const WCHAR *szName,
            /* [string][in] */ const WCHAR *szValue) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo11Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo11 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo11 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo11 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo11 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo11 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo11 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo11 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo11 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo11 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo11 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo11 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo11 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo11 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo11 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo11 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo11 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo11 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo11 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo11 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo11 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ApplyMetaData)
        HRESULT ( STDMETHODCALLTYPE *ApplyMetaData )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, GetInMemorySymbolsLength)
        HRESULT ( STDMETHODCALLTYPE *GetInMemorySymbolsLength )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ReadInMemorySymbols)
        HRESULT ( STDMETHODCALLTYPE *ReadInMemorySymbols )( 
            ICorProfilerInfo11 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, IsFunctionDynamic)
        HRESULT ( STDMETHODCALLTYPE *IsFunctionDynamic )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *isDynamic);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetFunctionFromIP3)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP3 )( 
            ICorProfilerInfo11 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *functionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetDynamicFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetDynamicFunctionInfo )( 
            ICorProfilerInfo11 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ModuleID *moduleId,
            /* [out] */ PCCOR_SIGNATURE *ppvSig,
            /* [out] */ ULONG *pbSig,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [out] */ WCHAR wszName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetNativeCodeStartAddresses)
        HRESULT ( STDMETHODCALLTYPE *GetNativeCodeStartAddresses )( 
            ICorProfilerInfo11 * This,
            FunctionID functionID,
            ReJITID reJitId,
            ULONG32 cCodeStartAddresses,
            ULONG32 *pcCodeStartAddresses,
            UINT_PTR codeStartAddresses[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetILToNativeMapping3)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping3 )( 
            ICorProfilerInfo11 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cMap,
            ULONG32 *pcMap,
            COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetCodeInfo4)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo4 )( 
            ICorProfilerInfo11 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cCodeInfos,
            ULONG32 *pcCodeInfos,
            COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, EnumerateObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *EnumerateObjectReferences )( 
            ICorProfilerInfo11 * This,
            ObjectID objectId,
            ObjectReferenceCallback callback,
            void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, IsFrozenObject)
        HRESULT ( STDMETHODCALLTYPE *IsFrozenObject )( 
            ICorProfilerInfo11 * This,
            ObjectID objectId,
            BOOL *pbFrozen);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, GetLOHObjectSizeThreshold)
        HRESULT ( STDMETHODCALLTYPE *GetLOHObjectSizeThreshold )( 
            ICorProfilerInfo11 * This,
            DWORD *pThreshold);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, RequestReJITWithInliners)
        HRESULT ( STDMETHODCALLTYPE *RequestReJITWithInliners )( 
            ICorProfilerInfo11 * This,
            /* [in] */ DWORD dwRejitFlags,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, SuspendRuntime)
        HRESULT ( STDMETHODCALLTYPE *SuspendRuntime )( 
            ICorProfilerInfo11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, ResumeRuntime)
        HRESULT ( STDMETHODCALLTYPE *ResumeRuntime )( 
            ICorProfilerInfo11 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, GetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *GetEnvironmentVariable )( 
            ICorProfilerInfo11 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [in] */ ULONG cchValue,
            /* [out] */ ULONG *pcchValue,
            /* [annotation][out] */ 
            _Out_writes_to_(cchValue, *pcchValue)  WCHAR szValue[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, SetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *SetEnvironmentVariable )( 
            ICorProfilerInfo11 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [string][in] */ const WCHAR *szValue);
        
        END_INTERFACE
    } ICorProfilerInfo11Vtbl;

    interface ICorProfilerInfo11
    {
        CONST_VTBL struct ICorProfilerInfo11Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo11_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo11_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo11_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo11_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo11_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo11_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo11_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo11_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo11_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo11_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo11_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo11_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo11_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo11_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo11_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo11_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo11_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo11_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo11_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo11_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo11_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo11_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo11_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo11_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo11_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo11_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo11_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo11_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo11_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo11_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo11_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo11_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo11_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo11_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo11_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo11_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo11_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo11_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo11_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo11_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo11_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo11_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo11_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo11_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo11_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo11_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo11_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo11_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo11_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo11_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo11_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo11_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo11_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo11_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo11_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo11_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo11_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo11_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo11_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo11_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo11_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo11_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo11_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo11_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo11_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo11_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo11_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo11_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo11_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo11_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo11_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo11_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo11_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo11_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo11_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo11_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo11_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo11_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo11_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo11_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo11_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo11_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo11_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo11_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 


#define ICorProfilerInfo11_ApplyMetaData(This,moduleId)	\
    ( (This)->lpVtbl -> ApplyMetaData(This,moduleId) ) 

#define ICorProfilerInfo11_GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes)	\
    ( (This)->lpVtbl -> GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes) ) 

#define ICorProfilerInfo11_ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead)	\
    ( (This)->lpVtbl -> ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead) ) 


#define ICorProfilerInfo11_IsFunctionDynamic(This,functionId,isDynamic)	\
    ( (This)->lpVtbl -> IsFunctionDynamic(This,functionId,isDynamic) ) 

#define ICorProfilerInfo11_GetFunctionFromIP3(This,ip,functionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP3(This,ip,functionId,pReJitId) ) 

#define ICorProfilerInfo11_GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName)	\
    ( (This)->lpVtbl -> GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName) ) 


#define ICorProfilerInfo11_GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses)	\
    ( (This)->lpVtbl -> GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses) ) 

#define ICorProfilerInfo11_GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map) ) 

#define ICorProfilerInfo11_GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos) ) 


#define ICorProfilerInfo11_EnumerateObjectReferences(This,objectId,callback,clientData)	\
    ( (This)->lpVtbl -> EnumerateObjectReferences(This,objectId,callback,clientData) ) 

#define ICorProfilerInfo11_IsFrozenObject(This,objectId,pbFrozen)	\
    ( (This)->lpVtbl -> IsFrozenObject(This,objectId,pbFrozen) ) 

#define ICorProfilerInfo11_GetLOHObjectSizeThreshold(This,pThreshold)	\
    ( (This)->lpVtbl -> GetLOHObjectSizeThreshold(This,pThreshold) ) 

#define ICorProfilerInfo11_RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo11_SuspendRuntime(This)	\
    ( (This)->lpVtbl -> SuspendRuntime(This) ) 

#define ICorProfilerInfo11_ResumeRuntime(This)	\
    ( (This)->lpVtbl -> ResumeRuntime(This) ) 


#define ICorProfilerInfo11_GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue)	\
    ( (This)->lpVtbl -> GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue) ) 

#define ICorProfilerInfo11_SetEnvironmentVariable(This,szName,szValue)	\
    ( (This)->lpVtbl -> SetEnvironmentVariable(This,szName,szValue) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo11_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo12_INTERFACE_DEFINED__
#define __ICorProfilerInfo12_INTERFACE_DEFINED__

/* interface ICorProfilerInfo12 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo12;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("27b24ccd-1cb1-47c5-96ee-98190dc30959")
    ICorProfilerInfo12 : public ICorProfilerInfo11
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EventPipeStartSession( 
            /* [in] */ UINT32 cProviderConfigs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG pProviderConfigs[  ],
            /* [in] */ BOOL requestRundown,
            /* [out] */ EVENTPIPE_SESSION *pSession) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EventPipeAddProviderToSession( 
            /* [in] */ EVENTPIPE_SESSION session,
            /* [in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG providerConfig) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EventPipeStopSession( 
            /* [in] */ EVENTPIPE_SESSION session) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EventPipeCreateProvider( 
            /* [string][in] */ const WCHAR *providerName,
            /* [out] */ EVENTPIPE_PROVIDER *pProvider) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EventPipeGetProviderInfo( 
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR providerName[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EventPipeDefineEvent( 
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [string][in] */ const WCHAR *eventName,
            /* [in] */ UINT32 eventID,
            /* [in] */ UINT64 keywords,
            /* [in] */ UINT32 eventVersion,
            /* [in] */ UINT32 level,
            /* [in] */ UINT8 opcode,
            /* [in] */ BOOL needStack,
            /* [in] */ UINT32 cParamDescs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PARAM_DESC pParamDescs[  ],
            /* [out] */ EVENTPIPE_EVENT *pEvent) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EventPipeWriteEvent( 
            /* [in] */ EVENTPIPE_EVENT event,
            /* [in] */ UINT32 cData,
            /* [size_is][in] */ COR_PRF_EVENT_DATA data[  ],
            /* [in] */ LPCGUID pActivityId,
            /* [in] */ LPCGUID pRelatedActivityId) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo12Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo12 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo12 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo12 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo12 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo12 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo12 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo12 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo12 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo12 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo12 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo12 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo12 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo12 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo12 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo12 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo12 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo12 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo12 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo12 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo12 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo12 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo12 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo12 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ApplyMetaData)
        HRESULT ( STDMETHODCALLTYPE *ApplyMetaData )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, GetInMemorySymbolsLength)
        HRESULT ( STDMETHODCALLTYPE *GetInMemorySymbolsLength )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ReadInMemorySymbols)
        HRESULT ( STDMETHODCALLTYPE *ReadInMemorySymbols )( 
            ICorProfilerInfo12 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, IsFunctionDynamic)
        HRESULT ( STDMETHODCALLTYPE *IsFunctionDynamic )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *isDynamic);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetFunctionFromIP3)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP3 )( 
            ICorProfilerInfo12 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *functionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetDynamicFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetDynamicFunctionInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ModuleID *moduleId,
            /* [out] */ PCCOR_SIGNATURE *ppvSig,
            /* [out] */ ULONG *pbSig,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [out] */ WCHAR wszName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetNativeCodeStartAddresses)
        HRESULT ( STDMETHODCALLTYPE *GetNativeCodeStartAddresses )( 
            ICorProfilerInfo12 * This,
            FunctionID functionID,
            ReJITID reJitId,
            ULONG32 cCodeStartAddresses,
            ULONG32 *pcCodeStartAddresses,
            UINT_PTR codeStartAddresses[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetILToNativeMapping3)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping3 )( 
            ICorProfilerInfo12 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cMap,
            ULONG32 *pcMap,
            COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetCodeInfo4)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo4 )( 
            ICorProfilerInfo12 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cCodeInfos,
            ULONG32 *pcCodeInfos,
            COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, EnumerateObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *EnumerateObjectReferences )( 
            ICorProfilerInfo12 * This,
            ObjectID objectId,
            ObjectReferenceCallback callback,
            void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, IsFrozenObject)
        HRESULT ( STDMETHODCALLTYPE *IsFrozenObject )( 
            ICorProfilerInfo12 * This,
            ObjectID objectId,
            BOOL *pbFrozen);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, GetLOHObjectSizeThreshold)
        HRESULT ( STDMETHODCALLTYPE *GetLOHObjectSizeThreshold )( 
            ICorProfilerInfo12 * This,
            DWORD *pThreshold);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, RequestReJITWithInliners)
        HRESULT ( STDMETHODCALLTYPE *RequestReJITWithInliners )( 
            ICorProfilerInfo12 * This,
            /* [in] */ DWORD dwRejitFlags,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, SuspendRuntime)
        HRESULT ( STDMETHODCALLTYPE *SuspendRuntime )( 
            ICorProfilerInfo12 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, ResumeRuntime)
        HRESULT ( STDMETHODCALLTYPE *ResumeRuntime )( 
            ICorProfilerInfo12 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, GetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *GetEnvironmentVariable )( 
            ICorProfilerInfo12 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [in] */ ULONG cchValue,
            /* [out] */ ULONG *pcchValue,
            /* [annotation][out] */ 
            _Out_writes_to_(cchValue, *pcchValue)  WCHAR szValue[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, SetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *SetEnvironmentVariable )( 
            ICorProfilerInfo12 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [string][in] */ const WCHAR *szValue);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeStartSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeStartSession )( 
            ICorProfilerInfo12 * This,
            /* [in] */ UINT32 cProviderConfigs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG pProviderConfigs[  ],
            /* [in] */ BOOL requestRundown,
            /* [out] */ EVENTPIPE_SESSION *pSession);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeAddProviderToSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeAddProviderToSession )( 
            ICorProfilerInfo12 * This,
            /* [in] */ EVENTPIPE_SESSION session,
            /* [in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG providerConfig);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeStopSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeStopSession )( 
            ICorProfilerInfo12 * This,
            /* [in] */ EVENTPIPE_SESSION session);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeCreateProvider)
        HRESULT ( STDMETHODCALLTYPE *EventPipeCreateProvider )( 
            ICorProfilerInfo12 * This,
            /* [string][in] */ const WCHAR *providerName,
            /* [out] */ EVENTPIPE_PROVIDER *pProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeGetProviderInfo)
        HRESULT ( STDMETHODCALLTYPE *EventPipeGetProviderInfo )( 
            ICorProfilerInfo12 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR providerName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeDefineEvent)
        HRESULT ( STDMETHODCALLTYPE *EventPipeDefineEvent )( 
            ICorProfilerInfo12 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [string][in] */ const WCHAR *eventName,
            /* [in] */ UINT32 eventID,
            /* [in] */ UINT64 keywords,
            /* [in] */ UINT32 eventVersion,
            /* [in] */ UINT32 level,
            /* [in] */ UINT8 opcode,
            /* [in] */ BOOL needStack,
            /* [in] */ UINT32 cParamDescs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PARAM_DESC pParamDescs[  ],
            /* [out] */ EVENTPIPE_EVENT *pEvent);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeWriteEvent)
        HRESULT ( STDMETHODCALLTYPE *EventPipeWriteEvent )( 
            ICorProfilerInfo12 * This,
            /* [in] */ EVENTPIPE_EVENT event,
            /* [in] */ UINT32 cData,
            /* [size_is][in] */ COR_PRF_EVENT_DATA data[  ],
            /* [in] */ LPCGUID pActivityId,
            /* [in] */ LPCGUID pRelatedActivityId);
        
        END_INTERFACE
    } ICorProfilerInfo12Vtbl;

    interface ICorProfilerInfo12
    {
        CONST_VTBL struct ICorProfilerInfo12Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo12_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo12_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo12_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo12_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo12_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo12_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo12_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo12_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo12_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo12_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo12_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo12_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo12_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo12_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo12_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo12_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo12_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo12_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo12_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo12_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo12_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo12_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo12_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo12_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo12_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo12_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo12_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo12_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo12_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo12_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo12_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo12_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo12_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo12_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo12_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo12_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo12_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo12_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo12_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo12_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo12_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo12_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo12_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo12_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo12_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo12_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo12_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo12_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo12_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo12_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo12_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo12_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo12_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo12_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo12_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo12_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo12_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo12_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo12_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo12_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo12_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo12_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo12_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo12_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo12_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo12_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo12_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo12_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo12_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo12_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo12_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo12_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo12_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo12_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo12_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo12_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo12_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo12_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo12_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo12_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo12_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo12_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo12_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo12_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 


#define ICorProfilerInfo12_ApplyMetaData(This,moduleId)	\
    ( (This)->lpVtbl -> ApplyMetaData(This,moduleId) ) 

#define ICorProfilerInfo12_GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes)	\
    ( (This)->lpVtbl -> GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes) ) 

#define ICorProfilerInfo12_ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead)	\
    ( (This)->lpVtbl -> ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead) ) 


#define ICorProfilerInfo12_IsFunctionDynamic(This,functionId,isDynamic)	\
    ( (This)->lpVtbl -> IsFunctionDynamic(This,functionId,isDynamic) ) 

#define ICorProfilerInfo12_GetFunctionFromIP3(This,ip,functionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP3(This,ip,functionId,pReJitId) ) 

#define ICorProfilerInfo12_GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName)	\
    ( (This)->lpVtbl -> GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName) ) 


#define ICorProfilerInfo12_GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses)	\
    ( (This)->lpVtbl -> GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses) ) 

#define ICorProfilerInfo12_GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map) ) 

#define ICorProfilerInfo12_GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos) ) 


#define ICorProfilerInfo12_EnumerateObjectReferences(This,objectId,callback,clientData)	\
    ( (This)->lpVtbl -> EnumerateObjectReferences(This,objectId,callback,clientData) ) 

#define ICorProfilerInfo12_IsFrozenObject(This,objectId,pbFrozen)	\
    ( (This)->lpVtbl -> IsFrozenObject(This,objectId,pbFrozen) ) 

#define ICorProfilerInfo12_GetLOHObjectSizeThreshold(This,pThreshold)	\
    ( (This)->lpVtbl -> GetLOHObjectSizeThreshold(This,pThreshold) ) 

#define ICorProfilerInfo12_RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo12_SuspendRuntime(This)	\
    ( (This)->lpVtbl -> SuspendRuntime(This) ) 

#define ICorProfilerInfo12_ResumeRuntime(This)	\
    ( (This)->lpVtbl -> ResumeRuntime(This) ) 


#define ICorProfilerInfo12_GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue)	\
    ( (This)->lpVtbl -> GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue) ) 

#define ICorProfilerInfo12_SetEnvironmentVariable(This,szName,szValue)	\
    ( (This)->lpVtbl -> SetEnvironmentVariable(This,szName,szValue) ) 


#define ICorProfilerInfo12_EventPipeStartSession(This,cProviderConfigs,pProviderConfigs,requestRundown,pSession)	\
    ( (This)->lpVtbl -> EventPipeStartSession(This,cProviderConfigs,pProviderConfigs,requestRundown,pSession) ) 

#define ICorProfilerInfo12_EventPipeAddProviderToSession(This,session,providerConfig)	\
    ( (This)->lpVtbl -> EventPipeAddProviderToSession(This,session,providerConfig) ) 

#define ICorProfilerInfo12_EventPipeStopSession(This,session)	\
    ( (This)->lpVtbl -> EventPipeStopSession(This,session) ) 

#define ICorProfilerInfo12_EventPipeCreateProvider(This,providerName,pProvider)	\
    ( (This)->lpVtbl -> EventPipeCreateProvider(This,providerName,pProvider) ) 

#define ICorProfilerInfo12_EventPipeGetProviderInfo(This,provider,cchName,pcchName,providerName)	\
    ( (This)->lpVtbl -> EventPipeGetProviderInfo(This,provider,cchName,pcchName,providerName) ) 

#define ICorProfilerInfo12_EventPipeDefineEvent(This,provider,eventName,eventID,keywords,eventVersion,level,opcode,needStack,cParamDescs,pParamDescs,pEvent)	\
    ( (This)->lpVtbl -> EventPipeDefineEvent(This,provider,eventName,eventID,keywords,eventVersion,level,opcode,needStack,cParamDescs,pParamDescs,pEvent) ) 

#define ICorProfilerInfo12_EventPipeWriteEvent(This,event,cData,data,pActivityId,pRelatedActivityId)	\
    ( (This)->lpVtbl -> EventPipeWriteEvent(This,event,cData,data,pActivityId,pRelatedActivityId) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo12_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo13_INTERFACE_DEFINED__
#define __ICorProfilerInfo13_INTERFACE_DEFINED__

/* interface ICorProfilerInfo13 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo13;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("6E6C7EE2-0701-4EC2-9D29-2E8733B66934")
    ICorProfilerInfo13 : public ICorProfilerInfo12
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE CreateHandle( 
            /* [in] */ ObjectID object,
            /* [in] */ COR_PRF_HANDLE_TYPE type,
            /* [out] */ ObjectHandleID *pHandle) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE DestroyHandle( 
            /* [in] */ ObjectHandleID handle) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetObjectIDFromHandle( 
            /* [in] */ ObjectHandleID handle,
            /* [out] */ ObjectID *pObject) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo13Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo13 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo13 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo13 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo13 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo13 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo13 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo13 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo13 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo13 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo13 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo13 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo13 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo13 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo13 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo13 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo13 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo13 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo13 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo13 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo13 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo13 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo13 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo13 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ApplyMetaData)
        HRESULT ( STDMETHODCALLTYPE *ApplyMetaData )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, GetInMemorySymbolsLength)
        HRESULT ( STDMETHODCALLTYPE *GetInMemorySymbolsLength )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ReadInMemorySymbols)
        HRESULT ( STDMETHODCALLTYPE *ReadInMemorySymbols )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, IsFunctionDynamic)
        HRESULT ( STDMETHODCALLTYPE *IsFunctionDynamic )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *isDynamic);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetFunctionFromIP3)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP3 )( 
            ICorProfilerInfo13 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *functionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetDynamicFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetDynamicFunctionInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ModuleID *moduleId,
            /* [out] */ PCCOR_SIGNATURE *ppvSig,
            /* [out] */ ULONG *pbSig,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [out] */ WCHAR wszName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetNativeCodeStartAddresses)
        HRESULT ( STDMETHODCALLTYPE *GetNativeCodeStartAddresses )( 
            ICorProfilerInfo13 * This,
            FunctionID functionID,
            ReJITID reJitId,
            ULONG32 cCodeStartAddresses,
            ULONG32 *pcCodeStartAddresses,
            UINT_PTR codeStartAddresses[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetILToNativeMapping3)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping3 )( 
            ICorProfilerInfo13 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cMap,
            ULONG32 *pcMap,
            COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetCodeInfo4)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo4 )( 
            ICorProfilerInfo13 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cCodeInfos,
            ULONG32 *pcCodeInfos,
            COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, EnumerateObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *EnumerateObjectReferences )( 
            ICorProfilerInfo13 * This,
            ObjectID objectId,
            ObjectReferenceCallback callback,
            void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, IsFrozenObject)
        HRESULT ( STDMETHODCALLTYPE *IsFrozenObject )( 
            ICorProfilerInfo13 * This,
            ObjectID objectId,
            BOOL *pbFrozen);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, GetLOHObjectSizeThreshold)
        HRESULT ( STDMETHODCALLTYPE *GetLOHObjectSizeThreshold )( 
            ICorProfilerInfo13 * This,
            DWORD *pThreshold);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, RequestReJITWithInliners)
        HRESULT ( STDMETHODCALLTYPE *RequestReJITWithInliners )( 
            ICorProfilerInfo13 * This,
            /* [in] */ DWORD dwRejitFlags,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, SuspendRuntime)
        HRESULT ( STDMETHODCALLTYPE *SuspendRuntime )( 
            ICorProfilerInfo13 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, ResumeRuntime)
        HRESULT ( STDMETHODCALLTYPE *ResumeRuntime )( 
            ICorProfilerInfo13 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, GetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *GetEnvironmentVariable )( 
            ICorProfilerInfo13 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [in] */ ULONG cchValue,
            /* [out] */ ULONG *pcchValue,
            /* [annotation][out] */ 
            _Out_writes_to_(cchValue, *pcchValue)  WCHAR szValue[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, SetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *SetEnvironmentVariable )( 
            ICorProfilerInfo13 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [string][in] */ const WCHAR *szValue);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeStartSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeStartSession )( 
            ICorProfilerInfo13 * This,
            /* [in] */ UINT32 cProviderConfigs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG pProviderConfigs[  ],
            /* [in] */ BOOL requestRundown,
            /* [out] */ EVENTPIPE_SESSION *pSession);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeAddProviderToSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeAddProviderToSession )( 
            ICorProfilerInfo13 * This,
            /* [in] */ EVENTPIPE_SESSION session,
            /* [in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG providerConfig);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeStopSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeStopSession )( 
            ICorProfilerInfo13 * This,
            /* [in] */ EVENTPIPE_SESSION session);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeCreateProvider)
        HRESULT ( STDMETHODCALLTYPE *EventPipeCreateProvider )( 
            ICorProfilerInfo13 * This,
            /* [string][in] */ const WCHAR *providerName,
            /* [out] */ EVENTPIPE_PROVIDER *pProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeGetProviderInfo)
        HRESULT ( STDMETHODCALLTYPE *EventPipeGetProviderInfo )( 
            ICorProfilerInfo13 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR providerName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeDefineEvent)
        HRESULT ( STDMETHODCALLTYPE *EventPipeDefineEvent )( 
            ICorProfilerInfo13 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [string][in] */ const WCHAR *eventName,
            /* [in] */ UINT32 eventID,
            /* [in] */ UINT64 keywords,
            /* [in] */ UINT32 eventVersion,
            /* [in] */ UINT32 level,
            /* [in] */ UINT8 opcode,
            /* [in] */ BOOL needStack,
            /* [in] */ UINT32 cParamDescs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PARAM_DESC pParamDescs[  ],
            /* [out] */ EVENTPIPE_EVENT *pEvent);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeWriteEvent)
        HRESULT ( STDMETHODCALLTYPE *EventPipeWriteEvent )( 
            ICorProfilerInfo13 * This,
            /* [in] */ EVENTPIPE_EVENT event,
            /* [in] */ UINT32 cData,
            /* [size_is][in] */ COR_PRF_EVENT_DATA data[  ],
            /* [in] */ LPCGUID pActivityId,
            /* [in] */ LPCGUID pRelatedActivityId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo13, CreateHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateHandle )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ObjectID object,
            /* [in] */ COR_PRF_HANDLE_TYPE type,
            /* [out] */ ObjectHandleID *pHandle);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo13, DestroyHandle)
        HRESULT ( STDMETHODCALLTYPE *DestroyHandle )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ObjectHandleID handle);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo13, GetObjectIDFromHandle)
        HRESULT ( STDMETHODCALLTYPE *GetObjectIDFromHandle )( 
            ICorProfilerInfo13 * This,
            /* [in] */ ObjectHandleID handle,
            /* [out] */ ObjectID *pObject);
        
        END_INTERFACE
    } ICorProfilerInfo13Vtbl;

    interface ICorProfilerInfo13
    {
        CONST_VTBL struct ICorProfilerInfo13Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo13_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo13_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo13_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo13_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo13_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo13_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo13_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo13_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo13_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo13_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo13_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo13_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo13_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo13_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo13_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo13_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo13_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo13_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo13_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo13_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo13_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo13_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo13_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo13_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo13_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo13_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo13_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo13_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo13_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo13_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo13_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo13_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo13_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo13_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo13_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo13_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo13_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo13_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo13_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo13_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo13_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo13_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo13_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo13_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo13_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo13_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo13_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo13_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo13_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo13_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo13_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo13_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo13_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo13_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo13_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo13_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo13_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo13_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo13_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo13_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo13_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo13_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo13_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo13_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo13_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo13_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo13_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo13_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo13_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo13_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo13_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo13_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo13_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo13_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo13_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo13_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo13_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo13_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo13_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo13_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo13_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo13_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo13_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo13_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 


#define ICorProfilerInfo13_ApplyMetaData(This,moduleId)	\
    ( (This)->lpVtbl -> ApplyMetaData(This,moduleId) ) 

#define ICorProfilerInfo13_GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes)	\
    ( (This)->lpVtbl -> GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes) ) 

#define ICorProfilerInfo13_ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead)	\
    ( (This)->lpVtbl -> ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead) ) 


#define ICorProfilerInfo13_IsFunctionDynamic(This,functionId,isDynamic)	\
    ( (This)->lpVtbl -> IsFunctionDynamic(This,functionId,isDynamic) ) 

#define ICorProfilerInfo13_GetFunctionFromIP3(This,ip,functionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP3(This,ip,functionId,pReJitId) ) 

#define ICorProfilerInfo13_GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName)	\
    ( (This)->lpVtbl -> GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName) ) 


#define ICorProfilerInfo13_GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses)	\
    ( (This)->lpVtbl -> GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses) ) 

#define ICorProfilerInfo13_GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map) ) 

#define ICorProfilerInfo13_GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos) ) 


#define ICorProfilerInfo13_EnumerateObjectReferences(This,objectId,callback,clientData)	\
    ( (This)->lpVtbl -> EnumerateObjectReferences(This,objectId,callback,clientData) ) 

#define ICorProfilerInfo13_IsFrozenObject(This,objectId,pbFrozen)	\
    ( (This)->lpVtbl -> IsFrozenObject(This,objectId,pbFrozen) ) 

#define ICorProfilerInfo13_GetLOHObjectSizeThreshold(This,pThreshold)	\
    ( (This)->lpVtbl -> GetLOHObjectSizeThreshold(This,pThreshold) ) 

#define ICorProfilerInfo13_RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo13_SuspendRuntime(This)	\
    ( (This)->lpVtbl -> SuspendRuntime(This) ) 

#define ICorProfilerInfo13_ResumeRuntime(This)	\
    ( (This)->lpVtbl -> ResumeRuntime(This) ) 


#define ICorProfilerInfo13_GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue)	\
    ( (This)->lpVtbl -> GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue) ) 

#define ICorProfilerInfo13_SetEnvironmentVariable(This,szName,szValue)	\
    ( (This)->lpVtbl -> SetEnvironmentVariable(This,szName,szValue) ) 


#define ICorProfilerInfo13_EventPipeStartSession(This,cProviderConfigs,pProviderConfigs,requestRundown,pSession)	\
    ( (This)->lpVtbl -> EventPipeStartSession(This,cProviderConfigs,pProviderConfigs,requestRundown,pSession) ) 

#define ICorProfilerInfo13_EventPipeAddProviderToSession(This,session,providerConfig)	\
    ( (This)->lpVtbl -> EventPipeAddProviderToSession(This,session,providerConfig) ) 

#define ICorProfilerInfo13_EventPipeStopSession(This,session)	\
    ( (This)->lpVtbl -> EventPipeStopSession(This,session) ) 

#define ICorProfilerInfo13_EventPipeCreateProvider(This,providerName,pProvider)	\
    ( (This)->lpVtbl -> EventPipeCreateProvider(This,providerName,pProvider) ) 

#define ICorProfilerInfo13_EventPipeGetProviderInfo(This,provider,cchName,pcchName,providerName)	\
    ( (This)->lpVtbl -> EventPipeGetProviderInfo(This,provider,cchName,pcchName,providerName) ) 

#define ICorProfilerInfo13_EventPipeDefineEvent(This,provider,eventName,eventID,keywords,eventVersion,level,opcode,needStack,cParamDescs,pParamDescs,pEvent)	\
    ( (This)->lpVtbl -> EventPipeDefineEvent(This,provider,eventName,eventID,keywords,eventVersion,level,opcode,needStack,cParamDescs,pParamDescs,pEvent) ) 

#define ICorProfilerInfo13_EventPipeWriteEvent(This,event,cData,data,pActivityId,pRelatedActivityId)	\
    ( (This)->lpVtbl -> EventPipeWriteEvent(This,event,cData,data,pActivityId,pRelatedActivityId) ) 


#define ICorProfilerInfo13_CreateHandle(This,object,type,pHandle)	\
    ( (This)->lpVtbl -> CreateHandle(This,object,type,pHandle) ) 

#define ICorProfilerInfo13_DestroyHandle(This,handle)	\
    ( (This)->lpVtbl -> DestroyHandle(This,handle) ) 

#define ICorProfilerInfo13_GetObjectIDFromHandle(This,handle,pObject)	\
    ( (This)->lpVtbl -> GetObjectIDFromHandle(This,handle,pObject) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo13_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo14_INTERFACE_DEFINED__
#define __ICorProfilerInfo14_INTERFACE_DEFINED__

/* interface ICorProfilerInfo14 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo14;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("F460E352-D76D-4FE9-835F-F6AF9D6E862D")
    ICorProfilerInfo14 : public ICorProfilerInfo13
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EnumerateNonGCObjects( 
            /* [out] */ ICorProfilerObjectEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetNonGCHeapBounds( 
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_NONGC_HEAP_RANGE ranges[  ]) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE EventPipeCreateProvider2( 
            /* [string][in] */ const WCHAR *providerName,
            /* [in] */ EventPipeProviderCallback *pCallback,
            /* [out] */ EVENTPIPE_PROVIDER *pProvider) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo14Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo14 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo14 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo14 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo14 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo14 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo14 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo14 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo14 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo14 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo14 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo14 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo14 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo14 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo14 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo14 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo14 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo14 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo14 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo14 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo14 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo14 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo14 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo14 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ApplyMetaData)
        HRESULT ( STDMETHODCALLTYPE *ApplyMetaData )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, GetInMemorySymbolsLength)
        HRESULT ( STDMETHODCALLTYPE *GetInMemorySymbolsLength )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ReadInMemorySymbols)
        HRESULT ( STDMETHODCALLTYPE *ReadInMemorySymbols )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, IsFunctionDynamic)
        HRESULT ( STDMETHODCALLTYPE *IsFunctionDynamic )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *isDynamic);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetFunctionFromIP3)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP3 )( 
            ICorProfilerInfo14 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *functionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetDynamicFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetDynamicFunctionInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ModuleID *moduleId,
            /* [out] */ PCCOR_SIGNATURE *ppvSig,
            /* [out] */ ULONG *pbSig,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [out] */ WCHAR wszName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetNativeCodeStartAddresses)
        HRESULT ( STDMETHODCALLTYPE *GetNativeCodeStartAddresses )( 
            ICorProfilerInfo14 * This,
            FunctionID functionID,
            ReJITID reJitId,
            ULONG32 cCodeStartAddresses,
            ULONG32 *pcCodeStartAddresses,
            UINT_PTR codeStartAddresses[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetILToNativeMapping3)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping3 )( 
            ICorProfilerInfo14 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cMap,
            ULONG32 *pcMap,
            COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetCodeInfo4)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo4 )( 
            ICorProfilerInfo14 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cCodeInfos,
            ULONG32 *pcCodeInfos,
            COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, EnumerateObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *EnumerateObjectReferences )( 
            ICorProfilerInfo14 * This,
            ObjectID objectId,
            ObjectReferenceCallback callback,
            void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, IsFrozenObject)
        HRESULT ( STDMETHODCALLTYPE *IsFrozenObject )( 
            ICorProfilerInfo14 * This,
            ObjectID objectId,
            BOOL *pbFrozen);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, GetLOHObjectSizeThreshold)
        HRESULT ( STDMETHODCALLTYPE *GetLOHObjectSizeThreshold )( 
            ICorProfilerInfo14 * This,
            DWORD *pThreshold);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, RequestReJITWithInliners)
        HRESULT ( STDMETHODCALLTYPE *RequestReJITWithInliners )( 
            ICorProfilerInfo14 * This,
            /* [in] */ DWORD dwRejitFlags,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, SuspendRuntime)
        HRESULT ( STDMETHODCALLTYPE *SuspendRuntime )( 
            ICorProfilerInfo14 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, ResumeRuntime)
        HRESULT ( STDMETHODCALLTYPE *ResumeRuntime )( 
            ICorProfilerInfo14 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, GetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *GetEnvironmentVariable )( 
            ICorProfilerInfo14 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [in] */ ULONG cchValue,
            /* [out] */ ULONG *pcchValue,
            /* [annotation][out] */ 
            _Out_writes_to_(cchValue, *pcchValue)  WCHAR szValue[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, SetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *SetEnvironmentVariable )( 
            ICorProfilerInfo14 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [string][in] */ const WCHAR *szValue);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeStartSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeStartSession )( 
            ICorProfilerInfo14 * This,
            /* [in] */ UINT32 cProviderConfigs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG pProviderConfigs[  ],
            /* [in] */ BOOL requestRundown,
            /* [out] */ EVENTPIPE_SESSION *pSession);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeAddProviderToSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeAddProviderToSession )( 
            ICorProfilerInfo14 * This,
            /* [in] */ EVENTPIPE_SESSION session,
            /* [in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG providerConfig);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeStopSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeStopSession )( 
            ICorProfilerInfo14 * This,
            /* [in] */ EVENTPIPE_SESSION session);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeCreateProvider)
        HRESULT ( STDMETHODCALLTYPE *EventPipeCreateProvider )( 
            ICorProfilerInfo14 * This,
            /* [string][in] */ const WCHAR *providerName,
            /* [out] */ EVENTPIPE_PROVIDER *pProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeGetProviderInfo)
        HRESULT ( STDMETHODCALLTYPE *EventPipeGetProviderInfo )( 
            ICorProfilerInfo14 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR providerName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeDefineEvent)
        HRESULT ( STDMETHODCALLTYPE *EventPipeDefineEvent )( 
            ICorProfilerInfo14 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [string][in] */ const WCHAR *eventName,
            /* [in] */ UINT32 eventID,
            /* [in] */ UINT64 keywords,
            /* [in] */ UINT32 eventVersion,
            /* [in] */ UINT32 level,
            /* [in] */ UINT8 opcode,
            /* [in] */ BOOL needStack,
            /* [in] */ UINT32 cParamDescs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PARAM_DESC pParamDescs[  ],
            /* [out] */ EVENTPIPE_EVENT *pEvent);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeWriteEvent)
        HRESULT ( STDMETHODCALLTYPE *EventPipeWriteEvent )( 
            ICorProfilerInfo14 * This,
            /* [in] */ EVENTPIPE_EVENT event,
            /* [in] */ UINT32 cData,
            /* [size_is][in] */ COR_PRF_EVENT_DATA data[  ],
            /* [in] */ LPCGUID pActivityId,
            /* [in] */ LPCGUID pRelatedActivityId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo13, CreateHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateHandle )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ObjectID object,
            /* [in] */ COR_PRF_HANDLE_TYPE type,
            /* [out] */ ObjectHandleID *pHandle);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo13, DestroyHandle)
        HRESULT ( STDMETHODCALLTYPE *DestroyHandle )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ObjectHandleID handle);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo13, GetObjectIDFromHandle)
        HRESULT ( STDMETHODCALLTYPE *GetObjectIDFromHandle )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ObjectHandleID handle,
            /* [out] */ ObjectID *pObject);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo14, EnumerateNonGCObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumerateNonGCObjects )( 
            ICorProfilerInfo14 * This,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo14, GetNonGCHeapBounds)
        HRESULT ( STDMETHODCALLTYPE *GetNonGCHeapBounds )( 
            ICorProfilerInfo14 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_NONGC_HEAP_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo14, EventPipeCreateProvider2)
        HRESULT ( STDMETHODCALLTYPE *EventPipeCreateProvider2 )( 
            ICorProfilerInfo14 * This,
            /* [string][in] */ const WCHAR *providerName,
            /* [in] */ EventPipeProviderCallback *pCallback,
            /* [out] */ EVENTPIPE_PROVIDER *pProvider);
        
        END_INTERFACE
    } ICorProfilerInfo14Vtbl;

    interface ICorProfilerInfo14
    {
        CONST_VTBL struct ICorProfilerInfo14Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo14_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo14_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo14_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo14_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo14_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo14_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo14_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo14_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo14_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo14_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo14_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo14_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo14_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo14_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo14_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo14_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo14_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo14_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo14_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo14_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo14_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo14_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo14_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo14_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo14_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo14_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo14_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo14_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo14_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo14_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo14_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo14_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo14_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo14_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo14_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo14_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo14_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo14_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo14_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo14_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo14_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo14_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo14_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo14_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo14_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo14_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo14_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo14_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo14_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo14_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo14_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo14_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo14_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo14_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo14_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo14_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo14_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo14_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo14_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo14_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo14_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo14_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo14_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo14_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo14_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo14_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo14_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo14_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo14_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo14_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo14_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo14_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo14_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo14_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo14_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo14_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo14_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo14_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo14_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo14_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo14_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo14_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo14_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo14_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 


#define ICorProfilerInfo14_ApplyMetaData(This,moduleId)	\
    ( (This)->lpVtbl -> ApplyMetaData(This,moduleId) ) 

#define ICorProfilerInfo14_GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes)	\
    ( (This)->lpVtbl -> GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes) ) 

#define ICorProfilerInfo14_ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead)	\
    ( (This)->lpVtbl -> ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead) ) 


#define ICorProfilerInfo14_IsFunctionDynamic(This,functionId,isDynamic)	\
    ( (This)->lpVtbl -> IsFunctionDynamic(This,functionId,isDynamic) ) 

#define ICorProfilerInfo14_GetFunctionFromIP3(This,ip,functionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP3(This,ip,functionId,pReJitId) ) 

#define ICorProfilerInfo14_GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName)	\
    ( (This)->lpVtbl -> GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName) ) 


#define ICorProfilerInfo14_GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses)	\
    ( (This)->lpVtbl -> GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses) ) 

#define ICorProfilerInfo14_GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map) ) 

#define ICorProfilerInfo14_GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos) ) 


#define ICorProfilerInfo14_EnumerateObjectReferences(This,objectId,callback,clientData)	\
    ( (This)->lpVtbl -> EnumerateObjectReferences(This,objectId,callback,clientData) ) 

#define ICorProfilerInfo14_IsFrozenObject(This,objectId,pbFrozen)	\
    ( (This)->lpVtbl -> IsFrozenObject(This,objectId,pbFrozen) ) 

#define ICorProfilerInfo14_GetLOHObjectSizeThreshold(This,pThreshold)	\
    ( (This)->lpVtbl -> GetLOHObjectSizeThreshold(This,pThreshold) ) 

#define ICorProfilerInfo14_RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo14_SuspendRuntime(This)	\
    ( (This)->lpVtbl -> SuspendRuntime(This) ) 

#define ICorProfilerInfo14_ResumeRuntime(This)	\
    ( (This)->lpVtbl -> ResumeRuntime(This) ) 


#define ICorProfilerInfo14_GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue)	\
    ( (This)->lpVtbl -> GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue) ) 

#define ICorProfilerInfo14_SetEnvironmentVariable(This,szName,szValue)	\
    ( (This)->lpVtbl -> SetEnvironmentVariable(This,szName,szValue) ) 


#define ICorProfilerInfo14_EventPipeStartSession(This,cProviderConfigs,pProviderConfigs,requestRundown,pSession)	\
    ( (This)->lpVtbl -> EventPipeStartSession(This,cProviderConfigs,pProviderConfigs,requestRundown,pSession) ) 

#define ICorProfilerInfo14_EventPipeAddProviderToSession(This,session,providerConfig)	\
    ( (This)->lpVtbl -> EventPipeAddProviderToSession(This,session,providerConfig) ) 

#define ICorProfilerInfo14_EventPipeStopSession(This,session)	\
    ( (This)->lpVtbl -> EventPipeStopSession(This,session) ) 

#define ICorProfilerInfo14_EventPipeCreateProvider(This,providerName,pProvider)	\
    ( (This)->lpVtbl -> EventPipeCreateProvider(This,providerName,pProvider) ) 

#define ICorProfilerInfo14_EventPipeGetProviderInfo(This,provider,cchName,pcchName,providerName)	\
    ( (This)->lpVtbl -> EventPipeGetProviderInfo(This,provider,cchName,pcchName,providerName) ) 

#define ICorProfilerInfo14_EventPipeDefineEvent(This,provider,eventName,eventID,keywords,eventVersion,level,opcode,needStack,cParamDescs,pParamDescs,pEvent)	\
    ( (This)->lpVtbl -> EventPipeDefineEvent(This,provider,eventName,eventID,keywords,eventVersion,level,opcode,needStack,cParamDescs,pParamDescs,pEvent) ) 

#define ICorProfilerInfo14_EventPipeWriteEvent(This,event,cData,data,pActivityId,pRelatedActivityId)	\
    ( (This)->lpVtbl -> EventPipeWriteEvent(This,event,cData,data,pActivityId,pRelatedActivityId) ) 


#define ICorProfilerInfo14_CreateHandle(This,object,type,pHandle)	\
    ( (This)->lpVtbl -> CreateHandle(This,object,type,pHandle) ) 

#define ICorProfilerInfo14_DestroyHandle(This,handle)	\
    ( (This)->lpVtbl -> DestroyHandle(This,handle) ) 

#define ICorProfilerInfo14_GetObjectIDFromHandle(This,handle,pObject)	\
    ( (This)->lpVtbl -> GetObjectIDFromHandle(This,handle,pObject) ) 


#define ICorProfilerInfo14_EnumerateNonGCObjects(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumerateNonGCObjects(This,ppEnum) ) 

#define ICorProfilerInfo14_GetNonGCHeapBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetNonGCHeapBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo14_EventPipeCreateProvider2(This,providerName,pCallback,pProvider)	\
    ( (This)->lpVtbl -> EventPipeCreateProvider2(This,providerName,pCallback,pProvider) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo14_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerInfo15_INTERFACE_DEFINED__
#define __ICorProfilerInfo15_INTERFACE_DEFINED__

/* interface ICorProfilerInfo15 */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerInfo15;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("B446462D-BD22-41DD-872D-DC714C49EB56")
    ICorProfilerInfo15 : public ICorProfilerInfo14
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE EnumerateGCHeapObjects( 
            /* [in] */ ObjectCallback callback,
            /* [in] */ void *callbackState) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerInfo15Vtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerInfo15 * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerInfo15 * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerInfo15 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromObject)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromObject )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromToken )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdTypeDef typeDef,
            /* [out] */ ClassID *pClassId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCodeInfo)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ LPCBYTE *pStart,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetEventMask)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask )( 
            ICorProfilerInfo15 * This,
            /* [out] */ DWORD *pdwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromIP)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP )( 
            ICorProfilerInfo15 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionFromToken)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromToken )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdToken token,
            /* [out] */ FunctionID *pFunctionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetHandleFromThread)
        HRESULT ( STDMETHODCALLTYPE *GetHandleFromThread )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ HANDLE *phThread);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetObjectSize)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ ULONG *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, IsArrayClass)
        HRESULT ( STDMETHODCALLTYPE *IsArrayClass )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [out] */ CorElementType *pBaseElemType,
            /* [out] */ ClassID *pBaseClassId,
            /* [out] */ ULONG *pcRank);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadInfo)
        HRESULT ( STDMETHODCALLTYPE *GetThreadInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ DWORD *pdwWin32ThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetCurrentThreadID)
        HRESULT ( STDMETHODCALLTYPE *GetCurrentThreadID )( 
            ICorProfilerInfo15 * This,
            /* [out] */ ThreadID *pThreadId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetClassIDInfo)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEventMask)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask )( 
            ICorProfilerInfo15 * This,
            /* [in] */ DWORD dwEvents);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetEnterLeaveFunctionHooks)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionEnter *pFuncEnter,
            /* [in] */ FunctionLeave *pFuncLeave,
            /* [in] */ FunctionTailcall *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionIDMapper)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionIDMapper *pFunc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetTokenAndMetaDataFromFunction)
        HRESULT ( STDMETHODCALLTYPE *GetTokenAndMetaDataFromFunction )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppImport,
            /* [out] */ mdToken *pToken);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleInfo)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetModuleMetaData)
        HRESULT ( STDMETHODCALLTYPE *GetModuleMetaData )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD dwOpenFlags,
            /* [in] */ REFIID riid,
            /* [out] */ IUnknown **ppOut);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBody )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodId,
            /* [out] */ LPCBYTE *ppMethodHeader,
            /* [out] */ ULONG *pcbMethodSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILFunctionBodyAllocator)
        HRESULT ( STDMETHODCALLTYPE *GetILFunctionBodyAllocator )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ IMethodMalloc **ppMalloc);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILFunctionBody)
        HRESULT ( STDMETHODCALLTYPE *SetILFunctionBody )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ mdMethodDef methodid,
            /* [in] */ LPCBYTE pbNewILMethodHeader);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAppDomainInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ ProcessID *pProcessId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetAssemblyInfo)
        HRESULT ( STDMETHODCALLTYPE *GetAssemblyInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ AssemblyID assemblyId,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AppDomainID *pAppDomainId,
            /* [out] */ ModuleID *pModuleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetFunctionReJIT)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionReJIT )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, ForceGC)
        HRESULT ( STDMETHODCALLTYPE *ForceGC )( 
            ICorProfilerInfo15 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, SetILInstrumentedCodeMap)
        HRESULT ( STDMETHODCALLTYPE *SetILInstrumentedCodeMap )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ BOOL fStartJit,
            /* [in] */ ULONG cILMapEntries,
            /* [size_is][in] */ COR_IL_MAP rgILMapEntries[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionInterface)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionInterface )( 
            ICorProfilerInfo15 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetInprocInspectionIThisThread)
        HRESULT ( STDMETHODCALLTYPE *GetInprocInspectionIThisThread )( 
            ICorProfilerInfo15 * This,
            /* [out] */ IUnknown **ppicd);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetThreadContext)
        HRESULT ( STDMETHODCALLTYPE *GetThreadContext )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ ContextID *pContextId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, BeginInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *BeginInprocDebugging )( 
            ICorProfilerInfo15 * This,
            /* [in] */ BOOL fThisThreadOnly,
            /* [out] */ DWORD *pdwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, EndInprocDebugging)
        HRESULT ( STDMETHODCALLTYPE *EndInprocDebugging )( 
            ICorProfilerInfo15 * This,
            /* [in] */ DWORD dwProfilerContext);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo, GetILToNativeMapping)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, DoStackSnapshot)
        HRESULT ( STDMETHODCALLTYPE *DoStackSnapshot )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ThreadID thread,
            /* [in] */ StackSnapshotCallback *callback,
            /* [in] */ ULONG32 infoFlags,
            /* [in] */ void *clientData,
            /* [size_is][in] */ BYTE context[  ],
            /* [in] */ ULONG32 contextSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, SetEnterLeaveFunctionHooks2)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionEnter2 *pFuncEnter,
            /* [in] */ FunctionLeave2 *pFuncLeave,
            /* [in] */ FunctionTailcall2 *pFuncTailcall);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionInfo2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID funcId,
            /* [in] */ COR_PRF_FRAME_INFO frameInfo,
            /* [out] */ ClassID *pClassId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdToken *pToken,
            /* [in] */ ULONG32 cTypeArgs,
            /* [out] */ ULONG32 *pcTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStringLayout)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout )( 
            ICorProfilerInfo15 * This,
            /* [out] */ ULONG *pBufferLengthOffset,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetClassLayout )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classID,
            /* [out][in] */ COR_FIELD_OFFSET rFieldOffset[  ],
            /* [in] */ ULONG cFieldOffset,
            /* [out] */ ULONG *pcFieldOffset,
            /* [out] */ ULONG *pulClassSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassIDInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetClassIDInfo2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ModuleID *pModuleId,
            /* [out] */ mdTypeDef *pTypeDefToken,
            /* [out] */ ClassID *pParentClassId,
            /* [in] */ ULONG32 cNumTypeArgs,
            /* [out] */ ULONG32 *pcNumTypeArgs,
            /* [out] */ ClassID typeArgs[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetCodeInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetClassFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetClassFromTokenAndTypeArgs )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdTypeDef typeDef,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ ClassID *pClassID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetFunctionFromTokenAndTypeArgs)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromTokenAndTypeArgs )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleID,
            /* [in] */ mdMethodDef funcDef,
            /* [in] */ ClassID classId,
            /* [in] */ ULONG32 cTypeArgs,
            /* [size_is][in] */ ClassID typeArgs[  ],
            /* [out] */ FunctionID *pFunctionID);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, EnumModuleFrozenObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumModuleFrozenObjects )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleID,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetArrayObjectInfo)
        HRESULT ( STDMETHODCALLTYPE *GetArrayObjectInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ObjectID objectId,
            /* [in] */ ULONG32 cDimensions,
            /* [size_is][out] */ ULONG32 pDimensionSizes[  ],
            /* [size_is][out] */ int pDimensionLowerBounds[  ],
            /* [out] */ BYTE **ppData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetBoxClassLayout)
        HRESULT ( STDMETHODCALLTYPE *GetBoxClassLayout )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [out] */ ULONG32 *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadAppDomain)
        HRESULT ( STDMETHODCALLTYPE *GetThreadAppDomain )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ThreadID threadId,
            /* [out] */ AppDomainID *pAppDomainId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetRVAStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetRVAStaticAddress )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetAppDomainStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainStaticAddress )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetThreadStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetContextStaticAddress)
        HRESULT ( STDMETHODCALLTYPE *GetContextStaticAddress )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ ContextID contextId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetStaticFieldInfo)
        HRESULT ( STDMETHODCALLTYPE *GetStaticFieldInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [out] */ COR_PRF_STATIC_TYPE *pFieldInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetGenerationBounds)
        HRESULT ( STDMETHODCALLTYPE *GetGenerationBounds )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_GC_GENERATION_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetObjectGeneration)
        HRESULT ( STDMETHODCALLTYPE *GetObjectGeneration )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ COR_PRF_GC_GENERATION_RANGE *range);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo2, GetNotifiedExceptionClauseInfo)
        HRESULT ( STDMETHODCALLTYPE *GetNotifiedExceptionClauseInfo )( 
            ICorProfilerInfo15 * This,
            /* [out] */ COR_PRF_EX_CLAUSE_INFO *pinfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumJITedFunctions)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions )( 
            ICorProfilerInfo15 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, RequestProfilerDetach)
        HRESULT ( STDMETHODCALLTYPE *RequestProfilerDetach )( 
            ICorProfilerInfo15 * This,
            /* [in] */ DWORD dwExpectedCompletionMilliseconds);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetFunctionIDMapper2)
        HRESULT ( STDMETHODCALLTYPE *SetFunctionIDMapper2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionIDMapper2 *pFunc,
            /* [in] */ void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetStringLayout2)
        HRESULT ( STDMETHODCALLTYPE *GetStringLayout2 )( 
            ICorProfilerInfo15 * This,
            /* [out] */ ULONG *pStringLengthOffset,
            /* [out] */ ULONG *pBufferOffset);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionEnter3 *pFuncEnter3,
            /* [in] */ FunctionLeave3 *pFuncLeave3,
            /* [in] */ FunctionTailcall3 *pFuncTailcall3);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, SetEnterLeaveFunctionHooks3WithInfo)
        HRESULT ( STDMETHODCALLTYPE *SetEnterLeaveFunctionHooks3WithInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionEnter3WithInfo *pFuncEnter3WithInfo,
            /* [in] */ FunctionLeave3WithInfo *pFuncLeave3WithInfo,
            /* [in] */ FunctionTailcall3WithInfo *pFuncTailcall3WithInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionEnter3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionEnter3Info )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out][in] */ ULONG *pcbArgumentInfo,
            /* [size_is][out] */ COR_PRF_FUNCTION_ARGUMENT_INFO *pArgumentInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionLeave3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionLeave3Info )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo,
            /* [out] */ COR_PRF_FUNCTION_ARGUMENT_RANGE *pRetvalRange);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetFunctionTailcall3Info)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionTailcall3Info )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ COR_PRF_ELT_INFO eltInfo,
            /* [out] */ COR_PRF_FRAME_INFO *pFrameInfo);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, EnumModules)
        HRESULT ( STDMETHODCALLTYPE *EnumModules )( 
            ICorProfilerInfo15 * This,
            /* [out] */ ICorProfilerModuleEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetRuntimeInformation)
        HRESULT ( STDMETHODCALLTYPE *GetRuntimeInformation )( 
            ICorProfilerInfo15 * This,
            /* [out] */ USHORT *pClrInstanceId,
            /* [out] */ COR_PRF_RUNTIME_TYPE *pRuntimeType,
            /* [out] */ USHORT *pMajorVersion,
            /* [out] */ USHORT *pMinorVersion,
            /* [out] */ USHORT *pBuildNumber,
            /* [out] */ USHORT *pQFEVersion,
            /* [in] */ ULONG cchVersionString,
            /* [out] */ ULONG *pcchVersionString,
            /* [annotation][out] */ 
            _Out_writes_to_(cchVersionString, *pcchVersionString)  WCHAR szVersionString[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetThreadStaticAddress2)
        HRESULT ( STDMETHODCALLTYPE *GetThreadStaticAddress2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ClassID classId,
            /* [in] */ mdFieldDef fieldToken,
            /* [in] */ AppDomainID appDomainId,
            /* [in] */ ThreadID threadId,
            /* [out] */ void **ppAddress);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetAppDomainsContainingModule)
        HRESULT ( STDMETHODCALLTYPE *GetAppDomainsContainingModule )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ ULONG32 cAppDomainIds,
            /* [out] */ ULONG32 *pcAppDomainIds,
            /* [length_is][size_is][out] */ AppDomainID appDomainIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo3, GetModuleInfo2)
        HRESULT ( STDMETHODCALLTYPE *GetModuleInfo2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ LPCBYTE *ppBaseLoadAddress,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR szName[  ],
            /* [out] */ AssemblyID *pAssemblyId,
            /* [out] */ DWORD *pdwModuleFlags);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumThreads)
        HRESULT ( STDMETHODCALLTYPE *EnumThreads )( 
            ICorProfilerInfo15 * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, InitializeCurrentThread)
        HRESULT ( STDMETHODCALLTYPE *InitializeCurrentThread )( 
            ICorProfilerInfo15 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestReJIT)
        HRESULT ( STDMETHODCALLTYPE *RequestReJIT )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, RequestRevert)
        HRESULT ( STDMETHODCALLTYPE *RequestRevert )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ],
            /* [size_is][out] */ HRESULT status[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetCodeInfo3)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo3 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionID,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cCodeInfos,
            /* [out] */ ULONG32 *pcCodeInfos,
            /* [length_is][size_is][out] */ COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetFunctionFromIP2)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *pFunctionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetReJITIDs)
        HRESULT ( STDMETHODCALLTYPE *GetReJITIDs )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ULONG cReJitIds,
            /* [out] */ ULONG *pcReJitIds,
            /* [length_is][size_is][out] */ ReJITID reJitIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetILToNativeMapping2)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [in] */ ReJITID reJitId,
            /* [in] */ ULONG32 cMap,
            /* [out] */ ULONG32 *pcMap,
            /* [length_is][size_is][out] */ COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, EnumJITedFunctions2)
        HRESULT ( STDMETHODCALLTYPE *EnumJITedFunctions2 )( 
            ICorProfilerInfo15 * This,
            /* [out] */ ICorProfilerFunctionEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo4, GetObjectSize2)
        HRESULT ( STDMETHODCALLTYPE *GetObjectSize2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ObjectID objectId,
            /* [out] */ SIZE_T *pcSize);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, GetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *GetEventMask2 )( 
            ICorProfilerInfo15 * This,
            /* [out] */ DWORD *pdwEventsLow,
            /* [out] */ DWORD *pdwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo5, SetEventMask2)
        HRESULT ( STDMETHODCALLTYPE *SetEventMask2 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ DWORD dwEventsLow,
            /* [in] */ DWORD dwEventsHigh);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo6, EnumNgenModuleMethodsInliningThisMethod)
        HRESULT ( STDMETHODCALLTYPE *EnumNgenModuleMethodsInliningThisMethod )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID inlinersModuleId,
            /* [in] */ ModuleID inlineeModuleId,
            /* [in] */ mdMethodDef inlineeMethodId,
            /* [out] */ BOOL *incompleteData,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ApplyMetaData)
        HRESULT ( STDMETHODCALLTYPE *ApplyMetaData )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, GetInMemorySymbolsLength)
        HRESULT ( STDMETHODCALLTYPE *GetInMemorySymbolsLength )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [out] */ DWORD *pCountSymbolBytes);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo7, ReadInMemorySymbols)
        HRESULT ( STDMETHODCALLTYPE *ReadInMemorySymbols )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ModuleID moduleId,
            /* [in] */ DWORD symbolsReadOffset,
            /* [out] */ BYTE *pSymbolBytes,
            /* [in] */ DWORD countSymbolBytes,
            /* [out] */ DWORD *pCountSymbolBytesRead);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, IsFunctionDynamic)
        HRESULT ( STDMETHODCALLTYPE *IsFunctionDynamic )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ BOOL *isDynamic);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetFunctionFromIP3)
        HRESULT ( STDMETHODCALLTYPE *GetFunctionFromIP3 )( 
            ICorProfilerInfo15 * This,
            /* [in] */ LPCBYTE ip,
            /* [out] */ FunctionID *functionId,
            /* [out] */ ReJITID *pReJitId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo8, GetDynamicFunctionInfo)
        HRESULT ( STDMETHODCALLTYPE *GetDynamicFunctionInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ FunctionID functionId,
            /* [out] */ ModuleID *moduleId,
            /* [out] */ PCCOR_SIGNATURE *ppvSig,
            /* [out] */ ULONG *pbSig,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [out] */ WCHAR wszName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetNativeCodeStartAddresses)
        HRESULT ( STDMETHODCALLTYPE *GetNativeCodeStartAddresses )( 
            ICorProfilerInfo15 * This,
            FunctionID functionID,
            ReJITID reJitId,
            ULONG32 cCodeStartAddresses,
            ULONG32 *pcCodeStartAddresses,
            UINT_PTR codeStartAddresses[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetILToNativeMapping3)
        HRESULT ( STDMETHODCALLTYPE *GetILToNativeMapping3 )( 
            ICorProfilerInfo15 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cMap,
            ULONG32 *pcMap,
            COR_DEBUG_IL_TO_NATIVE_MAP map[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo9, GetCodeInfo4)
        HRESULT ( STDMETHODCALLTYPE *GetCodeInfo4 )( 
            ICorProfilerInfo15 * This,
            UINT_PTR pNativeCodeStartAddress,
            ULONG32 cCodeInfos,
            ULONG32 *pcCodeInfos,
            COR_PRF_CODE_INFO codeInfos[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, EnumerateObjectReferences)
        HRESULT ( STDMETHODCALLTYPE *EnumerateObjectReferences )( 
            ICorProfilerInfo15 * This,
            ObjectID objectId,
            ObjectReferenceCallback callback,
            void *clientData);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, IsFrozenObject)
        HRESULT ( STDMETHODCALLTYPE *IsFrozenObject )( 
            ICorProfilerInfo15 * This,
            ObjectID objectId,
            BOOL *pbFrozen);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, GetLOHObjectSizeThreshold)
        HRESULT ( STDMETHODCALLTYPE *GetLOHObjectSizeThreshold )( 
            ICorProfilerInfo15 * This,
            DWORD *pThreshold);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, RequestReJITWithInliners)
        HRESULT ( STDMETHODCALLTYPE *RequestReJITWithInliners )( 
            ICorProfilerInfo15 * This,
            /* [in] */ DWORD dwRejitFlags,
            /* [in] */ ULONG cFunctions,
            /* [size_is][in] */ ModuleID moduleIds[  ],
            /* [size_is][in] */ mdMethodDef methodIds[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, SuspendRuntime)
        HRESULT ( STDMETHODCALLTYPE *SuspendRuntime )( 
            ICorProfilerInfo15 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo10, ResumeRuntime)
        HRESULT ( STDMETHODCALLTYPE *ResumeRuntime )( 
            ICorProfilerInfo15 * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, GetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *GetEnvironmentVariable )( 
            ICorProfilerInfo15 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [in] */ ULONG cchValue,
            /* [out] */ ULONG *pcchValue,
            /* [annotation][out] */ 
            _Out_writes_to_(cchValue, *pcchValue)  WCHAR szValue[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo11, SetEnvironmentVariable)
        HRESULT ( STDMETHODCALLTYPE *SetEnvironmentVariable )( 
            ICorProfilerInfo15 * This,
            /* [string][in] */ const WCHAR *szName,
            /* [string][in] */ const WCHAR *szValue);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeStartSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeStartSession )( 
            ICorProfilerInfo15 * This,
            /* [in] */ UINT32 cProviderConfigs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG pProviderConfigs[  ],
            /* [in] */ BOOL requestRundown,
            /* [out] */ EVENTPIPE_SESSION *pSession);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeAddProviderToSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeAddProviderToSession )( 
            ICorProfilerInfo15 * This,
            /* [in] */ EVENTPIPE_SESSION session,
            /* [in] */ COR_PRF_EVENTPIPE_PROVIDER_CONFIG providerConfig);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeStopSession)
        HRESULT ( STDMETHODCALLTYPE *EventPipeStopSession )( 
            ICorProfilerInfo15 * This,
            /* [in] */ EVENTPIPE_SESSION session);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeCreateProvider)
        HRESULT ( STDMETHODCALLTYPE *EventPipeCreateProvider )( 
            ICorProfilerInfo15 * This,
            /* [string][in] */ const WCHAR *providerName,
            /* [out] */ EVENTPIPE_PROVIDER *pProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeGetProviderInfo)
        HRESULT ( STDMETHODCALLTYPE *EventPipeGetProviderInfo )( 
            ICorProfilerInfo15 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [in] */ ULONG cchName,
            /* [out] */ ULONG *pcchName,
            /* [annotation][out] */ 
            _Out_writes_to_(cchName, *pcchName)  WCHAR providerName[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeDefineEvent)
        HRESULT ( STDMETHODCALLTYPE *EventPipeDefineEvent )( 
            ICorProfilerInfo15 * This,
            /* [in] */ EVENTPIPE_PROVIDER provider,
            /* [string][in] */ const WCHAR *eventName,
            /* [in] */ UINT32 eventID,
            /* [in] */ UINT64 keywords,
            /* [in] */ UINT32 eventVersion,
            /* [in] */ UINT32 level,
            /* [in] */ UINT8 opcode,
            /* [in] */ BOOL needStack,
            /* [in] */ UINT32 cParamDescs,
            /* [size_is][in] */ COR_PRF_EVENTPIPE_PARAM_DESC pParamDescs[  ],
            /* [out] */ EVENTPIPE_EVENT *pEvent);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo12, EventPipeWriteEvent)
        HRESULT ( STDMETHODCALLTYPE *EventPipeWriteEvent )( 
            ICorProfilerInfo15 * This,
            /* [in] */ EVENTPIPE_EVENT event,
            /* [in] */ UINT32 cData,
            /* [size_is][in] */ COR_PRF_EVENT_DATA data[  ],
            /* [in] */ LPCGUID pActivityId,
            /* [in] */ LPCGUID pRelatedActivityId);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo13, CreateHandle)
        HRESULT ( STDMETHODCALLTYPE *CreateHandle )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ObjectID object,
            /* [in] */ COR_PRF_HANDLE_TYPE type,
            /* [out] */ ObjectHandleID *pHandle);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo13, DestroyHandle)
        HRESULT ( STDMETHODCALLTYPE *DestroyHandle )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ObjectHandleID handle);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo13, GetObjectIDFromHandle)
        HRESULT ( STDMETHODCALLTYPE *GetObjectIDFromHandle )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ObjectHandleID handle,
            /* [out] */ ObjectID *pObject);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo14, EnumerateNonGCObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumerateNonGCObjects )( 
            ICorProfilerInfo15 * This,
            /* [out] */ ICorProfilerObjectEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo14, GetNonGCHeapBounds)
        HRESULT ( STDMETHODCALLTYPE *GetNonGCHeapBounds )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ULONG cObjectRanges,
            /* [out] */ ULONG *pcObjectRanges,
            /* [length_is][size_is][out] */ COR_PRF_NONGC_HEAP_RANGE ranges[  ]);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo14, EventPipeCreateProvider2)
        HRESULT ( STDMETHODCALLTYPE *EventPipeCreateProvider2 )( 
            ICorProfilerInfo15 * This,
            /* [string][in] */ const WCHAR *providerName,
            /* [in] */ EventPipeProviderCallback *pCallback,
            /* [out] */ EVENTPIPE_PROVIDER *pProvider);
        
        DECLSPEC_XFGVIRT(ICorProfilerInfo15, EnumerateGCHeapObjects)
        HRESULT ( STDMETHODCALLTYPE *EnumerateGCHeapObjects )( 
            ICorProfilerInfo15 * This,
            /* [in] */ ObjectCallback callback,
            /* [in] */ void *callbackState);
        
        END_INTERFACE
    } ICorProfilerInfo15Vtbl;

    interface ICorProfilerInfo15
    {
        CONST_VTBL struct ICorProfilerInfo15Vtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerInfo15_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerInfo15_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerInfo15_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerInfo15_GetClassFromObject(This,objectId,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromObject(This,objectId,pClassId) ) 

#define ICorProfilerInfo15_GetClassFromToken(This,moduleId,typeDef,pClassId)	\
    ( (This)->lpVtbl -> GetClassFromToken(This,moduleId,typeDef,pClassId) ) 

#define ICorProfilerInfo15_GetCodeInfo(This,functionId,pStart,pcSize)	\
    ( (This)->lpVtbl -> GetCodeInfo(This,functionId,pStart,pcSize) ) 

#define ICorProfilerInfo15_GetEventMask(This,pdwEvents)	\
    ( (This)->lpVtbl -> GetEventMask(This,pdwEvents) ) 

#define ICorProfilerInfo15_GetFunctionFromIP(This,ip,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP(This,ip,pFunctionId) ) 

#define ICorProfilerInfo15_GetFunctionFromToken(This,moduleId,token,pFunctionId)	\
    ( (This)->lpVtbl -> GetFunctionFromToken(This,moduleId,token,pFunctionId) ) 

#define ICorProfilerInfo15_GetHandleFromThread(This,threadId,phThread)	\
    ( (This)->lpVtbl -> GetHandleFromThread(This,threadId,phThread) ) 

#define ICorProfilerInfo15_GetObjectSize(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize(This,objectId,pcSize) ) 

#define ICorProfilerInfo15_IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank)	\
    ( (This)->lpVtbl -> IsArrayClass(This,classId,pBaseElemType,pBaseClassId,pcRank) ) 

#define ICorProfilerInfo15_GetThreadInfo(This,threadId,pdwWin32ThreadId)	\
    ( (This)->lpVtbl -> GetThreadInfo(This,threadId,pdwWin32ThreadId) ) 

#define ICorProfilerInfo15_GetCurrentThreadID(This,pThreadId)	\
    ( (This)->lpVtbl -> GetCurrentThreadID(This,pThreadId) ) 

#define ICorProfilerInfo15_GetClassIDInfo(This,classId,pModuleId,pTypeDefToken)	\
    ( (This)->lpVtbl -> GetClassIDInfo(This,classId,pModuleId,pTypeDefToken) ) 

#define ICorProfilerInfo15_GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken)	\
    ( (This)->lpVtbl -> GetFunctionInfo(This,functionId,pClassId,pModuleId,pToken) ) 

#define ICorProfilerInfo15_SetEventMask(This,dwEvents)	\
    ( (This)->lpVtbl -> SetEventMask(This,dwEvents) ) 

#define ICorProfilerInfo15_SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo15_SetFunctionIDMapper(This,pFunc)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper(This,pFunc) ) 

#define ICorProfilerInfo15_GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken)	\
    ( (This)->lpVtbl -> GetTokenAndMetaDataFromFunction(This,functionId,riid,ppImport,pToken) ) 

#define ICorProfilerInfo15_GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId)	\
    ( (This)->lpVtbl -> GetModuleInfo(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId) ) 

#define ICorProfilerInfo15_GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut)	\
    ( (This)->lpVtbl -> GetModuleMetaData(This,moduleId,dwOpenFlags,riid,ppOut) ) 

#define ICorProfilerInfo15_GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize)	\
    ( (This)->lpVtbl -> GetILFunctionBody(This,moduleId,methodId,ppMethodHeader,pcbMethodSize) ) 

#define ICorProfilerInfo15_GetILFunctionBodyAllocator(This,moduleId,ppMalloc)	\
    ( (This)->lpVtbl -> GetILFunctionBodyAllocator(This,moduleId,ppMalloc) ) 

#define ICorProfilerInfo15_SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader)	\
    ( (This)->lpVtbl -> SetILFunctionBody(This,moduleId,methodid,pbNewILMethodHeader) ) 

#define ICorProfilerInfo15_GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId)	\
    ( (This)->lpVtbl -> GetAppDomainInfo(This,appDomainId,cchName,pcchName,szName,pProcessId) ) 

#define ICorProfilerInfo15_GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId)	\
    ( (This)->lpVtbl -> GetAssemblyInfo(This,assemblyId,cchName,pcchName,szName,pAppDomainId,pModuleId) ) 

#define ICorProfilerInfo15_SetFunctionReJIT(This,functionId)	\
    ( (This)->lpVtbl -> SetFunctionReJIT(This,functionId) ) 

#define ICorProfilerInfo15_ForceGC(This)	\
    ( (This)->lpVtbl -> ForceGC(This) ) 

#define ICorProfilerInfo15_SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries)	\
    ( (This)->lpVtbl -> SetILInstrumentedCodeMap(This,functionId,fStartJit,cILMapEntries,rgILMapEntries) ) 

#define ICorProfilerInfo15_GetInprocInspectionInterface(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionInterface(This,ppicd) ) 

#define ICorProfilerInfo15_GetInprocInspectionIThisThread(This,ppicd)	\
    ( (This)->lpVtbl -> GetInprocInspectionIThisThread(This,ppicd) ) 

#define ICorProfilerInfo15_GetThreadContext(This,threadId,pContextId)	\
    ( (This)->lpVtbl -> GetThreadContext(This,threadId,pContextId) ) 

#define ICorProfilerInfo15_BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext)	\
    ( (This)->lpVtbl -> BeginInprocDebugging(This,fThisThreadOnly,pdwProfilerContext) ) 

#define ICorProfilerInfo15_EndInprocDebugging(This,dwProfilerContext)	\
    ( (This)->lpVtbl -> EndInprocDebugging(This,dwProfilerContext) ) 

#define ICorProfilerInfo15_GetILToNativeMapping(This,functionId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping(This,functionId,cMap,pcMap,map) ) 


#define ICorProfilerInfo15_DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize)	\
    ( (This)->lpVtbl -> DoStackSnapshot(This,thread,callback,infoFlags,clientData,context,contextSize) ) 

#define ICorProfilerInfo15_SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks2(This,pFuncEnter,pFuncLeave,pFuncTailcall) ) 

#define ICorProfilerInfo15_GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetFunctionInfo2(This,funcId,frameInfo,pClassId,pModuleId,pToken,cTypeArgs,pcTypeArgs,typeArgs) ) 

#define ICorProfilerInfo15_GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout(This,pBufferLengthOffset,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo15_GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize)	\
    ( (This)->lpVtbl -> GetClassLayout(This,classID,rFieldOffset,cFieldOffset,pcFieldOffset,pulClassSize) ) 

#define ICorProfilerInfo15_GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs)	\
    ( (This)->lpVtbl -> GetClassIDInfo2(This,classId,pModuleId,pTypeDefToken,pParentClassId,cNumTypeArgs,pcNumTypeArgs,typeArgs) ) 

#define ICorProfilerInfo15_GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo2(This,functionID,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo15_GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID)	\
    ( (This)->lpVtbl -> GetClassFromTokenAndTypeArgs(This,moduleID,typeDef,cTypeArgs,typeArgs,pClassID) ) 

#define ICorProfilerInfo15_GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID)	\
    ( (This)->lpVtbl -> GetFunctionFromTokenAndTypeArgs(This,moduleID,funcDef,classId,cTypeArgs,typeArgs,pFunctionID) ) 

#define ICorProfilerInfo15_EnumModuleFrozenObjects(This,moduleID,ppEnum)	\
    ( (This)->lpVtbl -> EnumModuleFrozenObjects(This,moduleID,ppEnum) ) 

#define ICorProfilerInfo15_GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData)	\
    ( (This)->lpVtbl -> GetArrayObjectInfo(This,objectId,cDimensions,pDimensionSizes,pDimensionLowerBounds,ppData) ) 

#define ICorProfilerInfo15_GetBoxClassLayout(This,classId,pBufferOffset)	\
    ( (This)->lpVtbl -> GetBoxClassLayout(This,classId,pBufferOffset) ) 

#define ICorProfilerInfo15_GetThreadAppDomain(This,threadId,pAppDomainId)	\
    ( (This)->lpVtbl -> GetThreadAppDomain(This,threadId,pAppDomainId) ) 

#define ICorProfilerInfo15_GetRVAStaticAddress(This,classId,fieldToken,ppAddress)	\
    ( (This)->lpVtbl -> GetRVAStaticAddress(This,classId,fieldToken,ppAddress) ) 

#define ICorProfilerInfo15_GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress)	\
    ( (This)->lpVtbl -> GetAppDomainStaticAddress(This,classId,fieldToken,appDomainId,ppAddress) ) 

#define ICorProfilerInfo15_GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress(This,classId,fieldToken,threadId,ppAddress) ) 

#define ICorProfilerInfo15_GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress)	\
    ( (This)->lpVtbl -> GetContextStaticAddress(This,classId,fieldToken,contextId,ppAddress) ) 

#define ICorProfilerInfo15_GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo)	\
    ( (This)->lpVtbl -> GetStaticFieldInfo(This,classId,fieldToken,pFieldInfo) ) 

#define ICorProfilerInfo15_GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetGenerationBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo15_GetObjectGeneration(This,objectId,range)	\
    ( (This)->lpVtbl -> GetObjectGeneration(This,objectId,range) ) 

#define ICorProfilerInfo15_GetNotifiedExceptionClauseInfo(This,pinfo)	\
    ( (This)->lpVtbl -> GetNotifiedExceptionClauseInfo(This,pinfo) ) 


#define ICorProfilerInfo15_EnumJITedFunctions(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions(This,ppEnum) ) 

#define ICorProfilerInfo15_RequestProfilerDetach(This,dwExpectedCompletionMilliseconds)	\
    ( (This)->lpVtbl -> RequestProfilerDetach(This,dwExpectedCompletionMilliseconds) ) 

#define ICorProfilerInfo15_SetFunctionIDMapper2(This,pFunc,clientData)	\
    ( (This)->lpVtbl -> SetFunctionIDMapper2(This,pFunc,clientData) ) 

#define ICorProfilerInfo15_GetStringLayout2(This,pStringLengthOffset,pBufferOffset)	\
    ( (This)->lpVtbl -> GetStringLayout2(This,pStringLengthOffset,pBufferOffset) ) 

#define ICorProfilerInfo15_SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3(This,pFuncEnter3,pFuncLeave3,pFuncTailcall3) ) 

#define ICorProfilerInfo15_SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo)	\
    ( (This)->lpVtbl -> SetEnterLeaveFunctionHooks3WithInfo(This,pFuncEnter3WithInfo,pFuncLeave3WithInfo,pFuncTailcall3WithInfo) ) 

#define ICorProfilerInfo15_GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo)	\
    ( (This)->lpVtbl -> GetFunctionEnter3Info(This,functionId,eltInfo,pFrameInfo,pcbArgumentInfo,pArgumentInfo) ) 

#define ICorProfilerInfo15_GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange)	\
    ( (This)->lpVtbl -> GetFunctionLeave3Info(This,functionId,eltInfo,pFrameInfo,pRetvalRange) ) 

#define ICorProfilerInfo15_GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo)	\
    ( (This)->lpVtbl -> GetFunctionTailcall3Info(This,functionId,eltInfo,pFrameInfo) ) 

#define ICorProfilerInfo15_EnumModules(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumModules(This,ppEnum) ) 

#define ICorProfilerInfo15_GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString)	\
    ( (This)->lpVtbl -> GetRuntimeInformation(This,pClrInstanceId,pRuntimeType,pMajorVersion,pMinorVersion,pBuildNumber,pQFEVersion,cchVersionString,pcchVersionString,szVersionString) ) 

#define ICorProfilerInfo15_GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress)	\
    ( (This)->lpVtbl -> GetThreadStaticAddress2(This,classId,fieldToken,appDomainId,threadId,ppAddress) ) 

#define ICorProfilerInfo15_GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds)	\
    ( (This)->lpVtbl -> GetAppDomainsContainingModule(This,moduleId,cAppDomainIds,pcAppDomainIds,appDomainIds) ) 

#define ICorProfilerInfo15_GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags)	\
    ( (This)->lpVtbl -> GetModuleInfo2(This,moduleId,ppBaseLoadAddress,cchName,pcchName,szName,pAssemblyId,pdwModuleFlags) ) 


#define ICorProfilerInfo15_EnumThreads(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumThreads(This,ppEnum) ) 

#define ICorProfilerInfo15_InitializeCurrentThread(This)	\
    ( (This)->lpVtbl -> InitializeCurrentThread(This) ) 

#define ICorProfilerInfo15_RequestReJIT(This,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJIT(This,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo15_RequestRevert(This,cFunctions,moduleIds,methodIds,status)	\
    ( (This)->lpVtbl -> RequestRevert(This,cFunctions,moduleIds,methodIds,status) ) 

#define ICorProfilerInfo15_GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo3(This,functionID,reJitId,cCodeInfos,pcCodeInfos,codeInfos) ) 

#define ICorProfilerInfo15_GetFunctionFromIP2(This,ip,pFunctionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP2(This,ip,pFunctionId,pReJitId) ) 

#define ICorProfilerInfo15_GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds)	\
    ( (This)->lpVtbl -> GetReJITIDs(This,functionId,cReJitIds,pcReJitIds,reJitIds) ) 

#define ICorProfilerInfo15_GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping2(This,functionId,reJitId,cMap,pcMap,map) ) 

#define ICorProfilerInfo15_EnumJITedFunctions2(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumJITedFunctions2(This,ppEnum) ) 

#define ICorProfilerInfo15_GetObjectSize2(This,objectId,pcSize)	\
    ( (This)->lpVtbl -> GetObjectSize2(This,objectId,pcSize) ) 


#define ICorProfilerInfo15_GetEventMask2(This,pdwEventsLow,pdwEventsHigh)	\
    ( (This)->lpVtbl -> GetEventMask2(This,pdwEventsLow,pdwEventsHigh) ) 

#define ICorProfilerInfo15_SetEventMask2(This,dwEventsLow,dwEventsHigh)	\
    ( (This)->lpVtbl -> SetEventMask2(This,dwEventsLow,dwEventsHigh) ) 


#define ICorProfilerInfo15_EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum)	\
    ( (This)->lpVtbl -> EnumNgenModuleMethodsInliningThisMethod(This,inlinersModuleId,inlineeModuleId,inlineeMethodId,incompleteData,ppEnum) ) 


#define ICorProfilerInfo15_ApplyMetaData(This,moduleId)	\
    ( (This)->lpVtbl -> ApplyMetaData(This,moduleId) ) 

#define ICorProfilerInfo15_GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes)	\
    ( (This)->lpVtbl -> GetInMemorySymbolsLength(This,moduleId,pCountSymbolBytes) ) 

#define ICorProfilerInfo15_ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead)	\
    ( (This)->lpVtbl -> ReadInMemorySymbols(This,moduleId,symbolsReadOffset,pSymbolBytes,countSymbolBytes,pCountSymbolBytesRead) ) 


#define ICorProfilerInfo15_IsFunctionDynamic(This,functionId,isDynamic)	\
    ( (This)->lpVtbl -> IsFunctionDynamic(This,functionId,isDynamic) ) 

#define ICorProfilerInfo15_GetFunctionFromIP3(This,ip,functionId,pReJitId)	\
    ( (This)->lpVtbl -> GetFunctionFromIP3(This,ip,functionId,pReJitId) ) 

#define ICorProfilerInfo15_GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName)	\
    ( (This)->lpVtbl -> GetDynamicFunctionInfo(This,functionId,moduleId,ppvSig,pbSig,cchName,pcchName,wszName) ) 


#define ICorProfilerInfo15_GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses)	\
    ( (This)->lpVtbl -> GetNativeCodeStartAddresses(This,functionID,reJitId,cCodeStartAddresses,pcCodeStartAddresses,codeStartAddresses) ) 

#define ICorProfilerInfo15_GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map)	\
    ( (This)->lpVtbl -> GetILToNativeMapping3(This,pNativeCodeStartAddress,cMap,pcMap,map) ) 

#define ICorProfilerInfo15_GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos)	\
    ( (This)->lpVtbl -> GetCodeInfo4(This,pNativeCodeStartAddress,cCodeInfos,pcCodeInfos,codeInfos) ) 


#define ICorProfilerInfo15_EnumerateObjectReferences(This,objectId,callback,clientData)	\
    ( (This)->lpVtbl -> EnumerateObjectReferences(This,objectId,callback,clientData) ) 

#define ICorProfilerInfo15_IsFrozenObject(This,objectId,pbFrozen)	\
    ( (This)->lpVtbl -> IsFrozenObject(This,objectId,pbFrozen) ) 

#define ICorProfilerInfo15_GetLOHObjectSizeThreshold(This,pThreshold)	\
    ( (This)->lpVtbl -> GetLOHObjectSizeThreshold(This,pThreshold) ) 

#define ICorProfilerInfo15_RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds)	\
    ( (This)->lpVtbl -> RequestReJITWithInliners(This,dwRejitFlags,cFunctions,moduleIds,methodIds) ) 

#define ICorProfilerInfo15_SuspendRuntime(This)	\
    ( (This)->lpVtbl -> SuspendRuntime(This) ) 

#define ICorProfilerInfo15_ResumeRuntime(This)	\
    ( (This)->lpVtbl -> ResumeRuntime(This) ) 


#define ICorProfilerInfo15_GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue)	\
    ( (This)->lpVtbl -> GetEnvironmentVariable(This,szName,cchValue,pcchValue,szValue) ) 

#define ICorProfilerInfo15_SetEnvironmentVariable(This,szName,szValue)	\
    ( (This)->lpVtbl -> SetEnvironmentVariable(This,szName,szValue) ) 


#define ICorProfilerInfo15_EventPipeStartSession(This,cProviderConfigs,pProviderConfigs,requestRundown,pSession)	\
    ( (This)->lpVtbl -> EventPipeStartSession(This,cProviderConfigs,pProviderConfigs,requestRundown,pSession) ) 

#define ICorProfilerInfo15_EventPipeAddProviderToSession(This,session,providerConfig)	\
    ( (This)->lpVtbl -> EventPipeAddProviderToSession(This,session,providerConfig) ) 

#define ICorProfilerInfo15_EventPipeStopSession(This,session)	\
    ( (This)->lpVtbl -> EventPipeStopSession(This,session) ) 

#define ICorProfilerInfo15_EventPipeCreateProvider(This,providerName,pProvider)	\
    ( (This)->lpVtbl -> EventPipeCreateProvider(This,providerName,pProvider) ) 

#define ICorProfilerInfo15_EventPipeGetProviderInfo(This,provider,cchName,pcchName,providerName)	\
    ( (This)->lpVtbl -> EventPipeGetProviderInfo(This,provider,cchName,pcchName,providerName) ) 

#define ICorProfilerInfo15_EventPipeDefineEvent(This,provider,eventName,eventID,keywords,eventVersion,level,opcode,needStack,cParamDescs,pParamDescs,pEvent)	\
    ( (This)->lpVtbl -> EventPipeDefineEvent(This,provider,eventName,eventID,keywords,eventVersion,level,opcode,needStack,cParamDescs,pParamDescs,pEvent) ) 

#define ICorProfilerInfo15_EventPipeWriteEvent(This,event,cData,data,pActivityId,pRelatedActivityId)	\
    ( (This)->lpVtbl -> EventPipeWriteEvent(This,event,cData,data,pActivityId,pRelatedActivityId) ) 


#define ICorProfilerInfo15_CreateHandle(This,object,type,pHandle)	\
    ( (This)->lpVtbl -> CreateHandle(This,object,type,pHandle) ) 

#define ICorProfilerInfo15_DestroyHandle(This,handle)	\
    ( (This)->lpVtbl -> DestroyHandle(This,handle) ) 

#define ICorProfilerInfo15_GetObjectIDFromHandle(This,handle,pObject)	\
    ( (This)->lpVtbl -> GetObjectIDFromHandle(This,handle,pObject) ) 


#define ICorProfilerInfo15_EnumerateNonGCObjects(This,ppEnum)	\
    ( (This)->lpVtbl -> EnumerateNonGCObjects(This,ppEnum) ) 

#define ICorProfilerInfo15_GetNonGCHeapBounds(This,cObjectRanges,pcObjectRanges,ranges)	\
    ( (This)->lpVtbl -> GetNonGCHeapBounds(This,cObjectRanges,pcObjectRanges,ranges) ) 

#define ICorProfilerInfo15_EventPipeCreateProvider2(This,providerName,pCallback,pProvider)	\
    ( (This)->lpVtbl -> EventPipeCreateProvider2(This,providerName,pCallback,pProvider) ) 


#define ICorProfilerInfo15_EnumerateGCHeapObjects(This,callback,callbackState)	\
    ( (This)->lpVtbl -> EnumerateGCHeapObjects(This,callback,callbackState) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerInfo15_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerMethodEnum_INTERFACE_DEFINED__
#define __ICorProfilerMethodEnum_INTERFACE_DEFINED__

/* interface ICorProfilerMethodEnum */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerMethodEnum;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("FCCEE788-0088-454B-A811-C99F298D1942")
    ICorProfilerMethodEnum : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Skip( 
            /* [in] */ ULONG celt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Clone( 
            /* [out] */ ICorProfilerMethodEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCount( 
            /* [out] */ ULONG *pcelt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Next( 
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ COR_PRF_METHOD elements[  ],
            /* [out] */ ULONG *pceltFetched) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerMethodEnumVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerMethodEnum * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerMethodEnum * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerMethodEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerMethodEnum, Skip)
        HRESULT ( STDMETHODCALLTYPE *Skip )( 
            ICorProfilerMethodEnum * This,
            /* [in] */ ULONG celt);
        
        DECLSPEC_XFGVIRT(ICorProfilerMethodEnum, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ICorProfilerMethodEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerMethodEnum, Clone)
        HRESULT ( STDMETHODCALLTYPE *Clone )( 
            ICorProfilerMethodEnum * This,
            /* [out] */ ICorProfilerMethodEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerMethodEnum, GetCount)
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            ICorProfilerMethodEnum * This,
            /* [out] */ ULONG *pcelt);
        
        DECLSPEC_XFGVIRT(ICorProfilerMethodEnum, Next)
        HRESULT ( STDMETHODCALLTYPE *Next )( 
            ICorProfilerMethodEnum * This,
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ COR_PRF_METHOD elements[  ],
            /* [out] */ ULONG *pceltFetched);
        
        END_INTERFACE
    } ICorProfilerMethodEnumVtbl;

    interface ICorProfilerMethodEnum
    {
        CONST_VTBL struct ICorProfilerMethodEnumVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerMethodEnum_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerMethodEnum_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerMethodEnum_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerMethodEnum_Skip(This,celt)	\
    ( (This)->lpVtbl -> Skip(This,celt) ) 

#define ICorProfilerMethodEnum_Reset(This)	\
    ( (This)->lpVtbl -> Reset(This) ) 

#define ICorProfilerMethodEnum_Clone(This,ppEnum)	\
    ( (This)->lpVtbl -> Clone(This,ppEnum) ) 

#define ICorProfilerMethodEnum_GetCount(This,pcelt)	\
    ( (This)->lpVtbl -> GetCount(This,pcelt) ) 

#define ICorProfilerMethodEnum_Next(This,celt,elements,pceltFetched)	\
    ( (This)->lpVtbl -> Next(This,celt,elements,pceltFetched) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerMethodEnum_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerThreadEnum_INTERFACE_DEFINED__
#define __ICorProfilerThreadEnum_INTERFACE_DEFINED__

/* interface ICorProfilerThreadEnum */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerThreadEnum;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("571194f7-25ed-419f-aa8b-7016b3159701")
    ICorProfilerThreadEnum : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE Skip( 
            /* [in] */ ULONG celt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Clone( 
            /* [out] */ ICorProfilerThreadEnum **ppEnum) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE GetCount( 
            /* [out] */ ULONG *pcelt) = 0;
        
        virtual HRESULT STDMETHODCALLTYPE Next( 
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ ThreadID ids[  ],
            /* [out] */ ULONG *pceltFetched) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerThreadEnumVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerThreadEnum * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerThreadEnum * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerThreadEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerThreadEnum, Skip)
        HRESULT ( STDMETHODCALLTYPE *Skip )( 
            ICorProfilerThreadEnum * This,
            /* [in] */ ULONG celt);
        
        DECLSPEC_XFGVIRT(ICorProfilerThreadEnum, Reset)
        HRESULT ( STDMETHODCALLTYPE *Reset )( 
            ICorProfilerThreadEnum * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerThreadEnum, Clone)
        HRESULT ( STDMETHODCALLTYPE *Clone )( 
            ICorProfilerThreadEnum * This,
            /* [out] */ ICorProfilerThreadEnum **ppEnum);
        
        DECLSPEC_XFGVIRT(ICorProfilerThreadEnum, GetCount)
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            ICorProfilerThreadEnum * This,
            /* [out] */ ULONG *pcelt);
        
        DECLSPEC_XFGVIRT(ICorProfilerThreadEnum, Next)
        HRESULT ( STDMETHODCALLTYPE *Next )( 
            ICorProfilerThreadEnum * This,
            /* [in] */ ULONG celt,
            /* [length_is][size_is][out] */ ThreadID ids[  ],
            /* [out] */ ULONG *pceltFetched);
        
        END_INTERFACE
    } ICorProfilerThreadEnumVtbl;

    interface ICorProfilerThreadEnum
    {
        CONST_VTBL struct ICorProfilerThreadEnumVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerThreadEnum_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerThreadEnum_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerThreadEnum_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerThreadEnum_Skip(This,celt)	\
    ( (This)->lpVtbl -> Skip(This,celt) ) 

#define ICorProfilerThreadEnum_Reset(This)	\
    ( (This)->lpVtbl -> Reset(This) ) 

#define ICorProfilerThreadEnum_Clone(This,ppEnum)	\
    ( (This)->lpVtbl -> Clone(This,ppEnum) ) 

#define ICorProfilerThreadEnum_GetCount(This,pcelt)	\
    ( (This)->lpVtbl -> GetCount(This,pcelt) ) 

#define ICorProfilerThreadEnum_Next(This,celt,ids,pceltFetched)	\
    ( (This)->lpVtbl -> Next(This,celt,ids,pceltFetched) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerThreadEnum_INTERFACE_DEFINED__ */


#ifndef __ICorProfilerAssemblyReferenceProvider_INTERFACE_DEFINED__
#define __ICorProfilerAssemblyReferenceProvider_INTERFACE_DEFINED__

/* interface ICorProfilerAssemblyReferenceProvider */
/* [local][unique][uuid][object] */ 


EXTERN_C const IID IID_ICorProfilerAssemblyReferenceProvider;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    MIDL_INTERFACE("66A78C24-2EEF-4F65-B45F-DD1D8038BF3C")
    ICorProfilerAssemblyReferenceProvider : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE AddAssemblyReference( 
            const COR_PRF_ASSEMBLY_REFERENCE_INFO *pAssemblyRefInfo) = 0;
        
    };
    
    
#else 	/* C style interface */

    typedef struct ICorProfilerAssemblyReferenceProviderVtbl
    {
        BEGIN_INTERFACE
        
        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            ICorProfilerAssemblyReferenceProvider * This,
            /* [in] */ REFIID riid,
            /* [annotation][iid_is][out] */ 
            _COM_Outptr_  void **ppvObject);
        
        DECLSPEC_XFGVIRT(IUnknown, AddRef)
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            ICorProfilerAssemblyReferenceProvider * This);
        
        DECLSPEC_XFGVIRT(IUnknown, Release)
        ULONG ( STDMETHODCALLTYPE *Release )( 
            ICorProfilerAssemblyReferenceProvider * This);
        
        DECLSPEC_XFGVIRT(ICorProfilerAssemblyReferenceProvider, AddAssemblyReference)
        HRESULT ( STDMETHODCALLTYPE *AddAssemblyReference )( 
            ICorProfilerAssemblyReferenceProvider * This,
            const COR_PRF_ASSEMBLY_REFERENCE_INFO *pAssemblyRefInfo);
        
        END_INTERFACE
    } ICorProfilerAssemblyReferenceProviderVtbl;

    interface ICorProfilerAssemblyReferenceProvider
    {
        CONST_VTBL struct ICorProfilerAssemblyReferenceProviderVtbl *lpVtbl;
    };

    

#ifdef COBJMACROS


#define ICorProfilerAssemblyReferenceProvider_QueryInterface(This,riid,ppvObject)	\
    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 

#define ICorProfilerAssemblyReferenceProvider_AddRef(This)	\
    ( (This)->lpVtbl -> AddRef(This) ) 

#define ICorProfilerAssemblyReferenceProvider_Release(This)	\
    ( (This)->lpVtbl -> Release(This) ) 


#define ICorProfilerAssemblyReferenceProvider_AddAssemblyReference(This,pAssemblyRefInfo)	\
    ( (This)->lpVtbl -> AddAssemblyReference(This,pAssemblyRefInfo) ) 

#endif /* COBJMACROS */


#endif 	/* C style interface */




#endif 	/* __ICorProfilerAssemblyReferenceProvider_INTERFACE_DEFINED__ */


/* Additional Prototypes for ALL interfaces */

/* end of Additional Prototypes */

#ifdef __cplusplus
}
#endif

#endif


