Commit b5dc99d59d for qemu.org
commit b5dc99d59dea6f6c5aae77e24ab69ddb63e53abe
Author: Marc-André Lureau <marcandre.lureau@redhat.com>
Date: Mon Sep 7 14:50:06 2026 +0400
qga/vss-win32: return an interface pointer for IID_IUnknown
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 <marcandre.lureau@redhat.com>
Reviewed-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
Link: https://lore.kernel.org/qemu-devel/20260907-qga-v1-8-86456ad356e2@redhat.com
Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
diff --git a/qga/vss-win32/provider.cpp b/qga/vss-win32/provider.cpp
index 377571b948..44c3c74bd2 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;
}