summaryrefslogtreecommitdiff
path: root/src/debug/di/shimdatatarget.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/debug/di/shimdatatarget.h')
-rw-r--r--src/debug/di/shimdatatarget.h124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/debug/di/shimdatatarget.h b/src/debug/di/shimdatatarget.h
new file mode 100644
index 0000000000..a9c467bcec
--- /dev/null
+++ b/src/debug/di/shimdatatarget.h
@@ -0,0 +1,124 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+//*****************************************************************************
+// ShimDataTarget.h
+//
+
+//
+// header for liveproc data targets
+//*****************************************************************************
+
+#ifndef SHIMDATATARGET_H_
+#define SHIMDATATARGET_H_
+
+
+// Function to invoke for
+typedef HRESULT (*FPContinueStatusChanged)(void * pUserData, DWORD dwThreadId, CORDB_CONTINUE_STATUS dwContinueStatus);
+
+
+//---------------------------------------------------------------------------------------
+// Data target for a live process. This is used by Shim.
+//
+class ShimDataTarget : public ICorDebugMutableDataTarget
+{
+public:
+ // Allow hooking an implementation for ContinueStatusChanged.
+ void HookContinueStatusChanged(FPContinueStatusChanged fpContinueStatusChanged, void * pUserData);
+
+ // Release any resources. Also called by destructor.
+ virtual void Dispose() = 0;
+
+ // Set data-target into an error mode. This can be used to mark that the process
+ // is unavailable because it's running
+ void SetError(HRESULT hr);
+
+ // Get the OS Process ID that this DataTarget is for.
+ DWORD GetPid();
+
+ //
+ // IUnknown.
+ //
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(
+ REFIID InterfaceId,
+ PVOID* Interface);
+
+ virtual ULONG STDMETHODCALLTYPE AddRef();
+
+ virtual ULONG STDMETHODCALLTYPE Release();
+
+ //
+ // ICorDebugMutableDataTarget.
+ //
+
+ virtual HRESULT STDMETHODCALLTYPE GetPlatform(
+ CorDebugPlatform * pPlatform) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReadVirtual(
+ CORDB_ADDRESS address,
+ BYTE * pBuffer,
+ ULONG32 request,
+ ULONG32 * pcbRead) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE WriteVirtual(
+ CORDB_ADDRESS address,
+ const BYTE * pBuffer,
+ ULONG32 request) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetThreadContext(
+ DWORD dwThreadID,
+ ULONG32 contextFlags,
+ ULONG32 contextSize,
+ BYTE * context) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetThreadContext(
+ DWORD dwThreadID,
+ ULONG32 contextSize,
+ const BYTE * context) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ContinueStatusChanged(
+ DWORD dwThreadId,
+ CORDB_CONTINUE_STATUS dwContinueStatus) = 0;
+
+ // @dbgtodo - add Native Patch Table support
+
+protected:
+ // Pid of the target process.
+ DWORD m_processId;
+
+ // If this HRESULT != S_OK, then all interface methods will return this.
+ // This provides a way to mark the debugggee as stopped / dead.
+ HRESULT m_hr;
+
+ FPContinueStatusChanged m_fpContinueStatusChanged;
+ void * m_pContinueStatusChangedUserData;
+
+ // Reference count.
+ LONG m_ref;
+};
+
+//---------------------------------------------------------------------------------------
+//
+// Construction method for data-target
+//
+// Arguments:
+// machineInfo - used for Mac debugging; uniquely identifies the debugger proxy on the remote machine
+// processId - (input) live OS process ID to build a data-target for.
+// ppDataTarget - (output) new data-target instance. This gets addreffed.
+//
+// Return Value:
+// S_OK on success.
+//
+// Assumptions:
+// pid must be for local, same architecture, process.
+// Caller must have security permissions for OpenProcess()
+// Caller must release *ppDataTarget.
+//
+
+HRESULT BuildPlatformSpecificDataTarget(MachineInfo machineInfo,
+ DWORD processId,
+ ShimDataTarget ** ppDataTarget);
+
+#endif // SHIMDATATARGET_H_
+