CQGAVssProvider implements three COM interfaces, each with its own IUnknown base subobject. Returning the complete object address for IID_IUnknown relies on IVssSoftwareSnapshotProvider remaining the first base class.
Return the IVssSoftwareSnapshotProvider subobject instead. This selects the canonical IUnknown identity without relying on the complete-object layout. Signed-off-by: Marc-André Lureau <[email protected]> --- qga/vss-win32/provider.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qga/vss-win32/provider.cpp b/qga/vss-win32/provider.cpp index 377571b94881..44c3c74bd2f2 100644 --- a/qga/vss-win32/provider.cpp +++ b/qga/vss-win32/provider.cpp @@ -212,7 +212,8 @@ CQGAVssProvider::~CQGAVssProvider() STDMETHODIMP CQGAVssProvider::QueryInterface(REFIID riid, void **ppObj) { if (riid == IID_IUnknown) { - *ppObj = static_cast<void*>(this); + *ppObj = static_cast<void*>( + static_cast<IVssSoftwareSnapshotProvider*>(this)); AddRef(); return S_OK; } -- 2.55.0.543.g5ebe2ebe4ea8
