mirror of https://gitee.com/openkylin/qemu.git
qemu-ga: Make QGA VSS provider service run only when needed
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 <sameeh@daynix.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
81b2d5ceb0
commit
f342cc93ec
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* QEMU Guest Agent VSS requester declarations
|
||||
*
|
||||
* Copyright Hitachi Data Systems Corp. 2013
|
||||
*
|
||||
* Authors:
|
||||
* Tomoki Sekiyama <tomoki.sekiyama@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
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue