ADVAPI32: Implement GetServiceDisplayNameA
Rolf Kalbermatter
rolf.kalbermatter at cit.be
Fri Apr 20 03:42:25 CDT 2007
Changelog
dlls/advapi32/service.c
- Implement GetServiceDisplayNameA
License: X11/LGPL
Rolf Kalbermatter
-------------- next part --------------
From d5a3d9455d2c84bce9e10ed140ca700706f7557c Mon Sep 17 00:00:00 2001
From: Rolf Kalbermatter <r.kalbermatter at hccnet.nl>
Date: Fri, 20 Apr 2007 08:34:42 +0200
Subject: [PATCH] Implement GetServiceDisplayNameA
---
dlls/advapi32/service.c | 40 +++++++++++++++++++++++++++++++++++++---
1 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index ae6fb0f..c5dbb66 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -2003,9 +2003,43 @@ BOOL WINAPI QueryServiceLockStatusW( SC_
BOOL WINAPI GetServiceDisplayNameA( SC_HANDLE hSCManager, LPCSTR lpServiceName,
LPSTR lpDisplayName, LPDWORD lpcchBuffer)
{
- FIXME("%p %s %p %p\n", hSCManager,
- debugstr_a(lpServiceName), lpDisplayName, lpcchBuffer);
- return FALSE;
+ LPWSTR wServiceName, wStr = NULL;
+ BOOL ret;
+ DWORD size = *lpcchBuffer;
+
+ TRACE("%p %s %p %p\n", hSCManager, debugstr_a(lpServiceName), lpDisplayName, lpcchBuffer);
+
+ wServiceName = SERV_dup(lpServiceName);
+ if (lpServiceName && size)
+ wStr = HeapAlloc(GetProcessHeap(), 0, size * sizeof (WCHAR));
+
+ ret = GetServiceDisplayNameW(hSCManager, wServiceName, wStr, &size);
+ if (!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+ {
+ size++;
+ if (wStr)
+ wStr = HeapReAlloc(GetProcessHeap(), 0, wStr, size * sizeof (WCHAR));
+ else
+ wStr = HeapAlloc(GetProcessHeap(), 0, size * sizeof (WCHAR));
+ ret = GetServiceDisplayNameW(hSCManager, wServiceName, wStr, &size);
+ }
+
+ if (ret)
+ {
+ size = WideCharToMultiByte(CP_ACP, 0, wStr, -1, NULL, 0, 0, 0);
+ if (size <= *lpcchBuffer)
+ {
+ WideCharToMultiByte(CP_ACP, 0, wStr, -1, lpDisplayName, size, 0, 0);
+ }
+ else
+ {
+ ret = FALSE;
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ }
+ *lpcchBuffer = size - 1;
+ }
+ HeapFree(GetProcessHeap(), 0, wStr);
+ return ret;
}
/******************************************************************************
--
1.4.1
More information about the wine-patches
mailing list