diff --git a/src/dbgshim/dbgshim.cpp b/src/dbgshim/dbgshim.cpp index 5b9ac973f3..a68d1ad650 100644 --- a/src/dbgshim/dbgshim.cpp +++ b/src/dbgshim/dbgshim.cpp @@ -157,6 +157,11 @@ typedef HRESULT (STDAPICALLTYPE *FPCoreCLRCreateCordbObject3)( HMODULE hmodTargetCLR, IUnknown **ppCordb); +typedef HRESULT (STDAPICALLTYPE *FPCreateRemoteCordbObject)( + DWORD port, + LPCSTR assemblyBasePath, + IUnknown **ppCordb); + HRESULT CreateCoreDbg( HMODULE hCLRModule, DWORD processId, @@ -2151,3 +2156,41 @@ CLRCreateInstance( return pDebuggingImpl->QueryInterface(riid, ppInterface); } + +HRESULT CreateCoreDbgRemotePort(HMODULE hDBIModule, DWORD portId, LPCSTR assemblyBasePath, IUnknown **ppCordb) +{ + HRESULT hr = S_OK; + + FPCreateRemoteCordbObject fpCreate = + (FPCreateRemoteCordbObject)GetProcAddress(hDBIModule, "CreateRemoteCordbObject"); + if (fpCreate == NULL) + { + return CORDBG_E_INCOMPATIBLE_PROTOCOL; + } + + return fpCreate(portId, assemblyBasePath, ppCordb); + + return hr; +} + +DLLEXPORT +HRESULT +RegisterForRuntimeStartupRemotePort( + _In_ DWORD dwRemotePortId, + _In_ LPCSTR mscordbiPath, + _In_ LPCSTR assemblyBasePath, + _Out_ IUnknown ** ppCordb) +{ + HRESULT hr = S_OK; + HMODULE hMod = NULL; + + hMod = LoadLibraryA(mscordbiPath); + if (hMod == NULL) + { + hr = CORDBG_E_DEBUG_COMPONENT_MISSING; + return hr; + } + + hr = CreateCoreDbgRemotePort(hMod, dwRemotePortId, assemblyBasePath, ppCordb); + return S_OK; +} diff --git a/src/dbgshim/dbgshim.h b/src/dbgshim/dbgshim.h index 34c71e5152..b186a5da8c 100644 --- a/src/dbgshim/dbgshim.h +++ b/src/dbgshim/dbgshim.h @@ -105,3 +105,10 @@ CreateDebuggingInterfaceFromVersion3( _In_ LPCWSTR szApplicationGroupId, _In_ ICLRDebuggingLibraryProvider3* pLibraryProvider, _Out_ IUnknown ** ppCordb); + +EXTERN_C HRESULT +RegisterForRuntimeStartupRemotePort( + _In_ DWORD dwRemotePortId, + _In_ LPCSTR mscordbiPath, + _In_ LPCSTR assemblyBasePath, + _Out_ IUnknown ** ppCordb); diff --git a/src/dbgshim/dbgshim.ntdef b/src/dbgshim/dbgshim.ntdef index 8b6572e1f0..c06fc5e399 100644 --- a/src/dbgshim/dbgshim.ntdef +++ b/src/dbgshim/dbgshim.ntdef @@ -18,3 +18,4 @@ EXPORTS CreateDebuggingInterfaceFromVersion2 CreateDebuggingInterfaceFromVersion3 CLRCreateInstance + RegisterForRuntimeStartupRemotePort diff --git a/src/dbgshim/dbgshim_unixexports.src b/src/dbgshim/dbgshim_unixexports.src index fae2869f38..709b33705f 100644 --- a/src/dbgshim/dbgshim_unixexports.src +++ b/src/dbgshim/dbgshim_unixexports.src @@ -17,3 +17,4 @@ CreateDebuggingInterfaceFromVersionEx CreateDebuggingInterfaceFromVersion2 CreateDebuggingInterfaceFromVersion3 CLRCreateInstance +RegisterForRuntimeStartupRemotePort