Piotr Caban : shlwapi: Added SKAllocValueW implementation.

Alexandre Julliard julliard at winehq.org
Tue Oct 12 11:27:02 CDT 2010


Module: wine
Branch: master
Commit: 0ce727e433db14225a6d9869b918500461ceb7b2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0ce727e433db14225a6d9869b918500461ceb7b2

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Oct 12 16:37:08 2010 +0200

shlwapi: Added SKAllocValueW implementation.

---

 dlls/shlwapi/ordinal.c    |   37 +++++++++++++++++++++++++++++++++++++
 dlls/shlwapi/shlwapi.spec |    2 +-
 2 files changed, 38 insertions(+), 1 deletions(-)

diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c
index 63fffb2..8cd9eaa 100644
--- a/dlls/shlwapi/ordinal.c
+++ b/dlls/shlwapi/ordinal.c
@@ -4604,6 +4604,43 @@ HRESULT WINAPI IUnknown_OnFocusChangeIS(LPUNKNOWN lpUnknown, LPUNKNOWN pFocusObj
 }
 
 /***********************************************************************
+ *		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)
  */
 HRESULT WINAPI SKGetValueW(DWORD flags, LPCWSTR subkey, LPCWSTR value, DWORD *type,
diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec
index 53dc250..dcd9989 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




More information about the wine-cvs mailing list