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 <sam...@daynix.com>


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   <tomoki.sekiy...@hds.com>
> + *
> + * 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
> 


Reply via email to