-
Notifications
You must be signed in to change notification settings - Fork 4.5k
/
readonlydatatargetfacade.inl
138 lines (125 loc) · 3.54 KB
/
readonlydatatargetfacade.inl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
//*****************************************************************************
// 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;
}