[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH qemu-ga v2] qemu-ga: Make QGA VSS provider servi
From: |
Michael Roth |
Subject: |
Re: [Qemu-devel] [PATCH qemu-ga v2] qemu-ga: Make QGA VSS provider service run only when needed |
Date: |
Tue, 04 Apr 2017 18:26:35 -0500 |
User-agent: |
alot/0.5.1 |
Quoting Sameeh Jubran (2017-03-23 11:26:50)
> Currently the service runs in background on boot even though it is not
> needed and once it is running it never stops. The service needs to be
> running only during freeze operation and it should be stopped after
> executing thaw.
>
> Signed-off-by: Sameeh Jubran <address@hidden>
Thanks, applied to qga tree:
https://github.com/mdroth/qemu/commits/qga
> ---
> qga/vss-win32/install.cpp | 28 ++++++++++++++++++++++++++--
> qga/vss-win32/install.h | 20 ++++++++++++++++++++
> qga/vss-win32/requester.cpp | 2 ++
> 3 files changed, 48 insertions(+), 2 deletions(-)
> create mode 100644 qga/vss-win32/install.h
>
> diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp
> index f4160a3..f41fcdf 100644
> --- a/qga/vss-win32/install.cpp
> +++ b/qga/vss-win32/install.cpp
> @@ -14,7 +14,7 @@
>
> #include "vss-common.h"
> #include <inc/win2003/vscoordint.h>
> -#include <comadmin.h>
> +#include "install.h"
> #include <wbemidl.h>
> #include <comdef.h>
> #include <comutil.h>
> @@ -276,7 +276,7 @@ STDAPI COMRegister(void)
>
> chk(pCatalog->CreateServiceForApplication(
> _bstr_t(QGA_PROVIDER_LNAME), _bstr_t(QGA_PROVIDER_LNAME),
> - _bstr_t(L"SERVICE_AUTO_START"), _bstr_t(L"SERVICE_ERROR_NORMAL"),
> + _bstr_t(L"SERVICE_DEMAND_START"),
> _bstr_t(L"SERVICE_ERROR_NORMAL"),
> _bstr_t(L""), _bstr_t(L".\\localsystem"), _bstr_t(L""), FALSE));
> chk(pCatalog->InstallComponent(_bstr_t(QGA_PROVIDER_LNAME),
> _bstr_t(dllPath), _bstr_t(tlbPath),
> @@ -461,3 +461,27 @@ namespace _com_util
> return bstr;
> }
> }
> +
> +/* Stop QGA VSS provider service from COM+ Application Admin Catalog */
> +
> +STDAPI StopService(void)
> +{
> + HRESULT hr;
> + COMInitializer initializer;
> + COMPointer<IUnknown> pUnknown;
> + COMPointer<ICOMAdminCatalog2> pCatalog;
> +
> + int count = 0;
> +
> + chk(QGAProviderFind(QGAProviderCount, (void *)&count));
> + if (count) {
> + chk(CoCreateInstance(CLSID_COMAdminCatalog, NULL,
> CLSCTX_INPROC_SERVER,
> + IID_IUnknown, (void **)pUnknown.replace()));
> + chk(pUnknown->QueryInterface(IID_ICOMAdminCatalog2,
> + (void **)pCatalog.replace()));
> + chk(pCatalog->ShutdownApplication(_bstr_t(QGA_PROVIDER_LNAME)));
> + }
> +
> +out:
> + return hr;
> +}
> diff --git a/qga/vss-win32/install.h b/qga/vss-win32/install.h
> new file mode 100644
> index 0000000..35364af
> --- /dev/null
> +++ b/qga/vss-win32/install.h
> @@ -0,0 +1,20 @@
> +/*
> + * QEMU Guest Agent VSS requester declarations
> + *
> + * Copyright Hitachi Data Systems Corp. 2013
> + *
> + * Authors:
> + * Tomoki Sekiyama <address@hidden>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
> + * See the COPYING file in the top-level directory.
> + */
> +
> +#ifndef INSTALL_H
> +#define INSTALL_H
> +
> +#include <comadmin.h>
> +
> +STDAPI StopService(void);
> +
> +#endif
> diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp
> index 272e71b..27308ad 100644
> --- a/qga/vss-win32/requester.cpp
> +++ b/qga/vss-win32/requester.cpp
> @@ -13,6 +13,7 @@
> #include "qemu/osdep.h"
> #include "vss-common.h"
> #include "requester.h"
> +#include "install.h"
> #include <inc/win2003/vswriter.h>
> #include <inc/win2003/vsbackup.h>
>
> @@ -501,4 +502,5 @@ void requester_thaw(int *num_vols, ErrorSet *errset)
> requester_cleanup();
>
> CoUninitialize();
> + StopService();
> }
> --
> 2.9.3
>