diff options
Diffstat (limited to 'src/debug/inc/readonlydatatargetfacade.inl')
-rw-r--r-- | src/debug/inc/readonlydatatargetfacade.inl | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/debug/inc/readonlydatatargetfacade.inl b/src/debug/inc/readonlydatatargetfacade.inl new file mode 100644 index 0000000000..df7e1d0e75 --- /dev/null +++ b/src/debug/inc/readonlydatatargetfacade.inl @@ -0,0 +1,139 @@ +// 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. +//***************************************************************************** +// File: ReadOnlyDataTargetFacade.inl +// + +// +//***************************************************************************** + + +//--------------------------------------------------------------------------------------- +// +// Ctor for ReadOnlyDataTargetFacade. Just initializes ref count to 0. +// +//--------------------------------------------------------------------------------------- +ReadOnlyDataTargetFacade::ReadOnlyDataTargetFacade() + : m_ref(0) +{ +} + +// Standard impl of IUnknown::QueryInterface +HRESULT STDMETHODCALLTYPE +ReadOnlyDataTargetFacade::QueryInterface( + REFIID InterfaceId, + PVOID* pInterface + ) +{ + if (InterfaceId == IID_IUnknown) + { + *pInterface = static_cast<IUnknown *>(static_cast<ICorDebugDataTarget *>(this)); + } + else if (InterfaceId == IID_ICorDebugDataTarget) + { + *pInterface = static_cast<ICorDebugDataTarget *>(this); + } + else if (InterfaceId == IID_ICorDebugMutableDataTarget) + { + *pInterface = static_cast<ICorDebugMutableDataTarget *>(this); + } + else + { + *pInterface = NULL; + return E_NOINTERFACE; + } + + AddRef(); + return S_OK; +} + +// Standard impl of IUnknown::AddRef +ULONG STDMETHODCALLTYPE +ReadOnlyDataTargetFacade::AddRef() +{ + SUPPORTS_DAC; + LONG ref = InterlockedIncrement(&m_ref); + return ref; +} + +// Standard impl of IUnknown::Release +ULONG STDMETHODCALLTYPE +ReadOnlyDataTargetFacade::Release() +{ + SUPPORTS_DAC; + LONG ref = InterlockedDecrement(&m_ref); + if (ref == 0) + { + delete this; + } + return ref; +} + +// impl of interface method ICorDebugDataTarget::GetPlatform +HRESULT STDMETHODCALLTYPE +ReadOnlyDataTargetFacade::GetPlatform( + CorDebugPlatform *pPlatform) +{ + SUPPORTS_DAC; + _ASSERTE_MSG(false, "Unexpected call to read-API on read-only DataTarget facade"); + return E_UNEXPECTED; +} + +// impl of interface method ICorDebugDataTarget::ReadVirtual +HRESULT STDMETHODCALLTYPE +ReadOnlyDataTargetFacade::ReadVirtual( + CORDB_ADDRESS address, + PBYTE pBuffer, + ULONG32 cbRequestSize, + ULONG32 *pcbRead) +{ + SUPPORTS_DAC; + _ASSERTE_MSG(false, "Unexpected call to read-API on read-only DataTarget facade"); + return E_UNEXPECTED; +} + +// impl of interface method ICorDebugDataTarget::GetThreadContext +HRESULT STDMETHODCALLTYPE +ReadOnlyDataTargetFacade::GetThreadContext( + DWORD dwThreadID, + ULONG32 contextFlags, + ULONG32 contextSize, + BYTE * pContext) +{ + SUPPORTS_DAC; + _ASSERTE_MSG(false, "Unexpected call to read-API on read-only DataTarget facade"); + return E_UNEXPECTED; +} + +// impl of interface method ICorDebugMutableDataTarget::WriteVirtual +HRESULT STDMETHODCALLTYPE +ReadOnlyDataTargetFacade::WriteVirtual( + CORDB_ADDRESS pAddress, + const BYTE * pBuffer, + ULONG32 cbRequestSize) +{ + SUPPORTS_DAC; + return CORDBG_E_TARGET_READONLY; +} + +// impl of interface method ICorDebugMutableDataTarget::SetThreadContext +HRESULT STDMETHODCALLTYPE +ReadOnlyDataTargetFacade::SetThreadContext( + DWORD dwThreadID, + ULONG32 contextSize, + const BYTE * pContext) +{ + SUPPORTS_DAC; + return CORDBG_E_TARGET_READONLY; +} + +// Public implementation of ICorDebugMutableDataTarget::ContinueStatusChanged +HRESULT STDMETHODCALLTYPE +ReadOnlyDataTargetFacade::ContinueStatusChanged( + DWORD dwThreadId, + CORDB_CONTINUE_STATUS dwContinueStatus) +{ + SUPPORTS_DAC; + return CORDBG_E_TARGET_READONLY; +} |