summaryrefslogtreecommitdiff
path: root/qga/vss-win32.c
diff options
context:
space:
mode:
authorTomoki Sekiyama <tomoki.sekiyama@hds.com>2013-08-07 11:40:32 -0400
committerMichael Roth <mdroth@linux.vnet.ibm.com>2013-09-09 14:17:57 -0500
commitf311f2c20a1e33c1e5fdb50ee21e69a5bf26c950 (patch)
treedd38ced465cd3262444d79c6e101d4936922aa86 /qga/vss-win32.c
parent64c003174039d0c63ea2bef48d600363ce80a58b (diff)
downloadqemu-f311f2c20a1e33c1e5fdb50ee21e69a5bf26c950.tar.gz
qemu-ga: Install Windows VSS provider on `qemu-ga -s install'
Register QGA VSS provider library into Windows when qemu-ga is installed as Windows service ('-s install' option). It is deregistered when the service is uninstalled ('-s uninstall' option). Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama@hds.com> Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Diffstat (limited to 'qga/vss-win32.c')
-rw-r--r--qga/vss-win32.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/qga/vss-win32.c b/qga/vss-win32.c
index 89c0f3bd18..24c428842b 100644
--- a/qga/vss-win32.c
+++ b/qga/vss-win32.c
@@ -119,6 +119,31 @@ bool vss_initialized(void)
return !!provider_lib;
}
+int ga_install_vss_provider(void)
+{
+ HRESULT hr;
+
+ if (!vss_init(false)) {
+ fprintf(stderr, "Installation of VSS provider is skipped. "
+ "fsfreeze will be disabled.\n");
+ return 0;
+ }
+ hr = call_vss_provider_func("COMRegister");
+ vss_deinit(false);
+
+ return SUCCEEDED(hr) ? 0 : EXIT_FAILURE;
+}
+
+void ga_uninstall_vss_provider(void)
+{
+ if (!vss_init(false)) {
+ fprintf(stderr, "Removal of VSS provider is skipped.\n");
+ return;
+ }
+ call_vss_provider_func("COMUnregister");
+ vss_deinit(false);
+}
+
/* Call VSS requester and freeze/thaw filesystems and applications */
void qga_vss_fsfreeze(int *nr_volume, Error **err, bool freeze)
{