/*** Autogenerated by WIDL 7.0 from include/activprof.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __activprof_h__
#define __activprof_h__

/* Forward declarations */

#ifndef __IActiveScriptProfilerControl_FWD_DEFINED__
#define __IActiveScriptProfilerControl_FWD_DEFINED__
typedef interface IActiveScriptProfilerControl IActiveScriptProfilerControl;
#ifdef __cplusplus
interface IActiveScriptProfilerControl;
#endif /* __cplusplus */
#endif

#ifndef __IActiveScriptProfilerControl2_FWD_DEFINED__
#define __IActiveScriptProfilerControl2_FWD_DEFINED__
typedef interface IActiveScriptProfilerControl2 IActiveScriptProfilerControl2;
#ifdef __cplusplus
interface IActiveScriptProfilerControl2;
#endif /* __cplusplus */
#endif

#ifndef __IActiveScriptProfilerHeapEnum_FWD_DEFINED__
#define __IActiveScriptProfilerHeapEnum_FWD_DEFINED__
typedef interface IActiveScriptProfilerHeapEnum IActiveScriptProfilerHeapEnum;
#ifdef __cplusplus
interface IActiveScriptProfilerHeapEnum;
#endif /* __cplusplus */
#endif

#ifndef __IActiveScriptProfilerControl3_FWD_DEFINED__
#define __IActiveScriptProfilerControl3_FWD_DEFINED__
typedef interface IActiveScriptProfilerControl3 IActiveScriptProfilerControl3;
#ifdef __cplusplus
interface IActiveScriptProfilerControl3;
#endif /* __cplusplus */
#endif

#ifndef __IActiveScriptProfilerCallback_FWD_DEFINED__
#define __IActiveScriptProfilerCallback_FWD_DEFINED__
typedef interface IActiveScriptProfilerCallback IActiveScriptProfilerCallback;
#ifdef __cplusplus
interface IActiveScriptProfilerCallback;
#endif /* __cplusplus */
#endif

#ifndef __IActiveScriptProfilerCallback2_FWD_DEFINED__
#define __IActiveScriptProfilerCallback2_FWD_DEFINED__
typedef interface IActiveScriptProfilerCallback2 IActiveScriptProfilerCallback2;
#ifdef __cplusplus
interface IActiveScriptProfilerCallback2;
#endif /* __cplusplus */
#endif

#ifndef __IActiveScriptProfilerCallback3_FWD_DEFINED__
#define __IActiveScriptProfilerCallback3_FWD_DEFINED__
typedef interface IActiveScriptProfilerCallback3 IActiveScriptProfilerCallback3;
#ifdef __cplusplus
interface IActiveScriptProfilerCallback3;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <unknwn.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */

#include <winapifamily.h>

#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

const HRESULT ACTIVPROF_E_PROFILER_PRESENT = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0200);
const HRESULT ACTIVPROF_E_PROFILER_ABSENT = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201);
const HRESULT ACTIVPROF_E_UNABLE_TO_APPLY_ACTION = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0202);
const ULONG PROFILER_HEAP_OBJECT_NAME_ID_UNAVAILABLE=(ULONG)-1;

#ifndef __ActivProf_h
#define __ActivProf_h


#ifndef _NO_SCRIPT_GUIDS
DEFINE_GUID(IID_IActiveScriptProfilerHeapEnum, 0x32e4694e, 0xd37, 0x419b, 0xb9, 0x3d, 0xfa, 0x20, 0xde, 0xd6, 0xe8, 0xea);
DEFINE_GUID(IID_IActiveScriptProfilerControl3, 0xb403015, 0xf381, 0x4023, 0xa5, 0xd0, 0x6f, 0xed, 0x7, 0x6d, 0xe7, 0x16);
#endif

typedef enum __WIDL_activprof_generated_name_0000000C {
    PROFILER_SCRIPT_TYPE_USER = 0,
    PROFILER_SCRIPT_TYPE_DYNAMIC = 1,
    PROFILER_SCRIPT_TYPE_NATIVE = 2,
    PROFILER_SCRIPT_TYPE_DOM = 3
} PROFILER_SCRIPT_TYPE;

typedef enum __WIDL_activprof_generated_name_0000000D {
    PROFILER_EVENT_MASK_TRACE_SCRIPT_FUNCTION_CALL = 0x1,
    PROFILER_EVENT_MASK_TRACE_NATIVE_FUNCTION_CALL = 0x2,
    PROFILER_EVENT_MASK_TRACE_DOM_FUNCTION_CALL = 0x4,
    PROFILER_EVENT_MASK_TRACE_ALL = PROFILER_EVENT_MASK_TRACE_SCRIPT_FUNCTION_CALL | PROFILER_EVENT_MASK_TRACE_NATIVE_FUNCTION_CALL,
    PROFILER_EVENT_MASK_TRACE_ALL_WITH_DOM = PROFILER_EVENT_MASK_TRACE_ALL | PROFILER_EVENT_MASK_TRACE_DOM_FUNCTION_CALL
} PROFILER_EVENT_MASK;

typedef LONG PROFILER_TOKEN;

/*****************************************************************************
 * IActiveScriptProfilerControl interface
 */
#ifndef __IActiveScriptProfilerControl_INTERFACE_DEFINED__
#define __IActiveScriptProfilerControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_IActiveScriptProfilerControl, 0x784b5ff0, 0x69b0, 0x47d1, 0xa7,0xdc, 0x25,0x18,0xf4,0x23,0x0e,0x90);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("784b5ff0-69b0-47d1-a7dc-2518f4230e90")
IActiveScriptProfilerControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE StartProfiling(
        REFCLSID clsidProfilerObject,
        DWORD dwEventMask,
        DWORD dwContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetProfilerEventMask(
        DWORD dwEventMask) = 0;

    virtual HRESULT STDMETHODCALLTYPE StopProfiling(
        HRESULT hrShutdownReason) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IActiveScriptProfilerControl, 0x784b5ff0, 0x69b0, 0x47d1, 0xa7,0xdc, 0x25,0x18,0xf4,0x23,0x0e,0x90)
#endif
#else
typedef struct IActiveScriptProfilerControlVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IActiveScriptProfilerControl *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IActiveScriptProfilerControl *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IActiveScriptProfilerControl *This);

    /*** IActiveScriptProfilerControl methods ***/
    HRESULT (STDMETHODCALLTYPE *StartProfiling)(
        IActiveScriptProfilerControl *This,
        REFCLSID clsidProfilerObject,
        DWORD dwEventMask,
        DWORD dwContext);

    HRESULT (STDMETHODCALLTYPE *SetProfilerEventMask)(
        IActiveScriptProfilerControl *This,
        DWORD dwEventMask);

    HRESULT (STDMETHODCALLTYPE *StopProfiling)(
        IActiveScriptProfilerControl *This,
        HRESULT hrShutdownReason);

    END_INTERFACE
} IActiveScriptProfilerControlVtbl;

interface IActiveScriptProfilerControl {
    CONST_VTBL IActiveScriptProfilerControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IActiveScriptProfilerControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IActiveScriptProfilerControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IActiveScriptProfilerControl_Release(This) (This)->lpVtbl->Release(This)
/*** IActiveScriptProfilerControl methods ***/
#define IActiveScriptProfilerControl_StartProfiling(This,clsidProfilerObject,dwEventMask,dwContext) (This)->lpVtbl->StartProfiling(This,clsidProfilerObject,dwEventMask,dwContext)
#define IActiveScriptProfilerControl_SetProfilerEventMask(This,dwEventMask) (This)->lpVtbl->SetProfilerEventMask(This,dwEventMask)
#define IActiveScriptProfilerControl_StopProfiling(This,hrShutdownReason) (This)->lpVtbl->StopProfiling(This,hrShutdownReason)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerControl_QueryInterface(IActiveScriptProfilerControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IActiveScriptProfilerControl_AddRef(IActiveScriptProfilerControl* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IActiveScriptProfilerControl_Release(IActiveScriptProfilerControl* This) {
    return This->lpVtbl->Release(This);
}
/*** IActiveScriptProfilerControl methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerControl_StartProfiling(IActiveScriptProfilerControl* This,REFCLSID clsidProfilerObject,DWORD dwEventMask,DWORD dwContext) {
    return This->lpVtbl->StartProfiling(This,clsidProfilerObject,dwEventMask,dwContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerControl_SetProfilerEventMask(IActiveScriptProfilerControl* This,DWORD dwEventMask) {
    return This->lpVtbl->SetProfilerEventMask(This,dwEventMask);
}
static FORCEINLINE HRESULT IActiveScriptProfilerControl_StopProfiling(IActiveScriptProfilerControl* This,HRESULT hrShutdownReason) {
    return This->lpVtbl->StopProfiling(This,hrShutdownReason);
}
#endif
#endif

#endif


#endif  /* __IActiveScriptProfilerControl_INTERFACE_DEFINED__ */


/*****************************************************************************
 * IActiveScriptProfilerControl2 interface
 */
#ifndef __IActiveScriptProfilerControl2_INTERFACE_DEFINED__
#define __IActiveScriptProfilerControl2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IActiveScriptProfilerControl2, 0x47810165, 0x498f, 0x40be, 0x94,0xf1, 0x65,0x35,0x57,0xe9,0xe7,0xda);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("47810165-498f-40be-94f1-653557e9e7da")
IActiveScriptProfilerControl2 : public IActiveScriptProfilerControl
{
    virtual HRESULT STDMETHODCALLTYPE CompleteProfilerStart(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE PrepareProfilerStop(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IActiveScriptProfilerControl2, 0x47810165, 0x498f, 0x40be, 0x94,0xf1, 0x65,0x35,0x57,0xe9,0xe7,0xda)
#endif
#else
typedef struct IActiveScriptProfilerControl2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IActiveScriptProfilerControl2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IActiveScriptProfilerControl2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IActiveScriptProfilerControl2 *This);

    /*** IActiveScriptProfilerControl methods ***/
    HRESULT (STDMETHODCALLTYPE *StartProfiling)(
        IActiveScriptProfilerControl2 *This,
        REFCLSID clsidProfilerObject,
        DWORD dwEventMask,
        DWORD dwContext);

    HRESULT (STDMETHODCALLTYPE *SetProfilerEventMask)(
        IActiveScriptProfilerControl2 *This,
        DWORD dwEventMask);

    HRESULT (STDMETHODCALLTYPE *StopProfiling)(
        IActiveScriptProfilerControl2 *This,
        HRESULT hrShutdownReason);

    /*** IActiveScriptProfilerControl2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CompleteProfilerStart)(
        IActiveScriptProfilerControl2 *This);

    HRESULT (STDMETHODCALLTYPE *PrepareProfilerStop)(
        IActiveScriptProfilerControl2 *This);

    END_INTERFACE
} IActiveScriptProfilerControl2Vtbl;

interface IActiveScriptProfilerControl2 {
    CONST_VTBL IActiveScriptProfilerControl2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IActiveScriptProfilerControl2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IActiveScriptProfilerControl2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IActiveScriptProfilerControl2_Release(This) (This)->lpVtbl->Release(This)
/*** IActiveScriptProfilerControl methods ***/
#define IActiveScriptProfilerControl2_StartProfiling(This,clsidProfilerObject,dwEventMask,dwContext) (This)->lpVtbl->StartProfiling(This,clsidProfilerObject,dwEventMask,dwContext)
#define IActiveScriptProfilerControl2_SetProfilerEventMask(This,dwEventMask) (This)->lpVtbl->SetProfilerEventMask(This,dwEventMask)
#define IActiveScriptProfilerControl2_StopProfiling(This,hrShutdownReason) (This)->lpVtbl->StopProfiling(This,hrShutdownReason)
/*** IActiveScriptProfilerControl2 methods ***/
#define IActiveScriptProfilerControl2_CompleteProfilerStart(This) (This)->lpVtbl->CompleteProfilerStart(This)
#define IActiveScriptProfilerControl2_PrepareProfilerStop(This) (This)->lpVtbl->PrepareProfilerStop(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerControl2_QueryInterface(IActiveScriptProfilerControl2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IActiveScriptProfilerControl2_AddRef(IActiveScriptProfilerControl2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IActiveScriptProfilerControl2_Release(IActiveScriptProfilerControl2* This) {
    return This->lpVtbl->Release(This);
}
/*** IActiveScriptProfilerControl methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerControl2_StartProfiling(IActiveScriptProfilerControl2* This,REFCLSID clsidProfilerObject,DWORD dwEventMask,DWORD dwContext) {
    return This->lpVtbl->StartProfiling(This,clsidProfilerObject,dwEventMask,dwContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerControl2_SetProfilerEventMask(IActiveScriptProfilerControl2* This,DWORD dwEventMask) {
    return This->lpVtbl->SetProfilerEventMask(This,dwEventMask);
}
static FORCEINLINE HRESULT IActiveScriptProfilerControl2_StopProfiling(IActiveScriptProfilerControl2* This,HRESULT hrShutdownReason) {
    return This->lpVtbl->StopProfiling(This,hrShutdownReason);
}
/*** IActiveScriptProfilerControl2 methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerControl2_CompleteProfilerStart(IActiveScriptProfilerControl2* This) {
    return This->lpVtbl->CompleteProfilerStart(This);
}
static FORCEINLINE HRESULT IActiveScriptProfilerControl2_PrepareProfilerStop(IActiveScriptProfilerControl2* This) {
    return This->lpVtbl->PrepareProfilerStop(This);
}
#endif
#endif

#endif


#endif  /* __IActiveScriptProfilerControl2_INTERFACE_DEFINED__ */


typedef DWORD_PTR PROFILER_HEAP_OBJECT_ID;
typedef UINT PROFILER_HEAP_OBJECT_NAME_ID;
typedef void *PROFILER_EXTERNAL_OBJECT_ADDRESS;

typedef enum __WIDL_activprof_generated_name_0000000E {
    PROFILER_HEAP_OBJECT_FLAGS_NEW_OBJECT = 0x1,
    PROFILER_HEAP_OBJECT_FLAGS_IS_ROOT = 0x2,
    PROFILER_HEAP_OBJECT_FLAGS_SITE_CLOSED = 0x4,
    PROFILER_HEAP_OBJECT_FLAGS_EXTERNAL = 0x8,
    PROFILER_HEAP_OBJECT_FLAGS_EXTERNAL_UNKNOWN = 0x10,
    PROFILER_HEAP_OBJECT_FLAGS_EXTERNAL_DISPATCH = 0x20,
    PROFILER_HEAP_OBJECT_FLAGS_SIZE_APPROXIMATE = 0x40,
    PROFILER_HEAP_OBJECT_FLAGS_SIZE_UNAVAILABLE = 0x80,
    PROFILER_HEAP_OBJECT_FLAGS_NEW_STATE_UNAVAILABLE = 0x100,
    PROFILER_HEAP_OBJECT_FLAGS_WINRT_INSTANCE = 0x200,
    PROFILER_HEAP_OBJECT_FLAGS_WINRT_RUNTIMECLASS = 0x400,
    PROFILER_HEAP_OBJECT_FLAGS_WINRT_DELEGATE = 0x800,
    PROFILER_HEAP_OBJECT_FLAGS_WINRT_NAMESPACE = 0x1000
} PROFILER_HEAP_OBJECT_FLAGS;

typedef enum __WIDL_activprof_generated_name_0000000F {
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_PROTOTYPE = 0x1,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_FUNCTION_NAME = 0x2,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_SCOPE_LIST = 0x3,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_INTERNAL_PROPERTY = 0x4,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_NAME_PROPERTIES = 0x5,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_INDEX_PROPERTIES = 0x6,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_ELEMENT_ATTRIBUTES_SIZE = 0x7,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_ELEMENT_TEXT_CHILDREN_SIZE = 0x8,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_RELATIONSHIPS = 0x9,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_WINRTEVENTS = 0xa,
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_MAX_VALUE = PROFILER_HEAP_OBJECT_OPTIONAL_INFO_WINRTEVENTS
} PROFILER_HEAP_OBJECT_OPTIONAL_INFO_TYPE;

typedef struct _PROFILER_HEAP_OBJECT_SCOPE_LIST {
    UINT count;
    PROFILER_HEAP_OBJECT_ID scopes[1];
} PROFILER_HEAP_OBJECT_SCOPE_LIST;

typedef enum __WIDL_activprof_generated_name_00000010 {
    PROFILER_PROPERTY_TYPE_NUMBER = 0x1,
    PROFILER_PROPERTY_TYPE_STRING = 0x2,
    PROFILER_PROPERTY_TYPE_HEAP_OBJECT = 0x3,
    PROFILER_PROPERTY_TYPE_EXTERNAL_OBJECT = 0x4,
    PROFILER_PROPERTY_TYPE_BSTR = 0x5
} PROFILER_RELATIONSHIP_INFO;

typedef struct _PROFILER_HEAP_OBJECT_RELATIONSHIP {
    PROFILER_HEAP_OBJECT_NAME_ID relationshipId;
    PROFILER_RELATIONSHIP_INFO relationshipInfo;
    __C89_NAMELESS union {
        double numberValue;
        LPCWSTR stringValue;
        BSTR bstrValue;
        PROFILER_HEAP_OBJECT_ID objectId;
        PROFILER_EXTERNAL_OBJECT_ADDRESS externalObjectAddress;
    } __C89_NAMELESSUNIONNAME;
} PROFILER_HEAP_OBJECT_RELATIONSHIP;

typedef struct _PROFILER_HEAP_OBJECT_RELATIONSHIP_LIST {
    UINT count;
    PROFILER_HEAP_OBJECT_RELATIONSHIP elements[1];
} PROFILER_HEAP_OBJECT_RELATIONSHIP_LIST;

typedef struct _PROFILER_HEAP_OBJECT_OPTIONAL_INFO {
    PROFILER_HEAP_OBJECT_OPTIONAL_INFO_TYPE infoType;
    __C89_NAMELESS union {
        PROFILER_HEAP_OBJECT_ID prototype;
        LPCWSTR functionName;
        UINT elementAttributesSize;
        UINT elementTextChildrenSize;
        PROFILER_HEAP_OBJECT_SCOPE_LIST *scopeList;
        PROFILER_HEAP_OBJECT_RELATIONSHIP *internalProperty;
        PROFILER_HEAP_OBJECT_RELATIONSHIP_LIST *namePropertyList;
        PROFILER_HEAP_OBJECT_RELATIONSHIP_LIST *indexPropertyList;
        PROFILER_HEAP_OBJECT_RELATIONSHIP_LIST *relationshipList;
        PROFILER_HEAP_OBJECT_RELATIONSHIP_LIST *eventList;
    } __C89_NAMELESSUNIONNAME;
} PROFILER_HEAP_OBJECT_OPTIONAL_INFO;

typedef struct _PROFILER_HEAP_OBJECT {
    UINT size;
    __C89_NAMELESS union {
        PROFILER_HEAP_OBJECT_ID objectId;
        PROFILER_EXTERNAL_OBJECT_ADDRESS externalObjectAddress;
    } __C89_NAMELESSUNIONNAME;
    PROFILER_HEAP_OBJECT_NAME_ID typeNameId;
    ULONG flags;
    USHORT unused;
    USHORT optionalInfoCount;
} PROFILER_HEAP_OBJECT;

/*****************************************************************************
 * IActiveScriptProfilerHeapEnum interface
 */
#ifndef __IActiveScriptProfilerHeapEnum_INTERFACE_DEFINED__
#define __IActiveScriptProfilerHeapEnum_INTERFACE_DEFINED__

DEFINE_GUID(IID_IActiveScriptProfilerHeapEnum, 0x32e4694e, 0x0d37, 0x419b, 0xb9,0x3d, 0xfa,0x20,0xde,0xd6,0xe8,0xea);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("32e4694e-0d37-419b-b93d-fa20ded6e8ea")
IActiveScriptProfilerHeapEnum : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG celt,
        PROFILER_HEAP_OBJECT **heapObjects,
        ULONG *pceltFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOptionalInfo(
        PROFILER_HEAP_OBJECT *heapObject,
        ULONG celt,
        PROFILER_HEAP_OBJECT_OPTIONAL_INFO *optionalInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeObjectAndOptionalInfo(
        ULONG celt,
        PROFILER_HEAP_OBJECT **heapObjects) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNameIdMap(
        LPCWSTR * pNameList[],
        UINT *pcelt) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IActiveScriptProfilerHeapEnum, 0x32e4694e, 0x0d37, 0x419b, 0xb9,0x3d, 0xfa,0x20,0xde,0xd6,0xe8,0xea)
#endif
#else
typedef struct IActiveScriptProfilerHeapEnumVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IActiveScriptProfilerHeapEnum *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IActiveScriptProfilerHeapEnum *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IActiveScriptProfilerHeapEnum *This);

    /*** IActiveScriptProfilerHeapEnum methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IActiveScriptProfilerHeapEnum *This,
        ULONG celt,
        PROFILER_HEAP_OBJECT **heapObjects,
        ULONG *pceltFetched);

    HRESULT (STDMETHODCALLTYPE *GetOptionalInfo)(
        IActiveScriptProfilerHeapEnum *This,
        PROFILER_HEAP_OBJECT *heapObject,
        ULONG celt,
        PROFILER_HEAP_OBJECT_OPTIONAL_INFO *optionalInfo);

    HRESULT (STDMETHODCALLTYPE *FreeObjectAndOptionalInfo)(
        IActiveScriptProfilerHeapEnum *This,
        ULONG celt,
        PROFILER_HEAP_OBJECT **heapObjects);

    HRESULT (STDMETHODCALLTYPE *GetNameIdMap)(
        IActiveScriptProfilerHeapEnum *This,
        LPCWSTR * pNameList[],
        UINT *pcelt);

    END_INTERFACE
} IActiveScriptProfilerHeapEnumVtbl;

interface IActiveScriptProfilerHeapEnum {
    CONST_VTBL IActiveScriptProfilerHeapEnumVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IActiveScriptProfilerHeapEnum_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IActiveScriptProfilerHeapEnum_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IActiveScriptProfilerHeapEnum_Release(This) (This)->lpVtbl->Release(This)
/*** IActiveScriptProfilerHeapEnum methods ***/
#define IActiveScriptProfilerHeapEnum_Next(This,celt,heapObjects,pceltFetched) (This)->lpVtbl->Next(This,celt,heapObjects,pceltFetched)
#define IActiveScriptProfilerHeapEnum_GetOptionalInfo(This,heapObject,celt,optionalInfo) (This)->lpVtbl->GetOptionalInfo(This,heapObject,celt,optionalInfo)
#define IActiveScriptProfilerHeapEnum_FreeObjectAndOptionalInfo(This,celt,heapObjects) (This)->lpVtbl->FreeObjectAndOptionalInfo(This,celt,heapObjects)
#define IActiveScriptProfilerHeapEnum_GetNameIdMap(This,pNameList,pcelt) (This)->lpVtbl->GetNameIdMap(This,pNameList,pcelt)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerHeapEnum_QueryInterface(IActiveScriptProfilerHeapEnum* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IActiveScriptProfilerHeapEnum_AddRef(IActiveScriptProfilerHeapEnum* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IActiveScriptProfilerHeapEnum_Release(IActiveScriptProfilerHeapEnum* This) {
    return This->lpVtbl->Release(This);
}
/*** IActiveScriptProfilerHeapEnum methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerHeapEnum_Next(IActiveScriptProfilerHeapEnum* This,ULONG celt,PROFILER_HEAP_OBJECT **heapObjects,ULONG *pceltFetched) {
    return This->lpVtbl->Next(This,celt,heapObjects,pceltFetched);
}
static FORCEINLINE HRESULT IActiveScriptProfilerHeapEnum_GetOptionalInfo(IActiveScriptProfilerHeapEnum* This,PROFILER_HEAP_OBJECT *heapObject,ULONG celt,PROFILER_HEAP_OBJECT_OPTIONAL_INFO *optionalInfo) {
    return This->lpVtbl->GetOptionalInfo(This,heapObject,celt,optionalInfo);
}
static FORCEINLINE HRESULT IActiveScriptProfilerHeapEnum_FreeObjectAndOptionalInfo(IActiveScriptProfilerHeapEnum* This,ULONG celt,PROFILER_HEAP_OBJECT **heapObjects) {
    return This->lpVtbl->FreeObjectAndOptionalInfo(This,celt,heapObjects);
}
static FORCEINLINE HRESULT IActiveScriptProfilerHeapEnum_GetNameIdMap(IActiveScriptProfilerHeapEnum* This,LPCWSTR * pNameList[],UINT *pcelt) {
    return This->lpVtbl->GetNameIdMap(This,pNameList,pcelt);
}
#endif
#endif

#endif


#endif  /* __IActiveScriptProfilerHeapEnum_INTERFACE_DEFINED__ */


/*****************************************************************************
 * IActiveScriptProfilerControl3 interface
 */
#ifndef __IActiveScriptProfilerControl3_INTERFACE_DEFINED__
#define __IActiveScriptProfilerControl3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IActiveScriptProfilerControl3, 0x0b403015, 0xf381, 0x4023, 0xa5,0xd0, 0x6f,0xed,0x07,0x6d,0xe7,0x16);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0b403015-f381-4023-a5d0-6fed076de716")
IActiveScriptProfilerControl3 : public IActiveScriptProfilerControl2
{
    virtual HRESULT STDMETHODCALLTYPE EnumHeap(
        IActiveScriptProfilerHeapEnum **ppEnum) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IActiveScriptProfilerControl3, 0x0b403015, 0xf381, 0x4023, 0xa5,0xd0, 0x6f,0xed,0x07,0x6d,0xe7,0x16)
#endif
#else
typedef struct IActiveScriptProfilerControl3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IActiveScriptProfilerControl3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IActiveScriptProfilerControl3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IActiveScriptProfilerControl3 *This);

    /*** IActiveScriptProfilerControl methods ***/
    HRESULT (STDMETHODCALLTYPE *StartProfiling)(
        IActiveScriptProfilerControl3 *This,
        REFCLSID clsidProfilerObject,
        DWORD dwEventMask,
        DWORD dwContext);

    HRESULT (STDMETHODCALLTYPE *SetProfilerEventMask)(
        IActiveScriptProfilerControl3 *This,
        DWORD dwEventMask);

    HRESULT (STDMETHODCALLTYPE *StopProfiling)(
        IActiveScriptProfilerControl3 *This,
        HRESULT hrShutdownReason);

    /*** IActiveScriptProfilerControl2 methods ***/
    HRESULT (STDMETHODCALLTYPE *CompleteProfilerStart)(
        IActiveScriptProfilerControl3 *This);

    HRESULT (STDMETHODCALLTYPE *PrepareProfilerStop)(
        IActiveScriptProfilerControl3 *This);

    /*** IActiveScriptProfilerControl3 methods ***/
    HRESULT (STDMETHODCALLTYPE *EnumHeap)(
        IActiveScriptProfilerControl3 *This,
        IActiveScriptProfilerHeapEnum **ppEnum);

    END_INTERFACE
} IActiveScriptProfilerControl3Vtbl;

interface IActiveScriptProfilerControl3 {
    CONST_VTBL IActiveScriptProfilerControl3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IActiveScriptProfilerControl3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IActiveScriptProfilerControl3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IActiveScriptProfilerControl3_Release(This) (This)->lpVtbl->Release(This)
/*** IActiveScriptProfilerControl methods ***/
#define IActiveScriptProfilerControl3_StartProfiling(This,clsidProfilerObject,dwEventMask,dwContext) (This)->lpVtbl->StartProfiling(This,clsidProfilerObject,dwEventMask,dwContext)
#define IActiveScriptProfilerControl3_SetProfilerEventMask(This,dwEventMask) (This)->lpVtbl->SetProfilerEventMask(This,dwEventMask)
#define IActiveScriptProfilerControl3_StopProfiling(This,hrShutdownReason) (This)->lpVtbl->StopProfiling(This,hrShutdownReason)
/*** IActiveScriptProfilerControl2 methods ***/
#define IActiveScriptProfilerControl3_CompleteProfilerStart(This) (This)->lpVtbl->CompleteProfilerStart(This)
#define IActiveScriptProfilerControl3_PrepareProfilerStop(This) (This)->lpVtbl->PrepareProfilerStop(This)
/*** IActiveScriptProfilerControl3 methods ***/
#define IActiveScriptProfilerControl3_EnumHeap(This,ppEnum) (This)->lpVtbl->EnumHeap(This,ppEnum)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerControl3_QueryInterface(IActiveScriptProfilerControl3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IActiveScriptProfilerControl3_AddRef(IActiveScriptProfilerControl3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IActiveScriptProfilerControl3_Release(IActiveScriptProfilerControl3* This) {
    return This->lpVtbl->Release(This);
}
/*** IActiveScriptProfilerControl methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerControl3_StartProfiling(IActiveScriptProfilerControl3* This,REFCLSID clsidProfilerObject,DWORD dwEventMask,DWORD dwContext) {
    return This->lpVtbl->StartProfiling(This,clsidProfilerObject,dwEventMask,dwContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerControl3_SetProfilerEventMask(IActiveScriptProfilerControl3* This,DWORD dwEventMask) {
    return This->lpVtbl->SetProfilerEventMask(This,dwEventMask);
}
static FORCEINLINE HRESULT IActiveScriptProfilerControl3_StopProfiling(IActiveScriptProfilerControl3* This,HRESULT hrShutdownReason) {
    return This->lpVtbl->StopProfiling(This,hrShutdownReason);
}
/*** IActiveScriptProfilerControl2 methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerControl3_CompleteProfilerStart(IActiveScriptProfilerControl3* This) {
    return This->lpVtbl->CompleteProfilerStart(This);
}
static FORCEINLINE HRESULT IActiveScriptProfilerControl3_PrepareProfilerStop(IActiveScriptProfilerControl3* This) {
    return This->lpVtbl->PrepareProfilerStop(This);
}
/*** IActiveScriptProfilerControl3 methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerControl3_EnumHeap(IActiveScriptProfilerControl3* This,IActiveScriptProfilerHeapEnum **ppEnum) {
    return This->lpVtbl->EnumHeap(This,ppEnum);
}
#endif
#endif

#endif


#endif  /* __IActiveScriptProfilerControl3_INTERFACE_DEFINED__ */


/*****************************************************************************
 * IActiveScriptProfilerCallback interface
 */
#ifndef __IActiveScriptProfilerCallback_INTERFACE_DEFINED__
#define __IActiveScriptProfilerCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IActiveScriptProfilerCallback, 0x740eca23, 0x7d9d, 0x42e5, 0xba,0x9d, 0xf8,0xb2,0x4b,0x1c,0x7a,0x9b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("740eca23-7d9d-42e5-ba9d-f8b24b1c7a9b")
IActiveScriptProfilerCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Initialize(
        DWORD dwContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE Shutdown(
        HRESULT hrReason) = 0;

    virtual HRESULT STDMETHODCALLTYPE ScriptCompiled(
        PROFILER_TOKEN scriptId,
        PROFILER_SCRIPT_TYPE type,
        IUnknown *pIDebugDocumentContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE FunctionCompiled(
        PROFILER_TOKEN functionId,
        PROFILER_TOKEN scriptId,
        const WCHAR *pwszFunctionName,
        const WCHAR *pwszFunctionNameHint,
        IUnknown *pIDebugDocumentContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnFunctionEnter(
        PROFILER_TOKEN scriptId,
        PROFILER_TOKEN functionId) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnFunctionExit(
        PROFILER_TOKEN scriptId,
        PROFILER_TOKEN functionId) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IActiveScriptProfilerCallback, 0x740eca23, 0x7d9d, 0x42e5, 0xba,0x9d, 0xf8,0xb2,0x4b,0x1c,0x7a,0x9b)
#endif
#else
typedef struct IActiveScriptProfilerCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IActiveScriptProfilerCallback *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IActiveScriptProfilerCallback *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IActiveScriptProfilerCallback *This);

    /*** IActiveScriptProfilerCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *Initialize)(
        IActiveScriptProfilerCallback *This,
        DWORD dwContext);

    HRESULT (STDMETHODCALLTYPE *Shutdown)(
        IActiveScriptProfilerCallback *This,
        HRESULT hrReason);

    HRESULT (STDMETHODCALLTYPE *ScriptCompiled)(
        IActiveScriptProfilerCallback *This,
        PROFILER_TOKEN scriptId,
        PROFILER_SCRIPT_TYPE type,
        IUnknown *pIDebugDocumentContext);

    HRESULT (STDMETHODCALLTYPE *FunctionCompiled)(
        IActiveScriptProfilerCallback *This,
        PROFILER_TOKEN functionId,
        PROFILER_TOKEN scriptId,
        const WCHAR *pwszFunctionName,
        const WCHAR *pwszFunctionNameHint,
        IUnknown *pIDebugDocumentContext);

    HRESULT (STDMETHODCALLTYPE *OnFunctionEnter)(
        IActiveScriptProfilerCallback *This,
        PROFILER_TOKEN scriptId,
        PROFILER_TOKEN functionId);

    HRESULT (STDMETHODCALLTYPE *OnFunctionExit)(
        IActiveScriptProfilerCallback *This,
        PROFILER_TOKEN scriptId,
        PROFILER_TOKEN functionId);

    END_INTERFACE
} IActiveScriptProfilerCallbackVtbl;

interface IActiveScriptProfilerCallback {
    CONST_VTBL IActiveScriptProfilerCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IActiveScriptProfilerCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IActiveScriptProfilerCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IActiveScriptProfilerCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IActiveScriptProfilerCallback methods ***/
#define IActiveScriptProfilerCallback_Initialize(This,dwContext) (This)->lpVtbl->Initialize(This,dwContext)
#define IActiveScriptProfilerCallback_Shutdown(This,hrReason) (This)->lpVtbl->Shutdown(This,hrReason)
#define IActiveScriptProfilerCallback_ScriptCompiled(This,scriptId,type,pIDebugDocumentContext) (This)->lpVtbl->ScriptCompiled(This,scriptId,type,pIDebugDocumentContext)
#define IActiveScriptProfilerCallback_FunctionCompiled(This,functionId,scriptId,pwszFunctionName,pwszFunctionNameHint,pIDebugDocumentContext) (This)->lpVtbl->FunctionCompiled(This,functionId,scriptId,pwszFunctionName,pwszFunctionNameHint,pIDebugDocumentContext)
#define IActiveScriptProfilerCallback_OnFunctionEnter(This,scriptId,functionId) (This)->lpVtbl->OnFunctionEnter(This,scriptId,functionId)
#define IActiveScriptProfilerCallback_OnFunctionExit(This,scriptId,functionId) (This)->lpVtbl->OnFunctionExit(This,scriptId,functionId)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerCallback_QueryInterface(IActiveScriptProfilerCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IActiveScriptProfilerCallback_AddRef(IActiveScriptProfilerCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IActiveScriptProfilerCallback_Release(IActiveScriptProfilerCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** IActiveScriptProfilerCallback methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerCallback_Initialize(IActiveScriptProfilerCallback* This,DWORD dwContext) {
    return This->lpVtbl->Initialize(This,dwContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback_Shutdown(IActiveScriptProfilerCallback* This,HRESULT hrReason) {
    return This->lpVtbl->Shutdown(This,hrReason);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback_ScriptCompiled(IActiveScriptProfilerCallback* This,PROFILER_TOKEN scriptId,PROFILER_SCRIPT_TYPE type,IUnknown *pIDebugDocumentContext) {
    return This->lpVtbl->ScriptCompiled(This,scriptId,type,pIDebugDocumentContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback_FunctionCompiled(IActiveScriptProfilerCallback* This,PROFILER_TOKEN functionId,PROFILER_TOKEN scriptId,const WCHAR *pwszFunctionName,const WCHAR *pwszFunctionNameHint,IUnknown *pIDebugDocumentContext) {
    return This->lpVtbl->FunctionCompiled(This,functionId,scriptId,pwszFunctionName,pwszFunctionNameHint,pIDebugDocumentContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback_OnFunctionEnter(IActiveScriptProfilerCallback* This,PROFILER_TOKEN scriptId,PROFILER_TOKEN functionId) {
    return This->lpVtbl->OnFunctionEnter(This,scriptId,functionId);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback_OnFunctionExit(IActiveScriptProfilerCallback* This,PROFILER_TOKEN scriptId,PROFILER_TOKEN functionId) {
    return This->lpVtbl->OnFunctionExit(This,scriptId,functionId);
}
#endif
#endif

#endif


#endif  /* __IActiveScriptProfilerCallback_INTERFACE_DEFINED__ */


/*****************************************************************************
 * IActiveScriptProfilerCallback2 interface
 */
#ifndef __IActiveScriptProfilerCallback2_INTERFACE_DEFINED__
#define __IActiveScriptProfilerCallback2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IActiveScriptProfilerCallback2, 0x31b7f8ad, 0xa637, 0x409c, 0xb2,0x2f, 0x04,0x09,0x95,0xb6,0x10,0x3d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("31b7f8ad-a637-409c-b22f-040995b6103d")
IActiveScriptProfilerCallback2 : public IActiveScriptProfilerCallback
{
    virtual HRESULT STDMETHODCALLTYPE OnFunctionEnterByName(
        const WCHAR *pwszFunctionName,
        PROFILER_SCRIPT_TYPE type) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnFunctionExitByName(
        const WCHAR *pwszFunctionName,
        PROFILER_SCRIPT_TYPE type) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IActiveScriptProfilerCallback2, 0x31b7f8ad, 0xa637, 0x409c, 0xb2,0x2f, 0x04,0x09,0x95,0xb6,0x10,0x3d)
#endif
#else
typedef struct IActiveScriptProfilerCallback2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IActiveScriptProfilerCallback2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IActiveScriptProfilerCallback2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IActiveScriptProfilerCallback2 *This);

    /*** IActiveScriptProfilerCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *Initialize)(
        IActiveScriptProfilerCallback2 *This,
        DWORD dwContext);

    HRESULT (STDMETHODCALLTYPE *Shutdown)(
        IActiveScriptProfilerCallback2 *This,
        HRESULT hrReason);

    HRESULT (STDMETHODCALLTYPE *ScriptCompiled)(
        IActiveScriptProfilerCallback2 *This,
        PROFILER_TOKEN scriptId,
        PROFILER_SCRIPT_TYPE type,
        IUnknown *pIDebugDocumentContext);

    HRESULT (STDMETHODCALLTYPE *FunctionCompiled)(
        IActiveScriptProfilerCallback2 *This,
        PROFILER_TOKEN functionId,
        PROFILER_TOKEN scriptId,
        const WCHAR *pwszFunctionName,
        const WCHAR *pwszFunctionNameHint,
        IUnknown *pIDebugDocumentContext);

    HRESULT (STDMETHODCALLTYPE *OnFunctionEnter)(
        IActiveScriptProfilerCallback2 *This,
        PROFILER_TOKEN scriptId,
        PROFILER_TOKEN functionId);

    HRESULT (STDMETHODCALLTYPE *OnFunctionExit)(
        IActiveScriptProfilerCallback2 *This,
        PROFILER_TOKEN scriptId,
        PROFILER_TOKEN functionId);

    /*** IActiveScriptProfilerCallback2 methods ***/
    HRESULT (STDMETHODCALLTYPE *OnFunctionEnterByName)(
        IActiveScriptProfilerCallback2 *This,
        const WCHAR *pwszFunctionName,
        PROFILER_SCRIPT_TYPE type);

    HRESULT (STDMETHODCALLTYPE *OnFunctionExitByName)(
        IActiveScriptProfilerCallback2 *This,
        const WCHAR *pwszFunctionName,
        PROFILER_SCRIPT_TYPE type);

    END_INTERFACE
} IActiveScriptProfilerCallback2Vtbl;

interface IActiveScriptProfilerCallback2 {
    CONST_VTBL IActiveScriptProfilerCallback2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IActiveScriptProfilerCallback2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IActiveScriptProfilerCallback2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IActiveScriptProfilerCallback2_Release(This) (This)->lpVtbl->Release(This)
/*** IActiveScriptProfilerCallback methods ***/
#define IActiveScriptProfilerCallback2_Initialize(This,dwContext) (This)->lpVtbl->Initialize(This,dwContext)
#define IActiveScriptProfilerCallback2_Shutdown(This,hrReason) (This)->lpVtbl->Shutdown(This,hrReason)
#define IActiveScriptProfilerCallback2_ScriptCompiled(This,scriptId,type,pIDebugDocumentContext) (This)->lpVtbl->ScriptCompiled(This,scriptId,type,pIDebugDocumentContext)
#define IActiveScriptProfilerCallback2_FunctionCompiled(This,functionId,scriptId,pwszFunctionName,pwszFunctionNameHint,pIDebugDocumentContext) (This)->lpVtbl->FunctionCompiled(This,functionId,scriptId,pwszFunctionName,pwszFunctionNameHint,pIDebugDocumentContext)
#define IActiveScriptProfilerCallback2_OnFunctionEnter(This,scriptId,functionId) (This)->lpVtbl->OnFunctionEnter(This,scriptId,functionId)
#define IActiveScriptProfilerCallback2_OnFunctionExit(This,scriptId,functionId) (This)->lpVtbl->OnFunctionExit(This,scriptId,functionId)
/*** IActiveScriptProfilerCallback2 methods ***/
#define IActiveScriptProfilerCallback2_OnFunctionEnterByName(This,pwszFunctionName,type) (This)->lpVtbl->OnFunctionEnterByName(This,pwszFunctionName,type)
#define IActiveScriptProfilerCallback2_OnFunctionExitByName(This,pwszFunctionName,type) (This)->lpVtbl->OnFunctionExitByName(This,pwszFunctionName,type)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerCallback2_QueryInterface(IActiveScriptProfilerCallback2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IActiveScriptProfilerCallback2_AddRef(IActiveScriptProfilerCallback2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IActiveScriptProfilerCallback2_Release(IActiveScriptProfilerCallback2* This) {
    return This->lpVtbl->Release(This);
}
/*** IActiveScriptProfilerCallback methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerCallback2_Initialize(IActiveScriptProfilerCallback2* This,DWORD dwContext) {
    return This->lpVtbl->Initialize(This,dwContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback2_Shutdown(IActiveScriptProfilerCallback2* This,HRESULT hrReason) {
    return This->lpVtbl->Shutdown(This,hrReason);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback2_ScriptCompiled(IActiveScriptProfilerCallback2* This,PROFILER_TOKEN scriptId,PROFILER_SCRIPT_TYPE type,IUnknown *pIDebugDocumentContext) {
    return This->lpVtbl->ScriptCompiled(This,scriptId,type,pIDebugDocumentContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback2_FunctionCompiled(IActiveScriptProfilerCallback2* This,PROFILER_TOKEN functionId,PROFILER_TOKEN scriptId,const WCHAR *pwszFunctionName,const WCHAR *pwszFunctionNameHint,IUnknown *pIDebugDocumentContext) {
    return This->lpVtbl->FunctionCompiled(This,functionId,scriptId,pwszFunctionName,pwszFunctionNameHint,pIDebugDocumentContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback2_OnFunctionEnter(IActiveScriptProfilerCallback2* This,PROFILER_TOKEN scriptId,PROFILER_TOKEN functionId) {
    return This->lpVtbl->OnFunctionEnter(This,scriptId,functionId);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback2_OnFunctionExit(IActiveScriptProfilerCallback2* This,PROFILER_TOKEN scriptId,PROFILER_TOKEN functionId) {
    return This->lpVtbl->OnFunctionExit(This,scriptId,functionId);
}
/*** IActiveScriptProfilerCallback2 methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerCallback2_OnFunctionEnterByName(IActiveScriptProfilerCallback2* This,const WCHAR *pwszFunctionName,PROFILER_SCRIPT_TYPE type) {
    return This->lpVtbl->OnFunctionEnterByName(This,pwszFunctionName,type);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback2_OnFunctionExitByName(IActiveScriptProfilerCallback2* This,const WCHAR *pwszFunctionName,PROFILER_SCRIPT_TYPE type) {
    return This->lpVtbl->OnFunctionExitByName(This,pwszFunctionName,type);
}
#endif
#endif

#endif


#endif  /* __IActiveScriptProfilerCallback2_INTERFACE_DEFINED__ */


/*****************************************************************************
 * IActiveScriptProfilerCallback3 interface
 */
#ifndef __IActiveScriptProfilerCallback3_INTERFACE_DEFINED__
#define __IActiveScriptProfilerCallback3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IActiveScriptProfilerCallback3, 0x6ac5ad25, 0x2037, 0x4687, 0x91,0xdf, 0xb5,0x99,0x79,0xd9,0x3d,0x73);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6ac5ad25-2037-4687-91df-b59979d93d73")
IActiveScriptProfilerCallback3 : public IActiveScriptProfilerCallback2
{
    virtual HRESULT STDMETHODCALLTYPE SetWebWorkerId(
        DWORD webWorkerId) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IActiveScriptProfilerCallback3, 0x6ac5ad25, 0x2037, 0x4687, 0x91,0xdf, 0xb5,0x99,0x79,0xd9,0x3d,0x73)
#endif
#else
typedef struct IActiveScriptProfilerCallback3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IActiveScriptProfilerCallback3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IActiveScriptProfilerCallback3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IActiveScriptProfilerCallback3 *This);

    /*** IActiveScriptProfilerCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *Initialize)(
        IActiveScriptProfilerCallback3 *This,
        DWORD dwContext);

    HRESULT (STDMETHODCALLTYPE *Shutdown)(
        IActiveScriptProfilerCallback3 *This,
        HRESULT hrReason);

    HRESULT (STDMETHODCALLTYPE *ScriptCompiled)(
        IActiveScriptProfilerCallback3 *This,
        PROFILER_TOKEN scriptId,
        PROFILER_SCRIPT_TYPE type,
        IUnknown *pIDebugDocumentContext);

    HRESULT (STDMETHODCALLTYPE *FunctionCompiled)(
        IActiveScriptProfilerCallback3 *This,
        PROFILER_TOKEN functionId,
        PROFILER_TOKEN scriptId,
        const WCHAR *pwszFunctionName,
        const WCHAR *pwszFunctionNameHint,
        IUnknown *pIDebugDocumentContext);

    HRESULT (STDMETHODCALLTYPE *OnFunctionEnter)(
        IActiveScriptProfilerCallback3 *This,
        PROFILER_TOKEN scriptId,
        PROFILER_TOKEN functionId);

    HRESULT (STDMETHODCALLTYPE *OnFunctionExit)(
        IActiveScriptProfilerCallback3 *This,
        PROFILER_TOKEN scriptId,
        PROFILER_TOKEN functionId);

    /*** IActiveScriptProfilerCallback2 methods ***/
    HRESULT (STDMETHODCALLTYPE *OnFunctionEnterByName)(
        IActiveScriptProfilerCallback3 *This,
        const WCHAR *pwszFunctionName,
        PROFILER_SCRIPT_TYPE type);

    HRESULT (STDMETHODCALLTYPE *OnFunctionExitByName)(
        IActiveScriptProfilerCallback3 *This,
        const WCHAR *pwszFunctionName,
        PROFILER_SCRIPT_TYPE type);

    /*** IActiveScriptProfilerCallback3 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetWebWorkerId)(
        IActiveScriptProfilerCallback3 *This,
        DWORD webWorkerId);

    END_INTERFACE
} IActiveScriptProfilerCallback3Vtbl;

interface IActiveScriptProfilerCallback3 {
    CONST_VTBL IActiveScriptProfilerCallback3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IActiveScriptProfilerCallback3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IActiveScriptProfilerCallback3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IActiveScriptProfilerCallback3_Release(This) (This)->lpVtbl->Release(This)
/*** IActiveScriptProfilerCallback methods ***/
#define IActiveScriptProfilerCallback3_Initialize(This,dwContext) (This)->lpVtbl->Initialize(This,dwContext)
#define IActiveScriptProfilerCallback3_Shutdown(This,hrReason) (This)->lpVtbl->Shutdown(This,hrReason)
#define IActiveScriptProfilerCallback3_ScriptCompiled(This,scriptId,type,pIDebugDocumentContext) (This)->lpVtbl->ScriptCompiled(This,scriptId,type,pIDebugDocumentContext)
#define IActiveScriptProfilerCallback3_FunctionCompiled(This,functionId,scriptId,pwszFunctionName,pwszFunctionNameHint,pIDebugDocumentContext) (This)->lpVtbl->FunctionCompiled(This,functionId,scriptId,pwszFunctionName,pwszFunctionNameHint,pIDebugDocumentContext)
#define IActiveScriptProfilerCallback3_OnFunctionEnter(This,scriptId,functionId) (This)->lpVtbl->OnFunctionEnter(This,scriptId,functionId)
#define IActiveScriptProfilerCallback3_OnFunctionExit(This,scriptId,functionId) (This)->lpVtbl->OnFunctionExit(This,scriptId,functionId)
/*** IActiveScriptProfilerCallback2 methods ***/
#define IActiveScriptProfilerCallback3_OnFunctionEnterByName(This,pwszFunctionName,type) (This)->lpVtbl->OnFunctionEnterByName(This,pwszFunctionName,type)
#define IActiveScriptProfilerCallback3_OnFunctionExitByName(This,pwszFunctionName,type) (This)->lpVtbl->OnFunctionExitByName(This,pwszFunctionName,type)
/*** IActiveScriptProfilerCallback3 methods ***/
#define IActiveScriptProfilerCallback3_SetWebWorkerId(This,webWorkerId) (This)->lpVtbl->SetWebWorkerId(This,webWorkerId)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_QueryInterface(IActiveScriptProfilerCallback3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IActiveScriptProfilerCallback3_AddRef(IActiveScriptProfilerCallback3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IActiveScriptProfilerCallback3_Release(IActiveScriptProfilerCallback3* This) {
    return This->lpVtbl->Release(This);
}
/*** IActiveScriptProfilerCallback methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_Initialize(IActiveScriptProfilerCallback3* This,DWORD dwContext) {
    return This->lpVtbl->Initialize(This,dwContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_Shutdown(IActiveScriptProfilerCallback3* This,HRESULT hrReason) {
    return This->lpVtbl->Shutdown(This,hrReason);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_ScriptCompiled(IActiveScriptProfilerCallback3* This,PROFILER_TOKEN scriptId,PROFILER_SCRIPT_TYPE type,IUnknown *pIDebugDocumentContext) {
    return This->lpVtbl->ScriptCompiled(This,scriptId,type,pIDebugDocumentContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_FunctionCompiled(IActiveScriptProfilerCallback3* This,PROFILER_TOKEN functionId,PROFILER_TOKEN scriptId,const WCHAR *pwszFunctionName,const WCHAR *pwszFunctionNameHint,IUnknown *pIDebugDocumentContext) {
    return This->lpVtbl->FunctionCompiled(This,functionId,scriptId,pwszFunctionName,pwszFunctionNameHint,pIDebugDocumentContext);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_OnFunctionEnter(IActiveScriptProfilerCallback3* This,PROFILER_TOKEN scriptId,PROFILER_TOKEN functionId) {
    return This->lpVtbl->OnFunctionEnter(This,scriptId,functionId);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_OnFunctionExit(IActiveScriptProfilerCallback3* This,PROFILER_TOKEN scriptId,PROFILER_TOKEN functionId) {
    return This->lpVtbl->OnFunctionExit(This,scriptId,functionId);
}
/*** IActiveScriptProfilerCallback2 methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_OnFunctionEnterByName(IActiveScriptProfilerCallback3* This,const WCHAR *pwszFunctionName,PROFILER_SCRIPT_TYPE type) {
    return This->lpVtbl->OnFunctionEnterByName(This,pwszFunctionName,type);
}
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_OnFunctionExitByName(IActiveScriptProfilerCallback3* This,const WCHAR *pwszFunctionName,PROFILER_SCRIPT_TYPE type) {
    return This->lpVtbl->OnFunctionExitByName(This,pwszFunctionName,type);
}
/*** IActiveScriptProfilerCallback3 methods ***/
static FORCEINLINE HRESULT IActiveScriptProfilerCallback3_SetWebWorkerId(IActiveScriptProfilerCallback3* This,DWORD webWorkerId) {
    return This->lpVtbl->SetWebWorkerId(This,webWorkerId);
}
#endif
#endif

#endif


#endif  /* __IActiveScriptProfilerCallback3_INTERFACE_DEFINED__ */

#endif

#endif
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __activprof_h__ */
