You did not commit that, Joachim Henze did.

On Mon, 17 Dec 2018 at 22:28, katahiromz <katayama.hirofumi...@gmail.com>
wrote:

> Schweitzer,
>
> I will revert it tomorrow.
> Sorry for inconvenience.
>
> Best regards
> 片山博文MZ
>
> 2018年12月18日(火) 6:19、Pierre Schweitzer さん(pie...@reactos.org)のメッセージ:
>
>> Hi,
>>
>> I definitely don't like that commit, nor appreciate the way it was done.
>> If we read CORE-15412 carefully, we have three developers (namely:
>> Thomas, Mark, Giannis) expressing that they are again this revert, and
>> thus this commit.
>> Then, why was it pushed to HEAD?
>>
>> Cheers,
>> Pierre
>>
>> Le 17/12/2018 à 22:02, Joachim Henze a écrit :
>> >
>> https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6f8cb05cad142a8679872e695f317dc1f9728d55
>> >
>> > commit 6f8cb05cad142a8679872e695f317dc1f9728d55
>> > Author:     Joachim Henze <joachim.he...@reactos.org>
>> > AuthorDate: Mon Dec 17 22:01:49 2018 +0100
>> > Commit:     Joachim Henze <joachim.he...@reactos.org>
>> > CommitDate: Mon Dec 17 22:01:49 2018 +0100
>> >
>> >     [DESK][SHELL32] Allow Desk.cpl to run standalone on WinXP/2003
>> again CORE-15412
>> >
>> >     addendum to 0.4.10-dev-502-g
>> >     d559ca9c982f9766acc5db3ea887ef2bc27acdff
>> >
>> >     That copy-paste was done once intentionally to keep our imports
>> similar to 2003.
>> >     It's worth reading the conversation in PR #748: Getequ seems to be
>> ok with this.
>> >
>> >     The ideal solution most likely would be to instead *statically*
>> >     link against RegLoadMUIStringW() from advapi32_vista when
>> WINNT=0x502.
>> >     For now the stuff runs again at least.
>> >     I left the func existing in advapi32_vista.dll.
>> > ---
>> >  dll/cpl/desk/CMakeLists.txt      |   6 +-
>> >  dll/cpl/desk/desk.h              |   9 ++
>> >  dll/cpl/desk/muireg.c            | 144 ++++++++++++++++++++++++++
>> >  dll/win32/shell32/CMakeLists.txt |   3 +-
>> >  dll/win32/shell32/vista.c        | 218
>> +++++++++++++++++++++++++++++++++++++++
>> >  5 files changed, 375 insertions(+), 5 deletions(-)
>> >
>> > diff --git a/dll/cpl/desk/CMakeLists.txt b/dll/cpl/desk/CMakeLists.txt
>> > index 24d9bb1e60..ae7fb83825 100644
>> > --- a/dll/cpl/desk/CMakeLists.txt
>> > +++ b/dll/cpl/desk/CMakeLists.txt
>> > @@ -2,9 +2,6 @@
>> >  add_definitions(-D_WIN32)
>> >  spec2def(desk.cpl desk.spec)
>> >
>> > -remove_definitions(-D_WIN32_WINNT=0x502)
>> > -add_definitions(-D_WIN32_WINNT=0x600)
>> > -
>> >  list(APPEND SOURCE
>> >      advmon.c
>> >      appearance.c
>> > @@ -23,6 +20,7 @@ list(APPEND SOURCE
>> >      general.c
>> >      draw.c
>> >      theme.c
>> > +    muireg.c
>> >      desk.h)
>> >
>> >  file(GLOB desk_rc_deps resources/*.*)
>> > @@ -36,6 +34,6 @@ add_library(desk SHARED
>> >
>> >  set_module_type(desk cpl UNICODE)
>> >  target_link_libraries(desk uuid)
>> > -add_importlibs(desk user32 advapi32 advapi32_vista gdi32 comctl32
>> comdlg32 ole32 setupapi shell32 shlwapi uxtheme gdiplus msvcrt kernel32
>> ntdll)
>> > +add_importlibs(desk user32 advapi32 gdi32 comctl32 comdlg32 ole32
>> setupapi shell32 shlwapi uxtheme gdiplus msvcrt kernel32 ntdll)
>> >  add_pch(desk desk.h SOURCE)
>> >  add_cd_file(TARGET desk DESTINATION reactos/system32 FOR all)
>> > diff --git a/dll/cpl/desk/desk.h b/dll/cpl/desk/desk.h
>> > index 3bb02f3a74..3c479251cf 100644
>> > --- a/dll/cpl/desk/desk.h
>> > +++ b/dll/cpl/desk/desk.h
>> > @@ -122,4 +122,13 @@ HPSXA WINAPI
>> SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*);
>> >  INT_PTR CALLBACK
>> >  AdvGeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
>> lParam);
>> >
>> > +LONG
>> > +RegLoadMUIStringW(IN HKEY hKey,
>> > +                  IN LPCWSTR pszValue  OPTIONAL,
>> > +                  OUT LPWSTR pszOutBuf,
>> > +                  IN DWORD cbOutBuf,
>> > +                  OUT LPDWORD pcbData OPTIONAL,
>> > +                  IN DWORD Flags,
>> > +                  IN LPCWSTR pszDirectory  OPTIONAL);
>> > +
>> >  #endif /* _DESK_H */
>> > diff --git a/dll/cpl/desk/muireg.c b/dll/cpl/desk/muireg.c
>> > new file mode 100644
>> > index 0000000000..8754b43655
>> > --- /dev/null
>> > +++ b/dll/cpl/desk/muireg.c
>> > @@ -0,0 +1,144 @@
>> > +#include "desk.h"
>> > +
>> >
>> +/******************************************************************************
>> > + * load_string [Internal]
>> > + *
>> > + * This is basically a copy of user32/resource.c's LoadStringW.
>> Necessary to
>> > + * avoid importing user32, which is higher level than advapi32. Helper
>> for
>> > + * RegLoadMUIString.
>> > + */
>> > +static int load_string(HINSTANCE hModule, UINT resId, LPWSTR
>> pwszBuffer, INT cMaxChars)
>> > +{
>> > +    HGLOBAL hMemory;
>> > +    HRSRC hResource;
>> > +    WCHAR *pString;
>> > +    int idxString;
>> > +
>> > +    /* Negative values have to be inverted. */
>> > +    if (HIWORD(resId) == 0xffff)
>> > +        resId = (UINT)(-((INT)resId));
>> > +
>> > +    /* Load the resource into memory and get a pointer to it. */
>> > +    hResource = FindResourceW(hModule, MAKEINTRESOURCEW(LOWORD(resId
>> >> 4) + 1), (LPWSTR)RT_STRING);
>> > +    if (!hResource) return 0;
>> > +    hMemory = LoadResource(hModule, hResource);
>> > +    if (!hMemory) return 0;
>> > +    pString = LockResource(hMemory);
>> > +
>> > +    /* Strings are length-prefixed. Lowest nibble of resId is an
>> index. */
>> > +    idxString = resId & 0xf;
>> > +    while (idxString--) pString += *pString + 1;
>> > +
>> > +    /* If no buffer is given, return length of the string. */
>> > +    if (!pwszBuffer) return *pString;
>> > +
>> > +    /* Else copy over the string, respecting the buffer size. */
>> > +    cMaxChars = (*pString < cMaxChars) ? *pString : (cMaxChars - 1);
>> > +    if (cMaxChars >= 0)
>> > +    {
>> > +        memcpy(pwszBuffer, pString+1, cMaxChars * sizeof(WCHAR));
>> > +        pwszBuffer[cMaxChars] = L'\0';
>> > +    }
>> > +
>> > +    return cMaxChars;
>> > +}
>> > +
>> > +
>> >
>> +/************************************************************************
>> > + *  RegLoadMUIStringW
>> > + *
>> > + * @implemented
>> > + */
>> > +LONG
>> > +RegLoadMUIStringW(IN HKEY hKey,
>> > +                  IN LPCWSTR pszValue  OPTIONAL,
>> > +                  OUT LPWSTR pszOutBuf,
>> > +                  IN DWORD cbOutBuf,
>> > +                  OUT LPDWORD pcbData OPTIONAL,
>> > +                  IN DWORD Flags,
>> > +                  IN LPCWSTR pszDirectory  OPTIONAL)
>> > +{
>> > +    DWORD dwValueType, cbData;
>> > +    LPWSTR pwszTempBuffer = NULL, pwszExpandedBuffer = NULL;
>> > +    LONG result;
>> > +
>> > +    /* Parameter sanity checks. */
>> > +    if (!hKey || !pszOutBuf)
>> > +        return ERROR_INVALID_PARAMETER;
>> > +
>> > +    if (pszDirectory && *pszDirectory)
>> > +    {
>> > +        //FIXME("BaseDir parameter not yet supported!\n");
>> > +        return ERROR_INVALID_PARAMETER;
>> > +    }
>> > +
>> > +    /* Check for value existence and correctness of it's type,
>> allocate a buffer and load it. */
>> > +    result = RegQueryValueExW(hKey, pszValue, NULL, &dwValueType,
>> NULL, &cbData);
>> > +    if (result != ERROR_SUCCESS) goto cleanup;
>> > +    if (!(dwValueType == REG_SZ || dwValueType == REG_EXPAND_SZ) ||
>> !cbData)
>> > +    {
>> > +        result = ERROR_FILE_NOT_FOUND;
>> > +        goto cleanup;
>> > +    }
>> > +    pwszTempBuffer = HeapAlloc(GetProcessHeap(), 0, cbData);
>> > +    if (!pwszTempBuffer)
>> > +    {
>> > +        result = ERROR_NOT_ENOUGH_MEMORY;
>> > +        goto cleanup;
>> > +    }
>> > +    result = RegQueryValueExW(hKey, pszValue, NULL, &dwValueType,
>> (LPBYTE)pwszTempBuffer, &cbData);
>> > +    if (result != ERROR_SUCCESS) goto cleanup;
>> > +
>> > +    /* Expand environment variables, if appropriate, or copy the
>> original string over. */
>> > +    if (dwValueType == REG_EXPAND_SZ)
>> > +    {
>> > +        cbData = ExpandEnvironmentStringsW(pwszTempBuffer, NULL, 0) *
>> sizeof(WCHAR);
>> > +        if (!cbData) goto cleanup;
>> > +        pwszExpandedBuffer = HeapAlloc(GetProcessHeap(), 0, cbData);
>> > +        if (!pwszExpandedBuffer)
>> > +        {
>> > +            result = ERROR_NOT_ENOUGH_MEMORY;
>> > +            goto cleanup;
>> > +        }
>> > +        ExpandEnvironmentStringsW(pwszTempBuffer, pwszExpandedBuffer,
>> cbData);
>> > +    }
>> > +    else
>> > +    {
>> > +        pwszExpandedBuffer = HeapAlloc(GetProcessHeap(), 0, cbData);
>> > +        memcpy(pwszExpandedBuffer, pwszTempBuffer, cbData);
>> > +    }
>> > +
>> > +    /* If the value references a resource based string, parse the
>> value and load the string.
>> > +     * Else just copy over the original value. */
>> > +    result = ERROR_SUCCESS;
>> > +    if (*pwszExpandedBuffer != L'@') /* '@' is the prefix for
>> resource based string entries. */
>> > +    {
>> > +        lstrcpynW(pszOutBuf, pwszExpandedBuffer, cbOutBuf /
>> sizeof(WCHAR));
>> > +    }
>> > +    else
>> > +    {
>> > +        WCHAR *pComma = wcsrchr(pwszExpandedBuffer, L',');
>> > +        UINT uiStringId;
>> > +        HMODULE hModule;
>> > +
>> > +        /* Format of the expanded value is 'path_to_dll,-resId' */
>> > +        if (!pComma || pComma[1] != L'-')
>> > +        {
>> > +            result = ERROR_BADKEY;
>> > +            goto cleanup;
>> > +        }
>> > +
>> > +        uiStringId = _wtoi(pComma+2);
>> > +        *pComma = L'\0';
>> > +
>> > +        hModule = LoadLibraryExW(pwszExpandedBuffer + 1, NULL,
>> LOAD_LIBRARY_AS_DATAFILE);
>> > +        if (!hModule || !load_string(hModule, uiStringId, pszOutBuf,
>> cbOutBuf / sizeof(WCHAR)))
>> > +            result = ERROR_BADKEY;
>> > +        FreeLibrary(hModule);
>> > +    }
>> > +
>> > +cleanup:
>> > +    HeapFree(GetProcessHeap(), 0, pwszTempBuffer);
>> > +    HeapFree(GetProcessHeap(), 0, pwszExpandedBuffer);
>> > +    return result;
>> > +}
>> > diff --git a/dll/win32/shell32/CMakeLists.txt
>> b/dll/win32/shell32/CMakeLists.txt
>> > index 08933dda35..78ee1af531 100644
>> > --- a/dll/win32/shell32/CMakeLists.txt
>> > +++ b/dll/win32/shell32/CMakeLists.txt
>> > @@ -102,6 +102,7 @@ add_library(shell32 SHARED
>> >      wine/shellstring.c
>> >      wine/shlmenu.c
>> >      wine/shpolicy.c
>> > +    vista.c
>> >      shell32.rc
>> >      ${CMAKE_CURRENT_BINARY_DIR}/shell32_stubs.c
>> >      ${CMAKE_CURRENT_BINARY_DIR}/shell32.def)
>> > @@ -113,7 +114,7 @@ set_source_files_properties(shell32.rc PROPERTIES
>> OBJECT_DEPENDS ${CMAKE_CURRENT
>> >  set_module_type(shell32 win32dll UNICODE)
>> >  target_link_libraries(shell32 shellmenu shelldesktop atlnew wine uuid
>> recyclebin)
>> >  add_delay_importlibs(shell32 powrprof shdocvw devmgr winspool.drv
>> winmm mpr uxtheme ole32 oleaut32 userenv browseui version fmifs)
>> > -add_importlibs(shell32 advapi32 advapi32_vista gdi32 user32 comctl32
>> comdlg32 shlwapi msvcrt kernel32 ntdll)
>> > +add_importlibs(shell32 advapi32 gdi32 user32 comctl32 comdlg32 shlwapi
>> msvcrt kernel32 ntdll)
>> >  add_dependencies(shell32 stdole2) # shell32_shldisp.tlb needs
>> stdole2.tlb
>> >  add_pch(shell32 precomp.h SOURCE)
>> >  add_cd_file(TARGET shell32 DESTINATION reactos/system32 FOR all)
>> > diff --git a/dll/win32/shell32/vista.c b/dll/win32/shell32/vista.c
>> > new file mode 100644
>> > index 0000000000..9f1a8335a3
>> > --- /dev/null
>> > +++ b/dll/win32/shell32/vista.c
>> > @@ -0,0 +1,218 @@
>> > +/*
>> > + * COPYRIGHT:       See COPYING in the top level directory
>> > + * PROJECT:         ReactOS system libraries
>> > + * FILE:            Copied from advapi32/reg/reg.c
>> > + * PURPOSE:         Registry functions
>> > + * PROGRAMMER:      Ariadne ( aria...@xs4all.nl)
>> > + *                  Thomas Weidenmueller <w3s...@reactos.com>
>> > + * UPDATE HISTORY:
>> > + *                  Created 01/11/98
>> > + *                  19990309 EA Stubs
>> > + *                  20050502 Fireball imported some stuff from WINE
>> > + */
>> > +
>> > +#include <stdarg.h>
>> > +
>> > +#define WIN32_NO_STATUS
>> > +#define _INC_WINDOWS
>> > +#define COM_NO_WINDOWS_H
>> > +
>> > +#include <windef.h>
>> > +#include <winbase.h>
>> > +#include <winreg.h>
>> > +#include <winuser.h>
>> > +#define NTOS_MODE_USER
>> > +#include <ndk/rtlfuncs.h>
>> > +
>> > +#include <wine/debug.h>
>> > +#include <wine/unicode.h>
>> > +
>> > +WINE_DEFAULT_DEBUG_CHANNEL(shell);
>> > +
>> >
>> +/******************************************************************************
>> > + * load_string [Internal]
>> > + *
>> > + * This is basically a copy of user32/resource.c's LoadStringW.
>> Necessary to
>> > + * avoid importing user32, which is higher level than advapi32. Helper
>> for
>> > + * RegLoadMUIString.
>> > + */
>> > +static int load_string(HINSTANCE hModule, UINT resId, LPWSTR
>> pwszBuffer, INT cMaxChars)
>> > +{
>> > +    HGLOBAL hMemory;
>> > +    HRSRC hResource;
>> > +    WCHAR *pString;
>> > +    int idxString;
>> > +
>> > +    /* Negative values have to be inverted. */
>> > +    if (HIWORD(resId) == 0xffff)
>> > +        resId = (UINT)(-((INT)resId));
>> > +
>> > +    /* Load the resource into memory and get a pointer to it. */
>> > +    hResource = FindResourceW(hModule, MAKEINTRESOURCEW(LOWORD(resId
>> >> 4) + 1), (LPWSTR)RT_STRING);
>> > +    if (!hResource) return 0;
>> > +    hMemory = LoadResource(hModule, hResource);
>> > +    if (!hMemory) return 0;
>> > +    pString = LockResource(hMemory);
>> > +
>> > +    /* Strings are length-prefixed. Lowest nibble of resId is an
>> index. */
>> > +    idxString = resId & 0xf;
>> > +    while (idxString--) pString += *pString + 1;
>> > +
>> > +    /* If no buffer is given, return length of the string. */
>> > +    if (!pwszBuffer) return *pString;
>> > +
>> > +    /* Else copy over the string, respecting the buffer size. */
>> > +    cMaxChars = (*pString < cMaxChars) ? *pString : (cMaxChars - 1);
>> > +    if (cMaxChars >= 0)
>> > +    {
>> > +        memcpy(pwszBuffer, pString+1, cMaxChars * sizeof(WCHAR));
>> > +        pwszBuffer[cMaxChars] = L'\0';
>> > +    }
>> > +
>> > +    return cMaxChars;
>> > +}
>> > +
>> >
>> +/************************************************************************
>> > + *  RegLoadMUIStringW
>> > + *
>> > + * @implemented
>> > + */
>> > +LONG WINAPI
>> > +RegLoadMUIStringW(IN HKEY hKey,
>> > +                  IN LPCWSTR pszValue  OPTIONAL,
>> > +                  OUT LPWSTR pszOutBuf,
>> > +                  IN DWORD cbOutBuf,
>> > +                  OUT LPDWORD pcbData OPTIONAL,
>> > +                  IN DWORD Flags,
>> > +                  IN LPCWSTR pszDirectory  OPTIONAL)
>> > +{
>> > +    DWORD dwValueType, cbData;
>> > +    LPWSTR pwszTempBuffer = NULL, pwszExpandedBuffer = NULL;
>> > +    LONG result;
>> > +
>> > +    /* Parameter sanity checks. */
>> > +    if (!hKey || !pszOutBuf)
>> > +        return ERROR_INVALID_PARAMETER;
>> > +
>> > +    if (pszDirectory && *pszDirectory)
>> > +    {
>> > +        FIXME("BaseDir parameter not yet supported!\n");
>> > +        return ERROR_INVALID_PARAMETER;
>> > +    }
>> > +
>> > +    /* Check for value existence and correctness of it's type,
>> allocate a buffer and load it. */
>> > +    result = RegQueryValueExW(hKey, pszValue, NULL, &dwValueType,
>> NULL, &cbData);
>> > +    if (result != ERROR_SUCCESS) goto cleanup;
>> > +    if (!(dwValueType == REG_SZ || dwValueType == REG_EXPAND_SZ) ||
>> !cbData)
>> > +    {
>> > +        result = ERROR_FILE_NOT_FOUND;
>> > +        goto cleanup;
>> > +    }
>> > +    pwszTempBuffer = HeapAlloc(GetProcessHeap(), 0, cbData);
>> > +    if (!pwszTempBuffer)
>> > +    {
>> > +        result = ERROR_NOT_ENOUGH_MEMORY;
>> > +        goto cleanup;
>> > +    }
>> > +    result = RegQueryValueExW(hKey, pszValue, NULL, &dwValueType,
>> (LPBYTE)pwszTempBuffer, &cbData);
>> > +    if (result != ERROR_SUCCESS) goto cleanup;
>> > +
>> > +    /* Expand environment variables, if appropriate, or copy the
>> original string over. */
>> > +    if (dwValueType == REG_EXPAND_SZ)
>> > +    {
>> > +        cbData = ExpandEnvironmentStringsW(pwszTempBuffer, NULL, 0) *
>> sizeof(WCHAR);
>> > +        if (!cbData) goto cleanup;
>> > +        pwszExpandedBuffer = HeapAlloc(GetProcessHeap(), 0, cbData);
>> > +        if (!pwszExpandedBuffer)
>> > +        {
>> > +            result = ERROR_NOT_ENOUGH_MEMORY;
>> > +            goto cleanup;
>> > +        }
>> > +        ExpandEnvironmentStringsW(pwszTempBuffer, pwszExpandedBuffer,
>> cbData);
>> > +    }
>> > +    else
>> > +    {
>> > +        pwszExpandedBuffer = HeapAlloc(GetProcessHeap(), 0, cbData);
>> > +        memcpy(pwszExpandedBuffer, pwszTempBuffer, cbData);
>> > +    }
>> > +
>> > +    /* If the value references a resource based string, parse the
>> value and load the string.
>> > +     * Else just copy over the original value. */
>> > +    result = ERROR_SUCCESS;
>> > +    if (*pwszExpandedBuffer != L'@') /* '@' is the prefix for
>> resource based string entries. */
>> > +    {
>> > +        lstrcpynW(pszOutBuf, pwszExpandedBuffer, cbOutBuf /
>> sizeof(WCHAR));
>> > +    }
>> > +    else
>> > +    {
>> > +        WCHAR *pComma = wcsrchr(pwszExpandedBuffer, L',');
>> > +        UINT uiStringId;
>> > +        HMODULE hModule;
>> > +
>> > +        /* Format of the expanded value is 'path_to_dll,-resId' */
>> > +        if (!pComma || pComma[1] != L'-')
>> > +        {
>> > +            result = ERROR_BADKEY;
>> > +            goto cleanup;
>> > +        }
>> > +
>> > +        uiStringId = _wtoi(pComma+2);
>> > +        *pComma = L'\0';
>> > +
>> > +        hModule = LoadLibraryExW(pwszExpandedBuffer + 1, NULL,
>> LOAD_LIBRARY_AS_DATAFILE);
>> > +        if (!hModule || !load_string(hModule, uiStringId, pszOutBuf,
>> cbOutBuf / sizeof(WCHAR)))
>> > +            result = ERROR_BADKEY;
>> > +        FreeLibrary(hModule);
>> > +    }
>> > +
>> > +cleanup:
>> > +    HeapFree(GetProcessHeap(), 0, pwszTempBuffer);
>> > +    HeapFree(GetProcessHeap(), 0, pwszExpandedBuffer);
>> > +    return result;
>> > +}
>> > +
>> >
>> +/************************************************************************
>> > + *  RegLoadMUIStringA
>> > + *
>> > + * @implemented
>> > + */
>> > +LONG WINAPI
>> > +RegLoadMUIStringA(IN HKEY hKey,
>> > +                  IN LPCSTR pszValue  OPTIONAL,
>> > +                  OUT LPSTR pszOutBuf,
>> > +                  IN DWORD cbOutBuf,
>> > +                  OUT LPDWORD pcbData OPTIONAL,
>> > +                  IN DWORD Flags,
>> > +                  IN LPCSTR pszDirectory  OPTIONAL)
>> > +{
>> > +    UNICODE_STRING valueW, baseDirW;
>> > +    WCHAR *pwszBuffer;
>> > +    DWORD cbData = cbOutBuf * sizeof(WCHAR);
>> > +    LONG result;
>> > +
>> > +    valueW.Buffer = baseDirW.Buffer = pwszBuffer = NULL;
>> > +    if (!RtlCreateUnicodeStringFromAsciiz(&valueW, pszValue) ||
>> > +        !RtlCreateUnicodeStringFromAsciiz(&baseDirW, pszDirectory) ||
>> > +        !(pwszBuffer = HeapAlloc(GetProcessHeap(), 0, cbData)))
>> > +    {
>> > +        result = ERROR_NOT_ENOUGH_MEMORY;
>> > +        goto cleanup;
>> > +    }
>> > +
>> > +    result = RegLoadMUIStringW(hKey, valueW.Buffer, pwszBuffer,
>> cbData, NULL, Flags,
>> > +                               baseDirW.Buffer);
>> > +
>> > +    if (result == ERROR_SUCCESS)
>> > +    {
>> > +        cbData = WideCharToMultiByte(CP_ACP, 0, pwszBuffer, -1,
>> pszOutBuf, cbOutBuf, NULL, NULL);
>> > +        if (pcbData)
>> > +            *pcbData = cbData;
>> > +    }
>> > +
>> > +cleanup:
>> > +    HeapFree(GetProcessHeap(), 0, pwszBuffer);
>> > +    RtlFreeUnicodeString(&baseDirW);
>> > +    RtlFreeUnicodeString(&valueW);
>> > +
>> > +    return result;
>> > +}
>> >
>>
>>
>> --
>> Pierre Schweitzer <pierre at reactos.org>
>> System & Network Administrator
>> Senior Kernel Developer
>> ReactOS Deutschland e.V.
>>
>> _______________________________________________
>> Ros-dev mailing list
>> Ros-dev@reactos.org
>> http://reactos.org/mailman/listinfo/ros-dev
>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev@reactos.org
> http://reactos.org/mailman/listinfo/ros-dev
_______________________________________________
Ros-dev mailing list
Ros-dev@reactos.org
http://reactos.org/mailman/listinfo/ros-dev

Reply via email to