Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/coreclr/debug/daccess/dacdbiimpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4898,13 +4898,20 @@ VMPTR_OBJECTHANDLE DacDbiInterfaceImpl::GetObjectForCCW(CORDB_ADDRESS ccwPtr)

OBJECTHANDLE ohCCW = NULL;

#ifdef FEATURE_COMWRAPPERS
if (DACTryGetComWrappersHandleFromCCW(ccwPtr, &ohCCW) != S_OK)
{
#endif
#ifdef FEATURE_COMINTEROP
ComCallWrapper *pCCW = DACGetCCWFromAddress(ccwPtr);
if (pCCW)
{
ohCCW = pCCW->GetObjectHandle();
}
#endif
#ifdef FEATURE_COMWRAPPERS
}
#endif

VMPTR_OBJECTHANDLE vmObjHandle;
vmObjHandle.SetDacTargetPtr(ohCCW);
Expand Down
5 changes: 5 additions & 0 deletions src/coreclr/debug/daccess/dacimpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -1498,6 +1498,11 @@ class ClrDataAccess

static LONG s_procInit;

protected:
#ifdef FEATURE_COMWRAPPERS
HRESULT DACTryGetComWrappersHandleFromCCW(CLRDATA_ADDRESS ccwPtr, OBJECTHANDLE* objHandle);
#endif

public:
// APIs for picking up the info needed for a debugger to look up an ngen image or IL image
// from it's search path.
Expand Down
37 changes: 31 additions & 6 deletions src/coreclr/debug/daccess/request.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4156,12 +4156,15 @@ TADDR ClrDataAccess::DACGetManagedObjectWrapperFromCCW(CLRDATA_ADDRESS ccwPtr)
return managedObjectWrapperPtr;
}

HRESULT ClrDataAccess::DACTryGetComWrappersObjectFromCCW(CLRDATA_ADDRESS ccwPtr, OBJECTREF* objRef)
HRESULT ClrDataAccess::DACTryGetComWrappersHandleFromCCW(CLRDATA_ADDRESS ccwPtr, OBJECTHANDLE* objHandle)
{
if (ccwPtr == 0 || objRef == NULL)
return E_INVALIDARG;
HRESULT hr = E_FAIL;

SOSDacEnter();
if (ccwPtr == 0 || objHandle == NULL)
{
hr = E_INVALIDARG;
goto ErrExit;
}

if (!DACIsComWrappersCCW(ccwPtr))
{
Expand All @@ -4188,9 +4191,31 @@ HRESULT ClrDataAccess::DACTryGetComWrappersObjectFromCCW(CLRDATA_ADDRESS ccwPtr,
goto ErrExit;
}

*objRef = ObjectFromHandle(handle);
*objHandle = handle;

SOSDacLeave();
return S_OK;

ErrExit: return hr;
}

HRESULT ClrDataAccess::DACTryGetComWrappersObjectFromCCW(CLRDATA_ADDRESS ccwPtr, OBJECTREF* objRef)
{
HRESULT hr = E_FAIL;

if (ccwPtr == 0 || objRef == NULL)
{
hr = E_INVALIDARG;
goto ErrExit;
}

OBJECTHANDLE handle;
if (DACTryGetComWrappersHandleFromCCW(ccwPtr, &handle) != S_OK)
{
hr = E_FAIL;
goto ErrExit;
}

*objRef = ObjectFromHandle(handle);

return S_OK;

Expand Down