[PATCH 3/6] dbgeng: Add IDebugDataSpaces stub.
Nikolay Sivov
nsivov at codeweavers.com
Wed Apr 3 04:16:45 CDT 2019
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/dbgeng/dbgeng.c | 236 ++++++++++++++++++++++++++++++++++++++++++-
include/dbgeng.h | 40 ++++++++
2 files changed, 271 insertions(+), 5 deletions(-)
diff --git a/dlls/dbgeng/dbgeng.c b/dlls/dbgeng/dbgeng.c
index a2fbdfdc03..49fd9f3ec9 100644
--- a/dlls/dbgeng/dbgeng.c
+++ b/dlls/dbgeng/dbgeng.c
@@ -37,6 +37,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbgeng);
struct debug_client
{
IDebugClient IDebugClient_iface;
+ IDebugDataSpaces IDebugDataSpaces_iface;
LONG refcount;
};
@@ -45,21 +46,35 @@ static struct debug_client *impl_from_IDebugClient(IDebugClient *iface)
return CONTAINING_RECORD(iface, struct debug_client, IDebugClient_iface);
}
+static struct debug_client *impl_from_IDebugDataSpaces(IDebugDataSpaces *iface)
+{
+ return CONTAINING_RECORD(iface, struct debug_client, IDebugDataSpaces_iface);
+}
+
static HRESULT STDMETHODCALLTYPE debugclient_QueryInterface(IDebugClient *iface, REFIID riid, void **obj)
{
+ struct debug_client *debug_client = impl_from_IDebugClient(iface);
+
TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
if (IsEqualIID(riid, &IID_IDebugClient) ||
IsEqualIID(riid, &IID_IUnknown))
{
*obj = iface;
- iface->lpVtbl->AddRef(iface);
- return S_OK;
+ }
+ else if (IsEqualIID(riid, &IID_IDebugDataSpaces))
+ {
+ *obj = &debug_client->IDebugDataSpaces_iface;
+ }
+ else
+ {
+ WARN("Unsupported interface %s.\n", debugstr_guid(riid));
+ *obj = NULL;
+ return E_NOINTERFACE;
}
- WARN("Unsupported interface %s.\n", debugstr_guid(riid));
- *obj = NULL;
- return E_NOINTERFACE;
+ IUnknown_AddRef((IUnknown *)*obj);
+ return S_OK;
}
static ULONG STDMETHODCALLTYPE debugclient_AddRef(IDebugClient *iface)
@@ -467,6 +482,216 @@ static const IDebugClientVtbl debugclientvtbl =
debugclient_FlushCallbacks,
};
+static HRESULT STDMETHODCALLTYPE debugdataspaces_QueryInterface(IDebugDataSpaces *iface, REFIID riid, void **obj)
+{
+ struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
+ IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
+ return IUnknown_QueryInterface(unk, riid, obj);
+}
+
+static ULONG STDMETHODCALLTYPE debugdataspaces_AddRef(IDebugDataSpaces *iface)
+{
+ struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
+ IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
+ return IUnknown_AddRef(unk);
+}
+
+static ULONG STDMETHODCALLTYPE debugdataspaces_Release(IDebugDataSpaces *iface)
+{
+ struct debug_client *debug_client = impl_from_IDebugDataSpaces(iface);
+ IUnknown *unk = (IUnknown *)&debug_client->IDebugClient_iface;
+ return IUnknown_Release(unk);
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadVirtual(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
+ ULONG buffer_size, ULONG *read_len)
+{
+ FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteVirtual(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
+ ULONG buffer_size, ULONG *written)
+{
+ FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_SearchVirtual(IDebugDataSpaces *iface, ULONG64 offset, ULONG64 length,
+ void *pattern, ULONG pattern_size, ULONG pattern_granularity, ULONG64 *ret_offset)
+{
+ FIXME("%p, %s, %s, %p, %u, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), wine_dbgstr_longlong(length),
+ pattern, pattern_size, pattern_granularity, ret_offset);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadVirtualUncached(IDebugDataSpaces *iface, ULONG64 offset,
+ void *buffer, ULONG buffer_size, ULONG *read_len)
+{
+ FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteVirtualUncached(IDebugDataSpaces *iface, ULONG64 offset,
+ void *buffer, ULONG buffer_size, ULONG *written)
+{
+ FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadPointersVirtual(IDebugDataSpaces *iface, ULONG count,
+ ULONG64 offset, ULONG64 *pointers)
+{
+ FIXME("%p, %u, %s, %p stub.\n", iface, count, wine_dbgstr_longlong(offset), pointers);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_WritePointersVirtual(IDebugDataSpaces *iface, ULONG count,
+ ULONG64 offset, ULONG64 *pointers)
+{
+ FIXME("%p, %u, %s, %p stub.\n", iface, count, wine_dbgstr_longlong(offset), pointers);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadPhysical(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
+ ULONG buffer_size, ULONG *read_len)
+{
+ FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_WritePhysical(IDebugDataSpaces *iface, ULONG64 offset, void *buffer,
+ ULONG buffer_size, ULONG *written)
+{
+ FIXME("%p, %s, %p, %u, %p stub.\n", iface, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadControl(IDebugDataSpaces *iface, ULONG processor, ULONG64 offset,
+ void *buffer, ULONG buffer_size, ULONG *read_len)
+{
+ FIXME("%p, %u, %s, %p, %u, %p stub.\n", iface, processor, wine_dbgstr_longlong(offset), buffer, buffer_size, read_len);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteControl(IDebugDataSpaces *iface, ULONG processor, ULONG64 offset,
+ void *buffer, ULONG buffer_size, ULONG *written)
+{
+ FIXME("%p, %u, %s, %p, %u, %p stub.\n", iface, processor, wine_dbgstr_longlong(offset), buffer, buffer_size, written);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadIo(IDebugDataSpaces *iface, ULONG type, ULONG bus_number,
+ ULONG address_space, ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *read_len)
+{
+ FIXME("%p, %u, %u, %u, %s, %p, %u, %p stub.\n", iface, type, bus_number, address_space, wine_dbgstr_longlong(offset),
+ buffer, buffer_size, read_len);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteIo(IDebugDataSpaces *iface, ULONG type, ULONG bus_number,
+ ULONG address_space, ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *written)
+{
+ FIXME("%p, %u, %u, %u, %s, %p, %u, %p stub.\n", iface, type, bus_number, address_space, wine_dbgstr_longlong(offset),
+ buffer, buffer_size, written);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadMsr(IDebugDataSpaces *iface, ULONG msr, ULONG64 *value)
+{
+ FIXME("%p, %u, %p stub.\n", iface, msr, value);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteMsr(IDebugDataSpaces *iface, ULONG msr, ULONG64 value)
+{
+ FIXME("%p, %u, %s stub.\n", iface, msr, wine_dbgstr_longlong(value));
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadBusData(IDebugDataSpaces *iface, ULONG data_type,
+ ULONG bus_number, ULONG slot_number, ULONG offset, void *buffer, ULONG buffer_size, ULONG *read_len)
+{
+ FIXME("%p, %u, %u, %u, %u, %p, %u, %p stub.\n", iface, data_type, bus_number, slot_number, offset, buffer,
+ buffer_size, read_len);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_WriteBusData(IDebugDataSpaces *iface, ULONG data_type,
+ ULONG bus_number, ULONG slot_number, ULONG offset, void *buffer, ULONG buffer_size, ULONG *written)
+{
+ FIXME("%p, %u, %u, %u, %u, %p, %u, %p stub.\n", iface, data_type, bus_number, slot_number, offset, buffer,
+ buffer_size, written);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_CheckLowMemory(IDebugDataSpaces *iface)
+{
+ FIXME("%p stub.\n", iface);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadDebuggerData(IDebugDataSpaces *iface, ULONG index, void *buffer,
+ ULONG buffer_size, ULONG *data_size)
+{
+ FIXME("%p, %u, %p, %u, %p stub.\n", iface, index, buffer, buffer_size, data_size);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT STDMETHODCALLTYPE debugdataspaces_ReadProcessorSystemData(IDebugDataSpaces *iface, ULONG processor,
+ ULONG index, void *buffer, ULONG buffer_size, ULONG *data_size)
+{
+ FIXME("%p, %u, %u, %p, %u, %p stub.\n", iface, processor, index, buffer, buffer_size, data_size);
+
+ return E_NOTIMPL;
+}
+
+static const IDebugDataSpacesVtbl debugdataspacesvtbl =
+{
+ debugdataspaces_QueryInterface,
+ debugdataspaces_AddRef,
+ debugdataspaces_Release,
+ debugdataspaces_ReadVirtual,
+ debugdataspaces_WriteVirtual,
+ debugdataspaces_SearchVirtual,
+ debugdataspaces_ReadVirtualUncached,
+ debugdataspaces_WriteVirtualUncached,
+ debugdataspaces_ReadPointersVirtual,
+ debugdataspaces_WritePointersVirtual,
+ debugdataspaces_ReadPhysical,
+ debugdataspaces_WritePhysical,
+ debugdataspaces_ReadControl,
+ debugdataspaces_WriteControl,
+ debugdataspaces_ReadIo,
+ debugdataspaces_WriteIo,
+ debugdataspaces_ReadMsr,
+ debugdataspaces_WriteMsr,
+ debugdataspaces_ReadBusData,
+ debugdataspaces_WriteBusData,
+ debugdataspaces_CheckLowMemory,
+ debugdataspaces_ReadDebuggerData,
+ debugdataspaces_ReadProcessorSystemData,
+};
+
/************************************************************
* DebugExtensionInitialize (DBGENG.@)
*
@@ -508,6 +733,7 @@ HRESULT WINAPI DebugCreate(REFIID riid, void **obj)
return E_OUTOFMEMORY;
debug_client->IDebugClient_iface.lpVtbl = &debugclientvtbl;
+ debug_client->IDebugDataSpaces_iface.lpVtbl = &debugdataspacesvtbl;
debug_client->refcount = 1;
unk = (IUnknown *)&debug_client->IDebugClient_iface;
diff --git a/include/dbgeng.h b/include/dbgeng.h
index 03305cce41..797aab7c68 100644
--- a/include/dbgeng.h
+++ b/include/dbgeng.h
@@ -26,6 +26,7 @@ DEFINE_GUID(IID_IDebugInputCallbacks, 0x9f50e42c, 0xf136, 0x499e, 0x9a, 0x97
DEFINE_GUID(IID_IDebugOutputCallbacks, 0x4bf58045, 0xd654, 0x4c40, 0xb0, 0xaf, 0x68, 0x30, 0x90, 0xf3, 0x56, 0xdc);
DEFINE_GUID(IID_IDebugEventCallbacks, 0x337be28b, 0x5036, 0x4d72, 0xb6, 0xbf, 0xc4, 0x5f, 0xbb, 0x9f, 0x2e, 0xaa);
DEFINE_GUID(IID_IDebugClient, 0x27fe5639, 0x8407, 0x4f47, 0x83, 0x64, 0xee, 0x11, 0x8f, 0xb0, 0x8a, 0xc8);
+DEFINE_GUID(IID_IDebugDataSpaces, 0x88f7dfab, 0x3ea7, 0x4c3a, 0xae, 0xfb, 0xc4, 0xe8, 0x10, 0x61, 0x73, 0xaa);
#define INTERFACE IDebugBreakpoint
DECLARE_INTERFACE_(IDebugBreakpoint, IUnknown)
@@ -158,6 +159,45 @@ DECLARE_INTERFACE_(IDebugClient, IUnknown)
};
#undef INTERFACE
+#define INTERFACE IDebugDataSpaces
+DECLARE_INTERFACE_(IDebugDataSpaces, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /* IDebugDataSpaces */
+ STDMETHOD(ReadVirtual)(THIS_ ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *read_len) PURE;
+ STDMETHOD(WriteVirtual)(THIS_ ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *written) PURE;
+ STDMETHOD(SearchVirtual)(THIS_ ULONG64 offset, ULONG64 length, void *pattern, ULONG pattern_size,
+ ULONG pattern_granularity, ULONG64 *ret_offset) PURE;
+ STDMETHOD(ReadVirtualUncached)(THIS_ ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *read_len) PURE;
+ STDMETHOD(WriteVirtualUncached)(THIS_ ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *written) PURE;
+ STDMETHOD(ReadPointersVirtual)(THIS_ ULONG count, ULONG64 offset, ULONG64 *pointers) PURE;
+ STDMETHOD(WritePointersVirtual)(THIS_ ULONG count, ULONG64 offset, ULONG64 *pointers) PURE;
+ STDMETHOD(ReadPhysical)(THIS_ ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *read_len) PURE;
+ STDMETHOD(WritePhysical)(THIS_ ULONG64 offset, void *buffer, ULONG buffer_size, ULONG *written) PURE;
+ STDMETHOD(ReadControl)(THIS_ ULONG processor, ULONG64 offset, void *buffer, ULONG buffer_size,
+ ULONG *read_len) PURE;
+ STDMETHOD(WriteControl)(THIS_ ULONG processor, ULONG64 offset, void *buffer, ULONG buffer_size,
+ ULONG *written) PURE;
+ STDMETHOD(ReadIo)(THIS_ ULONG type, ULONG bus_number, ULONG address_space, ULONG64 offset, void *buffer,
+ ULONG buffer_size, ULONG *read_len) PURE;
+ STDMETHOD(WriteIo)(THIS_ ULONG type, ULONG bus_number, ULONG address_space, ULONG64 offset, void *buffer,
+ ULONG buffer_size, ULONG *written) PURE;
+ STDMETHOD(ReadMsr)(THIS_ ULONG msr, ULONG64 *value) PURE;
+ STDMETHOD(WriteMsr)(THIS_ ULONG msr, ULONG64 value) PURE;
+ STDMETHOD(ReadBusData)(THIS_ ULONG data_type, ULONG bus_number, ULONG slot_number, ULONG offset, void *buffer,
+ ULONG buffer_size, ULONG *read_len) PURE;
+ STDMETHOD(WriteBusData)(THIS_ ULONG data_type, ULONG bus_number, ULONG slot_number, ULONG offset, void *buffer,
+ ULONG buffer_size, ULONG *written) PURE;
+ STDMETHOD(CheckLowMemory)(THIS) PURE;
+ STDMETHOD(ReadDebuggerData)(THIS_ ULONG index, void *buffer, ULONG buffer_size, ULONG *data_size) PURE;
+ STDMETHOD(ReadProcessorSystemData)(THIS_ ULONG processor, ULONG index, void *buffer, ULONG buffer_size,
+ ULONG *data_size) PURE;
+};
+#undef INTERFACE
+
#ifdef __cplusplus
}
#endif
--
2.20.1
More information about the wine-devel
mailing list