summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike McLaughlin <mikem@microsoft.com>2018-03-19 18:26:59 -0700
committerGitHub <noreply@github.com>2018-03-19 18:26:59 -0700
commit66758f48163b90700f0551fd9df4f15bcd1a8a45 (patch)
tree96f7b342909b7392c2843a0195245b6b94b660b6 /src
parent96e83a82e2b7cad75ab363739326cb39c25c5f33 (diff)
downloadcoreclr-66758f48163b90700f0551fd9df4f15bcd1a8a45.tar.gz
coreclr-66758f48163b90700f0551fd9df4f15bcd1a8a45.tar.bz2
coreclr-66758f48163b90700f0551fd9df4f15bcd1a8a45.zip
Add new ICLRDebuggingLibraryProvider2 interface for OpenVirtualProces that works on Linux (#16978)
Add new ICLRDebuggingLibraryProvider2 interface for OpenVirtualProcess that works on Linux. The old ICLRDebuggingLibraryProvider::ProviderLibrary returns module handles that can't be properly supported on Linux. ICLRDebuggerLibraryProvider2 returns the module path string instead of a handle. Works on both Windows and Linux. If ICLRDebuggerLibraryProvider2 is QI'ed, OpenVirtualProcess will NOT fall back to ICLRDebuggerLibraryProvider if ProviderLibrary2 fails. HRESULT ProvideLibrary2( [in] const WCHAR* pwszFileName, [in] DWORD dwTimestamp, [in] DWORD dwSizeOfImage, [out] LPWSTR* ppResolvedModulePath); ppResolvedModulePath - Where *ppResolvedModulePath is a null terminated path to the module dll. On Windows it should be allocated with CoTaskMemAlloc. On Unix it should be allocated with malloc. Failure leave it untouched.
Diffstat (limited to 'src')
-rw-r--r--src/debug/shim/debugshim.cpp214
-rw-r--r--src/dlls/dbgshim/CMakeLists.txt1
-rw-r--r--src/inc/metahost.idl49
-rw-r--r--src/pal/prebuilt/inc/metahost.h118
4 files changed, 292 insertions, 90 deletions
diff --git a/src/debug/shim/debugshim.cpp b/src/debug/shim/debugshim.cpp
index 08f1ec58a1..b4e709adcf 100644
--- a/src/debug/shim/debugshim.cpp
+++ b/src/debug/shim/debugshim.cpp
@@ -90,116 +90,170 @@ STDMETHODIMP CLRDebuggingImpl::OpenVirtualProcess(
CLR_DEBUGGING_VERSION version;
BOOL versionSupportedByCaller = FALSE;
-
+ // argument checking
+ if( (ppProcess != NULL || pFlags != NULL) && pLibraryProvider == NULL)
+ {
+ hr = E_POINTER; // the library provider must be specified if either
+ // ppProcess or pFlags is non-NULL
+ }
+ else if( (ppProcess != NULL || pFlags != NULL) && pMaxDebuggerSupportedVersion == NULL)
+ {
+ hr = E_POINTER; // the max supported version must be specified if either
+ // ppProcess or pFlags is non-NULL
+ }
+ else if(pVersion != NULL && pVersion->wStructVersion != 0)
+ {
+ hr = CORDBG_E_UNSUPPORTED_VERSION_STRUCT;
+ }
+ else if(FAILED(pDataTarget->QueryInterface(__uuidof(ICorDebugDataTarget), (void**) &pDt)))
+ {
+ hr = CORDBG_E_MISSING_DATA_TARGET_INTERFACE;
+ }
- // argument checking
- if( (ppProcess != NULL || pFlags != NULL) && pLibraryProvider == NULL)
- {
- hr = E_POINTER; // the library provider must be specified if either
- // ppProcess or pFlags is non-NULL
- }
- else if( (ppProcess != NULL || pFlags != NULL) && pMaxDebuggerSupportedVersion == NULL)
- {
- hr = E_POINTER; // the max supported version must be specified if either
- // ppProcess or pFlags is non-NULL
- }
- else if(pVersion != NULL && pVersion->wStructVersion != 0)
- {
- hr = CORDBG_E_UNSUPPORTED_VERSION_STRUCT;
- }
- else if(FAILED(pDataTarget->QueryInterface(__uuidof(ICorDebugDataTarget), (void**) &pDt)))
- {
- hr = CORDBG_E_MISSING_DATA_TARGET_INTERFACE;
- }
+ if(SUCCEEDED(hr))
+ {
+ // get CLR version
+ // The expectation is that new versions of the CLR will continue to use the same GUID
+ // (unless there's a reason to hide them from older shims), but debuggers will tell us the
+ // CLR version they're designed for and mscordbi.dll can decide whether or not to accept it.
+ version.wStructVersion = 0;
+ hr = GetCLRInfo(pDt,
+ moduleBaseAddress,
+ &version,
+ &dbiTimestamp,
+ &dbiSizeOfImage,
+ dbiName,
+ MAX_PATH_FNAME,
+ &dacTimestamp,
+ &dacSizeOfImage,
+ dacName,
+ MAX_PATH_FNAME);
+ }
- if(SUCCEEDED(hr))
+ // If we need to fetch either the process info or the flags info then we need to find
+ // mscordbi and DAC and do the version specific OVP work
+ if(SUCCEEDED(hr) && (ppProcess != NULL || pFlags != NULL))
+ {
+ ICLRDebuggingLibraryProvider2* pLibraryProvider2;
+ if (SUCCEEDED(pLibraryProvider->QueryInterface(__uuidof(ICLRDebuggingLibraryProvider2), (void**)&pLibraryProvider2)))
{
- // get CLR version
- // The expectation is that new versions of the CLR will continue to use the same GUID
- // (unless there's a reason to hide them from older shims), but debuggers will tell us the
- // CLR version they're designed for and mscordbi.dll can decide whether or not to accept it.
- version.wStructVersion = 0;
- hr = GetCLRInfo(pDt,
- moduleBaseAddress,
- &version,
- &dbiTimestamp,
- &dbiSizeOfImage,
- dbiName,
- MAX_PATH_FNAME,
- &dacTimestamp,
- &dacSizeOfImage,
- dacName,
- MAX_PATH_FNAME);
- }
+ LPWSTR pDbiModulePath;
+ if (FAILED(pLibraryProvider2->ProvideLibrary2(dbiName, dbiTimestamp, dbiSizeOfImage, &pDbiModulePath)) ||
+ pDbiModulePath == NULL)
+ {
+ hr = CORDBG_E_LIBRARY_PROVIDER_ERROR;
+ }
- // If we need to fetch either the process info or the flags info then we need to find
- // mscordbi and DAC and do the version specific OVP work
- if(SUCCEEDED(hr) && (ppProcess != NULL || pFlags != NULL))
- {
+ if (SUCCEEDED(hr))
+ {
+ hDbi = LoadLibraryW(pDbiModulePath);
+ if (hDbi == NULL)
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ }
+#ifdef FEATURE_PAL
+ free(pDbiModulePath);
+#else
+ CoTaskMemFree(pDbiModulePath);
+#endif
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ // Adjust the timestamp and size of image if this DAC is a known buggy version and needs to be retargeted
+ RetargetDacIfNeeded(&dacTimestamp, &dacSizeOfImage);
+
+ // ask library provider for dac
+ LPWSTR pDacModulePath;
+ if (FAILED(pLibraryProvider2->ProvideLibrary2(dacName, dacTimestamp, dacSizeOfImage, &pDacModulePath)) ||
+ pDacModulePath == NULL)
+ {
+ hr = CORDBG_E_LIBRARY_PROVIDER_ERROR;
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ hDac = LoadLibraryW(pDacModulePath);
+ if (hDac == NULL)
+ {
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ }
+#ifdef FEATURE_PAL
+ free(pDacModulePath);
+#else
+ CoTaskMemFree(pDacModulePath);
+#endif
+ }
+ }
+
+ pLibraryProvider2->Release();
+ }
+ else {
// ask library provider for dbi
- if(FAILED(pLibraryProvider->ProvideLibrary(dbiName, dbiTimestamp, dbiSizeOfImage, &hDbi)) ||
+ if (FAILED(pLibraryProvider->ProvideLibrary(dbiName, dbiTimestamp, dbiSizeOfImage, &hDbi)) ||
hDbi == NULL)
{
hr = CORDBG_E_LIBRARY_PROVIDER_ERROR;
}
- if(SUCCEEDED(hr))
+ if (SUCCEEDED(hr))
{
// Adjust the timestamp and size of image if this DAC is a known buggy version and needs to be retargeted
RetargetDacIfNeeded(&dacTimestamp, &dacSizeOfImage);
// ask library provider for dac
- if(FAILED(pLibraryProvider->ProvideLibrary(dacName, dacTimestamp, dacSizeOfImage, &hDac)) ||
+ if (FAILED(pLibraryProvider->ProvideLibrary(dacName, dacTimestamp, dacSizeOfImage, &hDac)) ||
hDac == NULL)
{
hr = CORDBG_E_LIBRARY_PROVIDER_ERROR;
}
}
+ }
- if(SUCCEEDED(hr))
+ if(SUCCEEDED(hr))
+ {
+ // get access to OVP and call it
+ OpenVirtualProcessImplFnPtr ovpFn = (OpenVirtualProcessImplFnPtr) GetProcAddress(hDbi, "OpenVirtualProcessImpl");
+ if(ovpFn == NULL)
{
- // get access to OVP and call it
- OpenVirtualProcessImplFnPtr ovpFn = (OpenVirtualProcessImplFnPtr) GetProcAddress(hDbi, "OpenVirtualProcessImpl");
- if(ovpFn == NULL)
+ // Fallback to CLR v4 Beta1 path, but skip some of the checking we'd normally do (maxSupportedVersion, etc.)
+ OpenVirtualProcess2FnPtr ovp2Fn = (OpenVirtualProcess2FnPtr) GetProcAddress(hDbi, "OpenVirtualProcess2");
+ if (ovp2Fn == NULL)
{
- // Fallback to CLR v4 Beta1 path, but skip some of the checking we'd normally do (maxSupportedVersion, etc.)
- OpenVirtualProcess2FnPtr ovp2Fn = (OpenVirtualProcess2FnPtr) GetProcAddress(hDbi, "OpenVirtualProcess2");
- if (ovp2Fn == NULL)
- {
- hr = CORDBG_E_LIBRARY_PROVIDER_ERROR;
- }
- else
- {
- hr = ovp2Fn(moduleBaseAddress, pDataTarget, hDac, riidProcess, ppProcess, pFlags);
- }
+ hr = CORDBG_E_LIBRARY_PROVIDER_ERROR;
}
else
{
- // Have a CLR v4 Beta2+ DBI, call it and let it do the version check
- hr = ovpFn(moduleBaseAddress, pDataTarget, hDac, pMaxDebuggerSupportedVersion, riidProcess, ppProcess, pFlags);
- if(FAILED(hr))
- {
- _ASSERTE(ppProcess == NULL || *ppProcess == NULL);
- _ASSERTE(pFlags == NULL || *pFlags == 0);
- }
+ hr = ovp2Fn(moduleBaseAddress, pDataTarget, hDac, riidProcess, ppProcess, pFlags);
+ }
+ }
+ else
+ {
+ // Have a CLR v4 Beta2+ DBI, call it and let it do the version check
+ hr = ovpFn(moduleBaseAddress, pDataTarget, hDac, pMaxDebuggerSupportedVersion, riidProcess, ppProcess, pFlags);
+ if(FAILED(hr))
+ {
+ _ASSERTE(ppProcess == NULL || *ppProcess == NULL);
+ _ASSERTE(pFlags == NULL || *pFlags == 0);
}
}
}
-
- //version is still valid in some failure cases
- if(pVersion != NULL &&
- (SUCCEEDED(hr) ||
- (hr == CORDBG_E_UNSUPPORTED_DEBUGGING_MODEL) ||
- (hr == CORDBG_E_UNSUPPORTED_FORWARD_COMPAT)))
- {
- memcpy(pVersion, &version, sizeof(CLR_DEBUGGING_VERSION));
- }
+ }
- // free the data target we QI'ed earlier
- if(pDt != NULL)
- {
- pDt->Release();
- }
+ //version is still valid in some failure cases
+ if(pVersion != NULL &&
+ (SUCCEEDED(hr) ||
+ (hr == CORDBG_E_UNSUPPORTED_DEBUGGING_MODEL) ||
+ (hr == CORDBG_E_UNSUPPORTED_FORWARD_COMPAT)))
+ {
+ memcpy(pVersion, &version, sizeof(CLR_DEBUGGING_VERSION));
+ }
+
+ // free the data target we QI'ed earlier
+ if(pDt != NULL)
+ {
+ pDt->Release();
+ }
return hr;
}
diff --git a/src/dlls/dbgshim/CMakeLists.txt b/src/dlls/dbgshim/CMakeLists.txt
index 4e72ee219a..7e6ae61de1 100644
--- a/src/dlls/dbgshim/CMakeLists.txt
+++ b/src/dlls/dbgshim/CMakeLists.txt
@@ -66,6 +66,7 @@ if(WIN32)
uuid.lib
user32.lib
advapi32.lib
+ ole32.lib
oleaut32.lib
WtsApi32.lib
version.lib
diff --git a/src/inc/metahost.idl b/src/inc/metahost.idl
index ac889e2594..2bc7f1a3c9 100644
--- a/src/inc/metahost.idl
+++ b/src/inc/metahost.idl
@@ -93,6 +93,9 @@ cpp_quote("EXTERN_GUID(IID_ICLRProfiling, 0xb349abe3, 0xb56f, 0x4689, 0xbf, 0xcd
// IID ICLRDebuggingLibraryProvider interface : uuid{3151C08D-4D09-4f9b-8838-2880BF18FE51}
cpp_quote("EXTERN_GUID(IID_ICLRDebuggingLibraryProvider, 0x3151c08d, 0x4d09, 0x4f9b, 0x88, 0x38, 0x28, 0x80, 0xbf, 0x18, 0xfe, 0x51);")
+// IID ICLRDebuggingLibraryProvider2 interface : uuid{E04E2FF1-DCFD-45D5-BCD1-16FFF2FAF7BA}
+cpp_quote("EXTERN_GUID(IID_ICLRDebuggingLibraryProvider2, 0xE04E2FF1, 0xDCFD, 0x45D5, 0xBC, 0xD1, 0x16, 0xFF, 0xF2, 0xFA, 0xF7, 0xBA);")
+
typedef HRESULT(__stdcall * CLRCreateInstanceFnPtr)(
REFCLSID clsid,
REFIID riid,
@@ -402,7 +405,7 @@ CLR_DEBUGGING_PROCESS_FLAGS;
interface ICLRDebuggingLibraryProvider : IUnknown
{
/**********************************************************************************
- ** The goal of this method is to allow the debugger to provide a handle to a **
+ ** The goal of this method is to allow the debugger to provide a handle to a **
** module which is needed for debugging. The debugger may use any available means**
** to locate and/or procure the module. See the security note below for important**
** information about implementing this method securely. **
@@ -429,6 +432,50 @@ interface ICLRDebuggingLibraryProvider : IUnknown
[out] HMODULE* phModule);
}
+ /**************************************************************************************
+ ** ICLRDebuggingLibraryProvider2 **
+ ** Implemented by API user **
+ ** This interface allows the debugger to provide module paths which are needed for **
+ ** debugging a particular CLR such as mscordbi and mscordacwks. **
+ **************************************************************************************/
+[
+ uuid(E04E2FF1-DCFD-45D5-BCD1-16FFF2FAF7BA),
+ version(1.0),
+ helpstring("CLR debugging LibraryProvider callback interface"),
+ local
+]
+interface ICLRDebuggingLibraryProvider2 : IUnknown
+{
+ /**********************************************************************************
+ ** The goal of this method is to allow the debugger to provide a module path **
+ ** which is needed for debugging. The debugger may use any available means to **
+ ** locate and/or procure the module. See the security note below for important **
+ ** information about implementing this method securely. **
+ ** Arguments: **
+ ** pwzFileName - The name of the module being requested **
+ ** dwTimeStamp - The date time stamp stored in the COFF file header of PE files **
+ ** dwSizeOfImage - The SizeOfImage field stored in the COFF optional file header **
+ ** of PE files **
+ ** ppResolvedModulePath - Where *ppResolvedModulePath is a null terminated **
+ ** path to the module dll. On Windows it should be **
+ ** allocated with CoTaskMemAlloc. On Unix it should be **
+ ** allocated with malloc. Failure leave it untouched. See **
+ ** security note below! **
+ ** **
+ ** Return value - S_OK if the module was provided, or any other convenient **
+ ** error HRESULT if the module could not be provided **
+ ** **
+ ** !!!!!!!!!!!!!! **
+ ** SECURITY NOTE: Anything the caller would not be willing to execute itself, it **
+ ** should not provide to the this API call **
+ ***********************************************************************************/
+ HRESULT ProvideLibrary2(
+ [in] const WCHAR* pwszFileName,
+ [in] DWORD dwTimestamp,
+ [in] DWORD dwSizeOfImage,
+ [out] LPWSTR* ppResolvedModulePath);
+}
+
/**************************************************************************************
** ICLRDebugging **
** Activated using mscoree!CLRCreateInstance. **
diff --git a/src/pal/prebuilt/inc/metahost.h b/src/pal/prebuilt/inc/metahost.h
index 0714e42157..a8638683bc 100644
--- a/src/pal/prebuilt/inc/metahost.h
+++ b/src/pal/prebuilt/inc/metahost.h
@@ -1,13 +1,19 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
/* this ALWAYS GENERATED file contains the definitions for the interfaces */
- /* File created by MIDL compiler version 8.00.0603 */
+ /* File created by MIDL compiler version 8.01.0622 */
+/* at Mon Jan 18 19:14:07 2038
+ */
+/* Compiler settings for C:/ssd/coreclr/src/inc/metahost.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.01.0622
+ 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 */
@@ -23,7 +29,7 @@
#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
+#endif /* __RPCNDR_H_VERSION__ */
#ifndef COM_NO_WINDOWS_H
#include "windows.h"
@@ -67,6 +73,13 @@ typedef interface ICLRDebuggingLibraryProvider ICLRDebuggingLibraryProvider;
#endif /* __ICLRDebuggingLibraryProvider_FWD_DEFINED__ */
+#ifndef __ICLRDebuggingLibraryProvider2_FWD_DEFINED__
+#define __ICLRDebuggingLibraryProvider2_FWD_DEFINED__
+typedef interface ICLRDebuggingLibraryProvider2 ICLRDebuggingLibraryProvider2;
+
+#endif /* __ICLRDebuggingLibraryProvider2_FWD_DEFINED__ */
+
+
#ifndef __ICLRDebugging_FWD_DEFINED__
#define __ICLRDebugging_FWD_DEFINED__
typedef interface ICLRDebugging ICLRDebugging;
@@ -183,6 +196,7 @@ EXTERN_GUID(CLSID_CLRDebuggingLegacy, 0xDF8395B5, 0xA4BA, 0x450b, 0xA7, 0x7C, 0x
EXTERN_GUID(CLSID_CLRProfiling, 0xbd097ed8, 0x733e, 0x43fe, 0x8e, 0xd7, 0xa9, 0x5f, 0xf9, 0xa8, 0x44, 0x8c);
EXTERN_GUID(IID_ICLRProfiling, 0xb349abe3, 0xb56f, 0x4689, 0xbf, 0xcd, 0x76, 0xbf, 0x39, 0xd8, 0x88, 0xea);
EXTERN_GUID(IID_ICLRDebuggingLibraryProvider, 0x3151c08d, 0x4d09, 0x4f9b, 0x88, 0x38, 0x28, 0x80, 0xbf, 0x18, 0xfe, 0x51);
+EXTERN_GUID(IID_ICLRDebuggingLibraryProvider2, 0xE04E2FF1, 0xDCFD, 0x45D5, 0xBC, 0xD1, 0x16, 0xFF, 0xF2, 0xFA, 0xF7, 0xBA);
typedef HRESULT ( __stdcall *CLRCreateInstanceFnPtr )(
REFCLSID clsid,
REFIID riid,
@@ -693,6 +707,92 @@ EXTERN_C const IID IID_ICLRDebuggingLibraryProvider;
#endif /* __ICLRDebuggingLibraryProvider_INTERFACE_DEFINED__ */
+#ifndef __ICLRDebuggingLibraryProvider2_INTERFACE_DEFINED__
+#define __ICLRDebuggingLibraryProvider2_INTERFACE_DEFINED__
+
+/* interface ICLRDebuggingLibraryProvider2 */
+/* [object][local][helpstring][version][uuid] */
+
+
+EXTERN_C const IID IID_ICLRDebuggingLibraryProvider2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("E04E2FF1-DCFD-45D5-BCD1-16FFF2FAF7BA")
+ ICLRDebuggingLibraryProvider2 : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE ProvideLibrary2(
+ /* [in] */ const WCHAR *pwszFileName,
+ /* [in] */ DWORD dwTimestamp,
+ /* [in] */ DWORD dwSizeOfImage,
+ /* [out] */ LPWSTR *ppResolvedModulePath) = 0;
+
+ };
+
+
+#else /* C style interface */
+
+ typedef struct ICLRDebuggingLibraryProvider2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ ICLRDebuggingLibraryProvider2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ _COM_Outptr_ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ ICLRDebuggingLibraryProvider2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ ICLRDebuggingLibraryProvider2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *ProvideLibrary2 )(
+ ICLRDebuggingLibraryProvider2 * This,
+ /* [in] */ const WCHAR *pwszFileName,
+ /* [in] */ DWORD dwTimestamp,
+ /* [in] */ DWORD dwSizeOfImage,
+ /* [out] */ LPWSTR *ppResolvedModulePath);
+
+ END_INTERFACE
+ } ICLRDebuggingLibraryProvider2Vtbl;
+
+ interface ICLRDebuggingLibraryProvider2
+ {
+ CONST_VTBL struct ICLRDebuggingLibraryProvider2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define ICLRDebuggingLibraryProvider2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define ICLRDebuggingLibraryProvider2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define ICLRDebuggingLibraryProvider2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define ICLRDebuggingLibraryProvider2_ProvideLibrary2(This,pwszFileName,dwTimestamp,dwSizeOfImage,ppResolvedModulePath) \
+ ( (This)->lpVtbl -> ProvideLibrary2(This,pwszFileName,dwTimestamp,dwSizeOfImage,ppResolvedModulePath) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __ICLRDebuggingLibraryProvider2_INTERFACE_DEFINED__ */
+
+
#ifndef __ICLRDebugging_INTERFACE_DEFINED__
#define __ICLRDebugging_INTERFACE_DEFINED__
@@ -1745,14 +1845,14 @@ EXTERN_C const IID IID_ICLRStrongName3;
EXTERN_C const IID LIBID_CLRMetaHost;
#endif /* __CLRMetaHost_LIBRARY_DEFINED__ */
-/* interface __MIDL_itf_metahost_0000_0010 */
+/* interface __MIDL_itf_metahost_0000_0011 */
/* [local] */
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
-extern RPC_IF_HANDLE __MIDL_itf_metahost_0000_0010_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_metahost_0000_0010_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_metahost_0000_0011_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_metahost_0000_0011_v0_0_s_ifspec;
/* Additional Prototypes for ALL interfaces */