Mariusz Pluciński : shell32: Add IKnownFolder:: GetFolderDefinition() implementation.

Alexandre Julliard julliard at winehq.org
Tue Jul 19 12:42:56 CDT 2011


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

Author: Mariusz Pluciński <vshader at gmail.com>
Date:   Tue Jul 19 16:19:28 2011 +0200

shell32: Add IKnownFolder::GetFolderDefinition() implementation.

---

 dlls/shell32/shellpath.c |   39 ++++++++++++++++++++++++++++++++++-----
 1 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c
index 4407056..13d50e0 100644
--- a/dlls/shell32/shellpath.c
+++ b/dlls/shell32/shellpath.c
@@ -3175,6 +3175,15 @@ static HRESULT get_known_folder_redirection_place(
 
 static HRESULT get_known_folder_path_by_id(REFKNOWNFOLDERID folderId, LPWSTR lpRegistryPath, DWORD dwFlags, LPWSTR *ppszPath);
 
+static HRESULT get_known_folder_category(
+    LPWSTR registryPath,
+    KF_CATEGORY* pCategory)
+{
+    DWORD dwSize = sizeof(DWORD);
+    DWORD dwType;
+    return HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE, registryPath, szCategory, RRF_RT_DWORD, &dwType, pCategory, &dwSize));
+}
+
 static HRESULT redirect_known_folder(
     REFKNOWNFOLDERID rfid,
     HWND hwnd,
@@ -3372,8 +3381,6 @@ static HRESULT WINAPI knownfolder_GetCategory(
 {
     struct knownfolder *knownfolder = impl_from_IKnownFolder(iface);
     HRESULT hr = S_OK;
-    DWORD dwSize = sizeof(DWORD);
-    DWORD dwType;
 
     TRACE("%p, %p\n", knownfolder, pCategory);
 
@@ -3382,7 +3389,7 @@ static HRESULT WINAPI knownfolder_GetCategory(
         hr = E_FAIL;
 
     if(SUCCEEDED(hr))
-        hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE, knownfolder->registryPath, szCategory, RRF_RT_DWORD, &dwType, pCategory, &dwSize));
+        hr = get_known_folder_category(knownfolder->registryPath, pCategory);
 
     return hr;
 }
@@ -3585,8 +3592,30 @@ static HRESULT WINAPI knownfolder_GetFolderDefinition(
     IKnownFolder *iface,
     KNOWNFOLDER_DEFINITION *pKFD)
 {
-    FIXME("%p\n", pKFD);
-    return E_NOTIMPL;
+    struct knownfolder *knownfolder = impl_from_IKnownFolder( iface );
+    HRESULT hr;
+    DWORD dwSize;
+    TRACE("(%p, %p)\n", knownfolder, pKFD);
+
+    if(!pKFD) return E_INVALIDARG;
+
+    ZeroMemory(pKFD, sizeof(*pKFD));
+
+    hr = get_known_folder_category(knownfolder->registryPath, &pKFD->category);
+
+    if(SUCCEEDED(hr))
+        hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE, knownfolder->registryPath, szName, RRF_RT_REG_SZ, NULL, NULL, &dwSize));
+
+    if(SUCCEEDED(hr))
+    {
+        pKFD->pszName = CoTaskMemAlloc(dwSize);
+        if(!pKFD->pszName) hr = E_OUTOFMEMORY;
+    }
+
+    if(SUCCEEDED(hr))
+        hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE, knownfolder->registryPath, szName, RRF_RT_REG_SZ, NULL, pKFD->pszName, &dwSize));
+
+    return hr;
 }
 
 static const struct IKnownFolderVtbl knownfolder_vtbl =




More information about the wine-cvs mailing list