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/confi…
 ==============================================================================
 --- 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/rpcse…
 ==============================================================================
 --- 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)