[pkg-wine-party] [SCM] Debian Wine packaging branch, wheezy, updated. wine-1.4-7-302-gb61b690
The following commit has been merged in the wheezy branch:
commit 7caf5107d04eaeaac153a1044790d21aaa83a75b
Author: Nikolay Sivov <nsivov@codeweavers.com>
Date: Mon May 7 13:42:27 2012 +0400
shell32: Implement IShellDispatch2::IsServiceRunning().
(cherry picked from commit 9af543aad8ff50ba0e5ad7a1803b6608433a3717)
diff --git a/dlls/shell32/shelldispatch.c b/dlls/shell32/shelldispatch.c
index 29298b3..825c405 100644
--- a/dlls/shell32/shelldispatch.c
+++ b/dlls/shell32/shelldispatch.c
@@ -30,6 +30,7 @@
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
+#include "winsvc.h"
#include "shlwapi.h"
#include "shlobj.h"
#include "shldisp.h"
@@ -1038,10 +1039,48 @@ static HRESULT WINAPI ShellDispatch_ServiceStop(IShellDispatch2 *iface, BSTR ser
return E_NOTIMPL;
}
-static HRESULT WINAPI ShellDispatch_IsServiceRunning(IShellDispatch2 *iface, BSTR service, VARIANT *running)
+static HRESULT WINAPI ShellDispatch_IsServiceRunning(IShellDispatch2 *iface, BSTR name, VARIANT *running)
{
- FIXME("(%s, %p): stub\n", debugstr_w(service), running);
- return E_NOTIMPL;
+ SERVICE_STATUS_PROCESS status;
+ SC_HANDLE scm, service;
+ DWORD dummy;
+
+ TRACE("(%s, %p)\n", debugstr_w(name), running);
+
+ V_VT(running) = VT_BOOL;
+ V_BOOL(running) = VARIANT_FALSE;
+
+ scm = OpenSCManagerW(NULL, NULL, SC_MANAGER_CONNECT);
+ if (!scm)
+ {
+ ERR("failed to connect to service manager\n");
+ return S_OK;
+ }
+
+ service = OpenServiceW(scm, name, SERVICE_QUERY_STATUS);
+ if (!service)
+ {
+ ERR("Failed to open service %s (%u)\n", debugstr_w(name), GetLastError());
+ CloseServiceHandle(service);
+ return S_OK;
+ }
+
+ if (!QueryServiceStatusEx(service, SC_STATUS_PROCESS_INFO, (BYTE *)&status,
+ sizeof(SERVICE_STATUS_PROCESS), &dummy))
+ {
+ TRACE("failed to query service status (%u)\n", GetLastError());
+ CloseServiceHandle(service);
+ CloseServiceHandle(scm);
+ return S_OK;
+ }
+
+ if (status.dwCurrentState == SERVICE_RUNNING)
+ V_BOOL(running) = VARIANT_TRUE;
+
+ CloseServiceHandle(service);
+ CloseServiceHandle(scm);
+
+ return S_OK;
}
static HRESULT WINAPI ShellDispatch_CanStartStopService(IShellDispatch2 *iface, BSTR service, VARIANT *ret)
--
Debian Wine packaging
Reply to: