Rolf Kalbermatter : advapi32: Implement GetServiceDisplayNameA.

Alexandre Julliard julliard at wine.codeweavers.com
Tue May 8 06:59:47 CDT 2007


Module: wine
Branch: master
Commit: 7af5a9d87f0c5c23a4a5d442f27e154a3d0a06ca
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7af5a9d87f0c5c23a4a5d442f27e154a3d0a06ca

Author: Rolf Kalbermatter <r.kalbermatter at hccnet.nl>
Date:   Mon May  7 21:54:56 2007 +0200

advapi32: Implement GetServiceDisplayNameA.

---

 dlls/advapi32/service.c |   31 +++++++++++++++++++++++++++++--
 1 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index 69f38fb..5f36215 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -2035,9 +2035,36 @@ BOOL WINAPI QueryServiceLockStatusW( SC_HANDLE hSCManager,
 BOOL WINAPI GetServiceDisplayNameA( SC_HANDLE hSCManager, LPCSTR lpServiceName,
   LPSTR lpDisplayName, LPDWORD lpcchBuffer)
 {
-    FIXME("%p %s %p %p\n", hSCManager,
+    struct sc_manager *hscm;
+    DWORD type, size;
+    LONG ret;
+
+    TRACE("%p %s %p %p\n", hSCManager,
           debugstr_a(lpServiceName), lpDisplayName, lpcchBuffer);
-    return FALSE;
+
+    hscm = sc_handle_get_handle_data(hSCManager, SC_HTYPE_MANAGER);
+    if (!hscm)
+    {
+        SetLastError(ERROR_INVALID_HANDLE);
+        return FALSE;
+    }
+
+    size = *lpcchBuffer;
+    ret = RegGetValueA(hscm->hkey, lpServiceName, "DisplayName", RRF_RT_REG_SZ, &type, lpDisplayName, &size);
+    if (ret)
+    {
+        if (lpDisplayName && *lpcchBuffer) *lpDisplayName = 0;
+
+        if (ret == ERROR_MORE_DATA)
+        {
+            SetLastError(ERROR_INSUFFICIENT_BUFFER);
+            *lpcchBuffer = size - 1;
+        }
+        else
+            SetLastError(ret);
+        return FALSE;
+    }
+    return TRUE;
 }
 
 /******************************************************************************




More information about the wine-cvs mailing list