From patchwork Wed Jul 5 07:54:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sameeh Jubran X-Patchwork-Id: 9826071 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 01A6E608B8 for ; Wed, 5 Jul 2017 07:55:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E04D626E56 for ; Wed, 5 Jul 2017 07:55:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D4C8D2785D; Wed, 5 Jul 2017 07:55:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 78AB326E56 for ; Wed, 5 Jul 2017 07:55:40 +0000 (UTC) Received: from localhost ([::1]:44679 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dSf9v-0004ZL-Mq for patchwork-qemu-devel@patchwork.kernel.org; Wed, 05 Jul 2017 03:55:39 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57001) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dSf8k-0004XI-1D for qemu-devel@nongnu.org; Wed, 05 Jul 2017 03:54:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dSf8h-0006uv-RU for qemu-devel@nongnu.org; Wed, 05 Jul 2017 03:54:26 -0400 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:35925) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dSf8h-0006uf-KK for qemu-devel@nongnu.org; Wed, 05 Jul 2017 03:54:23 -0400 Received: by mail-wm0-x243.google.com with SMTP id y5so30601550wmh.3 for ; Wed, 05 Jul 2017 00:54:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references:list-id; bh=k+x3gsGGxj6c6BPG0aaCmvXColjf2Qgod7PSCXs1YqY=; b=GWZeUENsVJ4aR5NUOLLSG8dZi1CGXHqvsiFzxxFZzAk+jvVGM9T2vN56YjRxN1buCj fIQoQN96Uoonfrwo6DFGTiMMsSeq+TbDIOIJVaZ+9WLrvV5dcNYc8yPBmwy3q0Yiekvz 1SroAD7a7q0LaBmwGW8IKJvMlAw25X/If+M7g6IaaKJcPL2aUWiTuVSAuUb1D9B9+RNR kwQE4gEpo5h42kWUnK5H+JhEubKxWPSVBhi30kRU59VWB4g0rrSNZ+fUe6D+338vA+bT x9oAS3WDymZR6r1V+PW89qXFU30Y9h7fcceNPzfmUZokMKGoDZtIBK5KsBT84h+Jem7/ /ZZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:list-id; bh=k+x3gsGGxj6c6BPG0aaCmvXColjf2Qgod7PSCXs1YqY=; b=UVmq67eFPuPAfzDsbkp5CyWATvqArtehQEUEIGuuFYhSXtI+Wna5hOLd6k/Ofhbfbz ZzD1t5LvFSJ0Enk42l2qS5/97t5/v+/K0R4pn8/6aG+4KFQDNuCPbjb9rJqyvaFTd0ek FJxmMatg1ltshiqhMiD8LczseJjmBd7AL8WJhq9VQ3EwGb7FschVOPg7Y/pOETYubbEH Oz8pWLdcUBXx8b2aERx5G2Gu4pBax9iCPtUi+HA4cqkLETbnPCTgQbVVdWzpym2l0dF9 Zuzo040dSbfu/zJjn2ttwjhGQn737I1+x7DmQ6qk7CaXRcnfgWYqo7Rr15JVqOiQ9SLe Dqow== X-Gm-Message-State: AKS2vOyRGmwk2h6J1hvkObCaHs2UUn+EV7miSOC5OmLuZBfHV9fDtpc9 B3+rLvdoO01KYkKC958= X-Received: by 10.28.136.129 with SMTP id k123mr29174534wmd.14.1499241262300; Wed, 05 Jul 2017 00:54:22 -0700 (PDT) Received: from bark.daynix ([141.226.163.173]) by smtp.gmail.com with ESMTPSA id 22sm29144444wru.29.2017.07.05.00.54.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jul 2017 00:54:19 -0700 (PDT) From: Sameeh Jubran To: qemu-devel@nongnu.org, Michael Roth Date: Wed, 5 Jul 2017 10:54:08 +0300 Message-Id: <20170705075411.6556-3-sameeh@daynix.com> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170705075411.6556-1-sameeh@daynix.com> References: <20170705075411.6556-1-sameeh@daynix.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::243 Subject: [Qemu-devel] [PATCH 2/5] qga-win: service-win32: Add start_service and stop_service functions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Yan Vugenfirer Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Sameeh Jubran This commits adds two functions which handle service's start and stop process in Windows. Signed-off-by: Sameeh Jubran --- qga/service-win32.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ qga/service-win32.h | 2 ++ 2 files changed, 54 insertions(+) diff --git a/qga/service-win32.c b/qga/service-win32.c index fd434e3..dc41d63 100644 --- a/qga/service-win32.c +++ b/qga/service-win32.c @@ -95,6 +95,26 @@ static const char *win_escape_arg(const char *to_escape, GString *buffer) return buffer->str; } + +static int get_service(const char *service_name, SC_HANDLE* service) +{ + SC_HANDLE manager = NULL; + manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + if (manager == NULL) { + printf_win_error("No handle to service control manager"); + return EXIT_FAILURE; + } + + *service = OpenService(manager, service_name, SERVICE_ALL_ACCESS); + if (service == NULL) { + printf_win_error("Failed to open service"); + return EXIT_FAILURE; + } + + CloseServiceHandle(manager); + return EXIT_SUCCESS; +} + int ga_install_service(const char *path, const char *logfile, const char *state_dir) { @@ -188,3 +208,35 @@ int ga_uninstall_service(void) return EXIT_SUCCESS; } + +int start_service(const char *service_name) +{ + int ret = EXIT_FAILURE; + SC_HANDLE service = NULL; + ret = get_service(service_name, &service); + if (ret != EXIT_SUCCESS) { + return ret; + } + ret = StartService(service, 0 , NULL) ? EXIT_SUCCESS : GetLastError(); + + CloseServiceHandle(service); + return ret; +} + +int stop_service(const char *service_name) +{ + int ret = EXIT_FAILURE; + SC_HANDLE service = NULL; + + SERVICE_STATUS service_status; + ret = get_service(service_name, &service); + + if (ret != EXIT_SUCCESS) { + return ret; + } + ret = ControlService(service, SERVICE_CONTROL_STOP, &service_status) ? + EXIT_SUCCESS : GetLastError(); + + CloseServiceHandle(service); + return ret; +} diff --git a/qga/service-win32.h b/qga/service-win32.h index 89e99df..65248ea 100644 --- a/qga/service-win32.h +++ b/qga/service-win32.h @@ -28,5 +28,7 @@ typedef struct GAService { int ga_install_service(const char *path, const char *logfile, const char *state_dir); int ga_uninstall_service(void); +int start_service(const char *service_name); +int stop_service(const char *service_name); #endif