From 0ce727e433db14225a6d9869b918500461ceb7b2 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 12 Oct 2010 16:37:08 +0200 Subject: [PATCH] shlwapi: Added SKAllocValueW implementation. --- dlls/shlwapi/ordinal.c | 37 +++++++++++++++++++++++++++++++++++++ dlls/shlwapi/shlwapi.spec | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c index 63fffb2ea8f..8cd9eaa3fd0 100644 --- a/dlls/shlwapi/ordinal.c +++ b/dlls/shlwapi/ordinal.c @@ -4603,6 +4603,43 @@ HRESULT WINAPI IUnknown_OnFocusChangeIS(LPUNKNOWN lpUnknown, LPUNKNOWN pFocusObj return hRet; } +/*********************************************************************** + * SKAllocValueW (SHLWAPI.519) + */ +HRESULT WINAPI SKAllocValueW(DWORD flags, LPCWSTR subkey, LPCWSTR value, DWORD *type, + LPVOID *data, DWORD *count) +{ + DWORD ret, size; + HKEY hkey; + + TRACE("(0x%x, %s, %s, %p, %p, %p)\n", flags, debugstr_w(subkey), + debugstr_w(value), type, data, count); + + hkey = SHGetShellKey(flags, subkey, FALSE); + if (!hkey) + return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); + + ret = SHQueryValueExW(hkey, value, NULL, type, NULL, &size); + if (ret) { + RegCloseKey(hkey); + return HRESULT_FROM_WIN32(ret); + } + + size += 2; + *data = LocalAlloc(0, size); + if (!*data) { + RegCloseKey(hkey); + return E_OUTOFMEMORY; + } + + ret = SHQueryValueExW(hkey, value, NULL, type, *data, &size); + if (count) + *count = size; + + RegCloseKey(hkey); + return HRESULT_FROM_WIN32(ret); +} + /*********************************************************************** * SKGetValueW (SHLWAPI.516) */ diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec index 53dc25008e1..dcd99896f90 100644 --- a/dlls/shlwapi/shlwapi.spec +++ b/dlls/shlwapi/shlwapi.spec @@ -512,7 +512,7 @@ 516 stdcall -noname SKGetValueW(long wstr wstr long long long) 517 stub -noname SKSetValueW 518 stub -noname SKDeleteValueW -519 stub -noname SKAllocValueW +519 stdcall -noname SKAllocValueW(long wstr wstr ptr ptr ptr) 520 stub -noname SHPropertyBag_ReadBSTR 521 stub -noname SHPropertyBag_ReadPOINTL 522 stub -noname SHPropertyBag_WritePOINTL