Author: janderwald Date: Sat Feb 7 09:43:14 2009 New Revision: 39459
URL: http://svn.reactos.org/svn/reactos?rev=39459&view=rev Log: - Add a hack
Modified: trunk/reactos/base/system/services/config.c trunk/reactos/base/system/services/rpcserver.c
Modified: trunk/reactos/base/system/services/config.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/services/config... ============================================================================== --- trunk/reactos/base/system/services/config.c [iso-8859-1] (original) +++ trunk/reactos/base/system/services/config.c [iso-8859-1] Sat Feb 7 09:43:14 2009 @@ -289,7 +289,7 @@ *lpValue = ptr; }
-done:; +done: if (dwError != ERROR_SUCCESS) { HeapFree(GetProcessHeap(), 0, ptr);
Modified: trunk/reactos/base/system/services/rpcserver.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/services/rpcser... ============================================================================== --- trunk/reactos/base/system/services/rpcserver.c [iso-8859-1] (original) +++ trunk/reactos/base/system/services/rpcserver.c [iso-8859-1] Sat Feb 7 09:43:14 2009 @@ -4012,33 +4012,36 @@
if (InfoW.dwInfoLevel == SERVICE_CONFIG_DESCRIPTION) { - LPSERVICE_DESCRIPTIONW lpServiceDesriptonW; - LPSERVICE_DESCRIPTIONA lpServiceDesriptonA; - - lpServiceDesriptonA = Info.psd; - - if (lpServiceDesriptonA && - lpServiceDesriptonA->lpDescription) - { - dwLength = (strlen(lpServiceDesriptonA->lpDescription) + 1) * sizeof(WCHAR); - - lpServiceDesriptonW = HeapAlloc(GetProcessHeap(), + LPSERVICE_DESCRIPTIONW lpServiceDescriptonW; + LPSERVICE_DESCRIPTIONA lpServiceDescriptonA; + + lpServiceDescriptonA = Info.psd; + + ///if (lpServiceDescriptonA && + ///lpServiceDescriptonA->lpDescription) + ///{ + dwLength = (strlen(Info.lpDescription) + 1) * sizeof(WCHAR); + + lpServiceDescriptonW = HeapAlloc(GetProcessHeap(), 0, dwLength + sizeof(SERVICE_DESCRIPTIONW)); - if (!lpServiceDesriptonW) + if (!lpServiceDescriptonW) { return ERROR_NOT_ENOUGH_MEMORY; }
+ lpServiceDescriptonW->lpDescription = (LPWSTR)(lpServiceDescriptonW + 1); + MultiByteToWideChar(CP_ACP, 0, - lpServiceDesriptonA->lpDescription, + Info.lpDescription, -1, - lpServiceDesriptonW->lpDescription, + lpServiceDescriptonW->lpDescription, dwLength);
- ptr = lpServiceDesriptonW; - } + ptr = lpServiceDescriptonW; + InfoW.psd = lpServiceDescriptonW; + ///} } else if (Info.dwInfoLevel == SERVICE_CONFIG_FAILURE_ACTIONS) { @@ -4162,12 +4165,13 @@ { LPSERVICE_DESCRIPTIONW lpServiceDescription;
- lpServiceDescription = (LPSERVICE_DESCRIPTIONW)&Info; - lpServiceDescription->lpDescription = (LPWSTR)(&Info + sizeof(LPSERVICE_DESCRIPTIONW)); + lpServiceDescription = (LPSERVICE_DESCRIPTIONW)Info.psd; + lpServiceDescription->lpDescription = (LPWSTR)((ULONG_PTR)lpServiceDescription + sizeof(LPSERVICE_DESCRIPTIONW));
if (lpServiceDescription != NULL && lpServiceDescription->lpDescription != NULL) { + DPRINT1("Setting value %S\n", lpServiceDescription->lpDescription); RegSetValueExW(hServiceKey, L"Description", 0, @@ -4212,7 +4216,7 @@ LPWSTR lpDescriptionW = NULL; LPSTR lpDescription = NULL;
- DPRINT("RQueryServiceConfig2W() called\n"); + DPRINT1("RQueryServiceConfig2A() called hService %p dwInfoLevel %u, lpBuffer %p cbBufSize %u pcbBytesNeeded %p\n",hService, dwInfoLevel, lpBuffer, cbBufSize, pcbBytesNeeded);
if (!lpBuffer) return ERROR_INVALID_ADDRESS; @@ -4261,7 +4265,7 @@ &lpDescriptionW); if (dwError == ERROR_SUCCESS) { - *pcbBytesNeeded += ((wcslen(lpDescriptionW) + 1)); + *pcbBytesNeeded += ((wcslen(lpDescriptionW) + 1) * sizeof(WCHAR)); }
if (cbBufSize >= *pcbBytesNeeded)