ADVAPI32: Implement GetServiceDisplayNameW
Rolf Kalbermatter
r.kalbermatter at hccnet.nl
Sun Apr 22 15:26:56 CDT 2007
Changelog
dlls/advapi32/service.c
- Implement GetServiceDisplayNameW
License: X11/LGPL
Rolf Kalbermatter
-------------- next part --------------
>From d6027dd63122b4d73f8495c10087cf398307cd62 Mon Sep 17 00:00:00 2001
From: Rolf Kalbermatter <r.kalbermatter at hccnet.nl>
Date: Sun, 22 Apr 2007 21:48:58 +0200
Subject: [PATCH] Implement GetServiceDisplayNameW
---
dlls/advapi32/service.c | 32 ++++++++++++++++++++++++++++++--
1 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index 3be5275..1486e9e 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -1978,9 +1978,37 @@ BOOL WINAPI GetServiceDisplayNameA( SC_H
BOOL WINAPI GetServiceDisplayNameW( SC_HANDLE hSCManager, LPCWSTR lpServiceName,
LPWSTR 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_w(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 * sizeof(WCHAR);
+ ret = RegGetValueW(hscm->hkey, lpServiceName, szDisplayName, RRF_RT_REG_SZ, &type, NULL, &size);
+ switch (ret)
+ {
+ case ERROR_SUCCESS:
+ ret = RegGetValueW(hscm->hkey, lpServiceName, szDisplayName, RRF_RT_REG_SZ, &type, lpDisplayName, &size);
+ *lpcchBuffer = (size / sizeof(WCHAR)) - 1;
+ break;
+ case ERROR_MORE_DATA:
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ *lpcchBuffer = (size / sizeof(WCHAR)) - 1;
+ break;
+ default:
+ SetLastError(ret);
+ break;
+ }
+ return (ret ? FALSE : TRUE);
}
/******************************************************************************
--
1.4.1
More information about the wine-patches
mailing list