[PATCH 4/4] shell32: Install knownfolders to registry during DLL registration

Andrew Eikum aeikum at codeweavers.com
Tue Mar 17 10:03:23 CDT 2015


---
 dlls/shell32/shellpath.c       | 258 ++++++++++++++++++++++++++++++++++-------
 dlls/shell32/tests/shellpath.c | 210 +++++++++++++++++----------------
 2 files changed, 322 insertions(+), 146 deletions(-)

diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c
index f43b0ed..aaa27d8 100644
--- a/dlls/shell32/shellpath.c
+++ b/dlls/shell32/shellpath.c
@@ -812,6 +812,7 @@ static const WCHAR Local_Settings_Temporary_Internet_FilesW[] = {'L','o','c','a'
 static const WCHAR Microsoft_Windows_GameExplorerW[] = {'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','G','a','m','e','E','x','p','l','o','r','e','r','\0'};
 static const WCHAR Microsoft_Windows_LibrariesW[] = {'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','L','i','b','r','a','r','i','e','s','\0'};
 static const WCHAR Microsoft_Windows_RingtonesW[] = {'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','R','i','n','g','t','o','n','e','s','\0'};
+static const WCHAR Microsoft_Windows_Start_MenuW[] = {'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','S','t','a','r','t',' ','M','e','n','u',0};
 static const WCHAR MusicW[] = {'M','u','s','i','c','\0'};
 static const WCHAR Music_PlaylistsW[] = {'M','u','s','i','c','\\','P','l','a','y','l','i','s','t','s','\0'};
 static const WCHAR Music_Sample_MusicW[] = {'M','u','s','i','c','\\','S','a','m','p','l','e',' ','M','u','s','i','c','\0'};
@@ -827,9 +828,11 @@ static const WCHAR Pictures_Sample_PicturesW[] = {'P','i','c','t','u','r','e','s
 static const WCHAR Pictures_Slide_ShowsW[] = {'P','i','c','t','u','r','e','s','\\','S','l','i','d','e',' ','S','h','o','w','s','\0'};
 static const WCHAR PrintHoodW[] = {'P','r','i','n','t','H','o','o','d','\0'};
 static const WCHAR Program_FilesW[] = {'P','r','o','g','r','a','m',' ','F','i','l','e','s','\0'};
+static const WCHAR ProgramFilesW[] = {'P','r','o','g','r','a','m','F','i','l','e','s','\0'};
 static const WCHAR Program_Files_Common_FilesW[] = {'P','r','o','g','r','a','m',' ','F','i','l','e','s','\\','C','o','m','m','o','n',' ','F','i','l','e','s','\0'};
 static const WCHAR Program_Files_x86W[] = {'P','r','o','g','r','a','m',' ','F','i','l','e','s',' ','(','x','8','6',')','\0'};
 static const WCHAR Program_Files_x86_Common_FilesW[] = {'P','r','o','g','r','a','m',' ','F','i','l','e','s',' ','(','x','8','6',')','\\','C','o','m','m','o','n',' ','F','i','l','e','s','\0'};
+static const WCHAR ProgramFilesCommonW[] = {'P','r','o','g','r','a','m','F','i','l','e','s','C','o','m','m','o','n',0};
 static const WCHAR ProgramFilesDirW[] = {'P','r','o','g','r','a','m','F','i','l','e','s','D','i','r','\0'};
 static const WCHAR ProgramFilesDirX86W[] = {'P','r','o','g','r','a','m','F','i','l','e','s','D','i','r',' ','(','x','8','6',')','\0'};
 static const WCHAR ProgramsW[] = {'P','r','o','g','r','a','m','s','\0'};
@@ -843,11 +846,13 @@ static const WCHAR Start_MenuW[] = {'S','t','a','r','t',' ','M','e','n','u','\0'
 static const WCHAR Start_Menu_ProgramsW[] = {'S','t','a','r','t',' ','M','e','n','u','\\','P','r','o','g','r','a','m','s','\0'};
 static const WCHAR Start_Menu_Admin_ToolsW[] = {'S','t','a','r','t',' ','M','e','n','u','\\','P','r','o','g','r','a','m','s','\\','A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'};
 static const WCHAR Start_Menu_StartupW[] = {'S','t','a','r','t',' ','M','e','n','u','\\','P','r','o','g','r','a','m','s','\\','S','t','a','r','t','U','p','\0'};
+static const WCHAR SystemW[] = {'S','y','s','t','e','m',0};
 static const WCHAR TemplatesW[] = {'T','e','m','p','l','a','t','e','s','\0'};
 static const WCHAR UsersW[] = {'U','s','e','r','s','\0'};
 static const WCHAR UsersPublicW[] = {'U','s','e','r','s','\\','P','u','b','l','i','c','\0'};
 static const WCHAR VideosW[] = {'V','i','d','e','o','s','\0'};
 static const WCHAR Videos_Sample_VideosW[] = {'V','i','d','e','o','s','\\','S','a','m','p','l','e',' ','V','i','d','e','o','s','\0'};
+static const WCHAR WindowsW[] = {'W','i','n','d','o','w','s',0};
 static const WCHAR DefaultW[] = {'.','D','e','f','a','u','l','t','\0'};
 static const WCHAR AllUsersProfileW[] = {'%','A','L','L','U','S','E','R','S','P','R','O','F','I','L','E','%','\0'};
 static const WCHAR UserProfileW[] = {'%','U','S','E','R','P','R','O','F','I','L','E','%','\0'};
@@ -886,6 +891,21 @@ typedef struct
     CSIDL_Type type;
     LPCWSTR    szValueName;
     LPCWSTR    szDefaultPath; /* fallback string or resource ID */
+
+    /* KNOWNFOLDER_DEFINITION fields */
+    KF_CATEGORY category;
+    const WCHAR *pszName;
+    const WCHAR *pszDescription;
+    const KNOWNFOLDERID *fidParent;
+    const WCHAR *pszRelativePath;
+    const WCHAR *pszParsingName;
+    const WCHAR *pszTooltip;
+    const WCHAR *pszLocalizedName;
+    const WCHAR *pszIcon;
+    const WCHAR *pszSecurity;
+    DWORD dwAttributes;
+    KF_DEFINITION_FLAGS kfdFlags;
+    const FOLDERTYPEID *ftidType;
 } CSIDL_DATA;
 
 static const CSIDL_DATA CSIDL_Data[] =
@@ -894,7 +914,21 @@ static const CSIDL_DATA CSIDL_Data[] =
         &FOLDERID_Desktop,
         CSIDL_Type_User,
         DesktopW,
-        MAKEINTRESOURCEW(IDS_DESKTOPDIRECTORY)
+        MAKEINTRESOURCEW(IDS_DESKTOPDIRECTORY),
+
+        KF_CATEGORY_PERUSER, /* category */
+        DesktopW, /* name */
+        NULL, /* description */
+        &GUID_NULL, /* parent */
+        DesktopW, /* relative path */
+        NULL, /* parsing */
+        NULL, /* tooltip */
+        NULL, /* localized */
+        NULL, /* icon */
+        NULL, /* security */
+        FILE_ATTRIBUTE_READONLY, /* attributes */
+        0, /* flags */
+        &GUID_NULL /* typeid */
     },
     { /* 0x01 - CSIDL_INTERNET */
         &FOLDERID_InternetFolder,
@@ -1014,7 +1048,21 @@ static const CSIDL_DATA CSIDL_Data[] =
         &FOLDERID_Fonts,
         CSIDL_Type_WindowsPath,
         FontsW,
-        FontsW
+        FontsW,
+
+        KF_CATEGORY_FIXED, /* category */
+        FontsW, /* name */
+        NULL, /* description */
+        &GUID_NULL, /* parent */
+        NULL, /* relative path */
+        NULL, /* parsing */
+        NULL, /* tooltip */
+        NULL, /* localized */
+        NULL, /* icon */
+        NULL, /* security */
+        0, /* attributes */
+        0, /* flags */
+        &FOLDERID_Windows/* typeid */
     },
     { /* 0x15 - CSIDL_TEMPLATES */
         &FOLDERID_Templates,
@@ -1026,13 +1074,41 @@ static const CSIDL_DATA CSIDL_Data[] =
         &FOLDERID_CommonStartMenu,
         CSIDL_Type_AllUsers,
         Common_Start_MenuW,
-        Start_MenuW
+        Start_MenuW,
+
+        KF_CATEGORY_COMMON, /* category */
+        Common_Start_MenuW, /* name */
+        NULL, /* description */
+        &FOLDERID_ProgramData, /* parent */
+        Microsoft_Windows_Start_MenuW, /* relative path */
+        NULL, /* parsing */
+        NULL, /* tooltip */
+        NULL, /* localized */
+        NULL, /* icon */
+        NULL, /* security */
+        FILE_ATTRIBUTE_READONLY, /* attributes */
+        0, /* flags */
+        &GUID_NULL /* typeid */
     },
     { /* 0x17 - CSIDL_COMMON_PROGRAMS */
         &FOLDERID_CommonPrograms,
         CSIDL_Type_AllUsers,
         Common_ProgramsW,
-        Start_Menu_ProgramsW
+        Start_Menu_ProgramsW,
+
+        KF_CATEGORY_COMMON, /* category */
+        Common_ProgramsW, /* name */
+        NULL, /* description */
+        &FOLDERID_CommonStartMenu, /* parent */
+        ProgramsW, /* relative path */
+        NULL, /* parsing */
+        NULL, /* tooltip */
+        NULL, /* localized */
+        NULL, /* icon */
+        NULL, /* security */
+        FILE_ATTRIBUTE_READONLY, /* attributes */
+        0, /* flags */
+        &GUID_NULL /* typeid */
     },
     { /* 0x18 - CSIDL_COMMON_STARTUP */
         &FOLDERID_CommonStartup,
@@ -1104,25 +1180,81 @@ static const CSIDL_DATA CSIDL_Data[] =
         &FOLDERID_ProgramData,
         CSIDL_Type_AllUsers,
         Common_AppDataW,
-        Application_DataW
+        Application_DataW,
+
+        KF_CATEGORY_FIXED, /* category */
+        Common_AppDataW, /* name */
+        NULL, /* description */
+        &GUID_NULL, /* parent */
+        NULL, /* relative path */
+        NULL, /* parsing */
+        NULL, /* tooltip */
+        NULL, /* localized */
+        NULL, /* icon */
+        NULL, /* security */
+        0, /* attributes */
+        0, /* flags */
+        &GUID_NULL /* typeid */
     },
     { /* 0x24 - CSIDL_WINDOWS */
         &FOLDERID_Windows,
         CSIDL_Type_WindowsPath,
         NULL,
-        NULL
+        NULL,
+
+        KF_CATEGORY_FIXED, /* category */
+        WindowsW, /* name */
+        NULL, /* description */
+        &GUID_NULL, /* parent */
+        NULL, /* relative path */
+        NULL, /* parsing */
+        NULL, /* tooltip */
+        NULL, /* localized */
+        NULL, /* icon */
+        NULL, /* security */
+        0, /* attributes */
+        0, /* flags */
+        &GUID_NULL /* typeid */
     },
     { /* 0x25 - CSIDL_SYSTEM */
         &FOLDERID_System,
         CSIDL_Type_SystemPath,
         NULL,
-        NULL
+        NULL,
+
+        KF_CATEGORY_FIXED, /* category */
+        SystemW, /* name */
+        NULL, /* description */
+        &GUID_NULL, /* parent */
+        NULL, /* relative path */
+        NULL, /* parsing */
+        NULL, /* tooltip */
+        NULL, /* localized */
+        NULL, /* icon */
+        NULL, /* security */
+        0, /* attributes */
+        0, /* flags */
+        &GUID_NULL /* typeid */
     },
     { /* 0x26 - CSIDL_PROGRAM_FILES */
         &FOLDERID_ProgramFiles,
         CSIDL_Type_CurrVer,
         ProgramFilesDirW,
-        Program_FilesW
+        Program_FilesW,
+
+        KF_CATEGORY_FIXED, /* category */
+        ProgramFilesW, /* name */
+        NULL, /* description */
+        &GUID_NULL, /* parent */
+        NULL, /* relative path */
+        NULL, /* parsing */
+        NULL, /* tooltip */
+        NULL, /* localized */
+        NULL, /* icon */
+        NULL, /* security */
+        FILE_ATTRIBUTE_READONLY, /* attributes */
+        0, /* flags */
+        &GUID_NULL /* typeid */
     },
     { /* 0x27 - CSIDL_MYPICTURES */
         &FOLDERID_Pictures,
@@ -1152,7 +1284,21 @@ static const CSIDL_DATA CSIDL_Data[] =
         &FOLDERID_ProgramFilesCommon,
         CSIDL_Type_CurrVer,
         CommonFilesDirW,
-        Program_Files_Common_FilesW
+        Program_Files_Common_FilesW,
+
+        KF_CATEGORY_FIXED, /* category */
+        ProgramFilesCommonW, /* name */
+        NULL, /* description */
+        &GUID_NULL, /* parent */
+        NULL, /* relative path */
+        NULL, /* parsing */
+        NULL, /* tooltip */
+        NULL, /* localized */
+        NULL, /* icon */
+        NULL, /* security */
+        0, /* attributes */
+        0, /* flags */
+        &GUID_NULL /* typeid */
     },
     { /* 0x2c - CSIDL_PROGRAM_FILES_COMMONX86 */
         &FOLDERID_ProgramFilesCommonX86,
@@ -2879,32 +3025,6 @@ static HRESULT set_folder_attributes(void)
     return S_OK;
 }
 
-
-/* Register the default values in the registry, as some apps seem to depend
- * on their presence.  The set registered was taken from Windows XP.
- */
-HRESULT SHELL_RegisterShellFolders(void)
-{
-    HRESULT hr;
-
-    /* Set up '$HOME' targeted symlinks for 'My Documents', 'My Pictures',
-     * 'My Videos', 'My Music' and 'Desktop' in advance, so that the
-     * _SHRegister*ShellFolders() functions will find everything nice and clean
-     * and thus will not attempt to create them in the profile directory. */
-    _SHCreateSymbolicLinks();
-    
-    hr = _SHRegisterUserShellFolders(TRUE);
-    if (SUCCEEDED(hr))
-        hr = _SHRegisterUserShellFolders(FALSE);
-    if (SUCCEEDED(hr))
-        hr = _SHRegisterCommonShellFolders();
-    if (SUCCEEDED(hr))
-        hr = create_extra_folders();
-    if (SUCCEEDED(hr))
-        hr = set_folder_attributes();
-    return hr;
-}
-
 /*************************************************************************
  * SHGetSpecialFolderPathA [SHELL32.@]
  */
@@ -3912,16 +4032,12 @@ static HRESULT WINAPI foldermanager_GetFolderByName(
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI foldermanager_RegisterFolder(
-    IKnownFolderManager *iface,
-    REFKNOWNFOLDERID rfid,
-    KNOWNFOLDER_DEFINITION const *pKFD)
+static HRESULT register_folder(const KNOWNFOLDERID *rfid, const KNOWNFOLDER_DEFINITION *pKFD)
 {
     HRESULT hr;
     HKEY hKey = NULL;
     DWORD dwDisp;
     LPWSTR registryPath = NULL;
-    TRACE("(%p, %s, %p)\n", iface, debugstr_guid(rfid), pKFD);
 
     hr = get_known_folder_registry_path(rfid, NULL, &registryPath);
     TRACE("registry path: %s\n", debugstr_w(registryPath));
@@ -3965,6 +4081,15 @@ static HRESULT WINAPI foldermanager_RegisterFolder(
     return hr;
 }
 
+static HRESULT WINAPI foldermanager_RegisterFolder(
+    IKnownFolderManager *iface,
+    REFKNOWNFOLDERID rfid,
+    KNOWNFOLDER_DEFINITION const *pKFD)
+{
+    TRACE("(%p, %s, %p)\n", iface, debugstr_guid(rfid), pKFD);
+    return register_folder(rfid, pKFD);
+}
+
 static HRESULT WINAPI foldermanager_UnregisterFolder(
     IKnownFolderManager *iface,
     REFKNOWNFOLDERID rfid)
@@ -4085,3 +4210,56 @@ HRESULT WINAPI SHGetKnownFolderIDList(REFKNOWNFOLDERID rfid, DWORD flags, HANDLE
         FIXME("%s, 0x%08x, %p, %p\n", debugstr_guid(rfid), flags, token, pidl);
         return E_NOTIMPL;
 }
+
+static void register_system_knownfolders(void)
+{
+    int i;
+    for(i = 0; i < sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0]); ++i){
+        const CSIDL_DATA *folder = &CSIDL_Data[i];
+        if(folder->pszName){
+            KNOWNFOLDER_DEFINITION kfd;
+
+            /* register_folder won't modify kfd, so cast away const instead of
+             * reallocating */
+            kfd.category = folder->category;
+            kfd.pszName = (WCHAR*)folder->pszName;
+            kfd.pszDescription = (WCHAR*)folder->pszDescription;
+            memcpy(&kfd.fidParent, folder->fidParent, sizeof(KNOWNFOLDERID));
+            kfd.pszRelativePath = (WCHAR*)folder->pszRelativePath;
+            kfd.pszParsingName = (WCHAR*)folder->pszParsingName;
+            kfd.pszTooltip = (WCHAR*)folder->pszTooltip;
+            kfd.pszLocalizedName = (WCHAR*)folder->pszLocalizedName;
+            kfd.pszIcon = (WCHAR*)folder->pszIcon;
+            kfd.pszSecurity = (WCHAR*)folder->pszSecurity;
+            kfd.dwAttributes = folder->dwAttributes;
+            kfd.kfdFlags = folder->kfdFlags;
+            memcpy(&kfd.ftidType, folder->ftidType, sizeof(FOLDERTYPEID));
+
+            register_folder(folder->id, &kfd);
+        }
+    }
+}
+
+HRESULT SHELL_RegisterShellFolders(void)
+{
+    HRESULT hr;
+
+    /* Set up '$HOME' targeted symlinks for 'My Documents', 'My Pictures',
+     * 'My Videos', 'My Music' and 'Desktop' in advance, so that the
+     * _SHRegister*ShellFolders() functions will find everything nice and clean
+     * and thus will not attempt to create them in the profile directory. */
+    _SHCreateSymbolicLinks();
+
+    hr = _SHRegisterUserShellFolders(TRUE);
+    if (SUCCEEDED(hr))
+        hr = _SHRegisterUserShellFolders(FALSE);
+    if (SUCCEEDED(hr))
+        hr = _SHRegisterCommonShellFolders();
+    if (SUCCEEDED(hr))
+        hr = create_extra_folders();
+    if (SUCCEEDED(hr))
+        hr = set_folder_attributes();
+    if (SUCCEEDED(hr))
+        register_system_knownfolders();
+    return hr;
+}
diff --git a/dlls/shell32/tests/shellpath.c b/dlls/shell32/tests/shellpath.c
index 7b04238..8c918be 100644
--- a/dlls/shell32/tests/shellpath.c
+++ b/dlls/shell32/tests/shellpath.c
@@ -888,6 +888,7 @@ if (0) { /* crashes */
 /* Standard CSIDL values (and their flags) uses only two less-significant bytes */
 #define NO_CSIDL 0x10000
 #define WINE_ATTRIBUTES_OPTIONAL 0x20000
+#define KFD_TODO_WINE 0x40000
 #define KNOWN_FOLDER(id, csidl, name, category, parent1, parent2, relative_path, parsing_name, attributes, definitionFlags) \
     { &id, # id, csidl, # csidl, name, category, {&parent1, &parent2}, relative_path, parsing_name, attributes, definitionFlags, __LINE__ }
 
@@ -923,7 +924,7 @@ struct knownFolderDef {
  */
 static const struct knownFolderDef known_folders[] = {
     KNOWN_FOLDER(FOLDERID_AddNewPrograms,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "AddNewProgramsFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -933,7 +934,7 @@ static const struct knownFolderDef known_folders[] = {
                 0,
                 0),
     KNOWN_FOLDER(FOLDERID_AdminTools,
-                 CSIDL_ADMINTOOLS,
+                 CSIDL_ADMINTOOLS|KFD_TODO_WINE,
                  "Administrative Tools",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Programs, GUID_NULL,
@@ -942,7 +943,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_AppUpdates,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "AppUpdatesFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -952,7 +953,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_CDBurning,
-                 CSIDL_CDBURN_AREA,
+                 CSIDL_CDBURN_AREA|KFD_TODO_WINE,
                  "CD Burning",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_LocalAppData, GUID_NULL,
@@ -961,7 +962,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_LOCAL_REDIRECT_ONLY),
     KNOWN_FOLDER(FOLDERID_ChangeRemovePrograms,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "ChangeRemoveProgramsFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -971,7 +972,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_CommonAdminTools,
-                 CSIDL_COMMON_ADMINTOOLS,
+                 CSIDL_COMMON_ADMINTOOLS|KFD_TODO_WINE,
                  "Common Administrative Tools",
                  KF_CATEGORY_COMMON,
                  FOLDERID_CommonPrograms, GUID_NULL,
@@ -980,7 +981,8 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_CommonOEMLinks,
-                 CSIDL_COMMON_OEM_LINKS,"OEM Links",
+                 CSIDL_COMMON_OEM_LINKS|KFD_TODO_WINE,
+                 "OEM Links",
                  KF_CATEGORY_COMMON,
                  FOLDERID_ProgramData, GUID_NULL,
                  "OEM Links",
@@ -1006,7 +1008,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_CommonStartup,
-                 CSIDL_COMMON_STARTUP,
+                 CSIDL_COMMON_STARTUP|KFD_TODO_WINE,
                  "Common Startup",
                  KF_CATEGORY_COMMON,
                  FOLDERID_CommonPrograms, GUID_NULL,
@@ -1015,7 +1017,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_CommonTemplates,
-                 CSIDL_COMMON_TEMPLATES,
+                 CSIDL_COMMON_TEMPLATES|KFD_TODO_WINE,
                  "Common Templates",
                  KF_CATEGORY_COMMON,
                  FOLDERID_ProgramData, GUID_NULL,
@@ -1024,7 +1026,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_ComputerFolder,
-                 CSIDL_DRIVES,
+                 CSIDL_DRIVES|KFD_TODO_WINE,
                  "MyComputerFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1033,7 +1035,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_ConflictFolder,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "ConflictFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1043,7 +1045,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_ConnectionsFolder,
-                 CSIDL_CONNECTIONS,
+                 CSIDL_CONNECTIONS|KFD_TODO_WINE,
                  "ConnectionsFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1053,7 +1055,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Contacts,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Contacts",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1062,7 +1064,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
     KNOWN_FOLDER(FOLDERID_ControlPanelFolder,
-                 CSIDL_CONTROLS,
+                 CSIDL_CONTROLS|KFD_TODO_WINE,
                  "ControlPanelFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1072,7 +1074,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Cookies,
-                 CSIDL_COOKIES,
+                 CSIDL_COOKIES|KFD_TODO_WINE,
                  "Cookies",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_RoamingAppData, FOLDERID_LocalAppData,
@@ -1090,7 +1092,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
     KNOWN_FOLDER(FOLDERID_DeviceMetadataStore,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Device Metadata Store",
                  KF_CATEGORY_COMMON,
                  FOLDERID_ProgramData, GUID_NULL,
@@ -1099,7 +1101,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Documents,
-                 CSIDL_MYDOCUMENTS,
+                 CSIDL_MYDOCUMENTS|KFD_TODO_WINE,
                  "Personal",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1108,7 +1110,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_ROAMABLE | KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_DocumentsLibrary,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "DocumentsLibrary",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Libraries, GUID_NULL,
@@ -1117,7 +1119,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_PRECREATE | KFDF_STREAM),
     KNOWN_FOLDER(FOLDERID_Downloads,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Downloads",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1126,7 +1128,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
     KNOWN_FOLDER(FOLDERID_Favorites,
-                 CSIDL_FAVORITES,
+                 CSIDL_FAVORITES|KFD_TODO_WINE,
                  "Favorites",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1144,7 +1146,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Games,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Games",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1153,7 +1155,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_GameTasks,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "GameTasks",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_LocalAppData, GUID_NULL,
@@ -1162,7 +1164,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_LOCAL_REDIRECT_ONLY),
     KNOWN_FOLDER(FOLDERID_History,
-                 CSIDL_HISTORY,
+                 CSIDL_HISTORY|KFD_TODO_WINE,
                  "History",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_LocalAppData, GUID_NULL,
@@ -1171,7 +1173,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_LOCAL_REDIRECT_ONLY),
     KNOWN_FOLDER(FOLDERID_HomeGroup,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "HomeGroupFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1180,7 +1182,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_ImplicitAppShortcuts,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "ImplicitAppShortcuts",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_UserPinned, GUID_NULL,
@@ -1189,7 +1191,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_InternetCache,
-                 CSIDL_INTERNET_CACHE,
+                 CSIDL_INTERNET_CACHE|KFD_TODO_WINE,
                  "Cache",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_LocalAppData, GUID_NULL,
@@ -1198,7 +1200,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_LOCAL_REDIRECT_ONLY),
     KNOWN_FOLDER(FOLDERID_InternetFolder,
-                 CSIDL_INTERNET,
+                 CSIDL_INTERNET|KFD_TODO_WINE,
                  "InternetFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1207,7 +1209,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Libraries,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Libraries",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_RoamingAppData, GUID_NULL,
@@ -1216,7 +1218,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
     KNOWN_FOLDER(FOLDERID_Links,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Links",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1225,7 +1227,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
     KNOWN_FOLDER(FOLDERID_LocalAppData,
-                 CSIDL_LOCAL_APPDATA,
+                 CSIDL_LOCAL_APPDATA|KFD_TODO_WINE,
                  "Local AppData",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1234,7 +1236,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_LOCAL_REDIRECT_ONLY | KFDF_PUBLISHEXPANDEDPATH),
     KNOWN_FOLDER(FOLDERID_LocalAppDataLow,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "LocalAppDataLow",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1243,7 +1245,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,
                  KFDF_LOCAL_REDIRECT_ONLY | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
     KNOWN_FOLDER(FOLDERID_LocalizedResourcesDir,
-                 CSIDL_RESOURCES_LOCALIZED,
+                 CSIDL_RESOURCES_LOCALIZED|KFD_TODO_WINE,
                  "LocalizedResourcesDir",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1252,7 +1254,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Music,
-                 CSIDL_MYMUSIC,
+                 CSIDL_MYMUSIC|KFD_TODO_WINE,
                  "My Music",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1261,7 +1263,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_ROAMABLE | KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_MusicLibrary,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "MusicLibrary",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Libraries, GUID_NULL,
@@ -1270,7 +1272,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_PRECREATE | KFDF_STREAM),
     KNOWN_FOLDER(FOLDERID_NetHood,
-                 CSIDL_NETHOOD,
+                 CSIDL_NETHOOD|KFD_TODO_WINE,
                  "NetHood",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_RoamingAppData, GUID_NULL,
@@ -1279,7 +1281,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_NetworkFolder,
-                 CSIDL_NETWORK,
+                 CSIDL_NETWORK|KFD_TODO_WINE,
                  "NetworkPlacesFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1288,7 +1290,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_OriginalImages,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Original Images",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_LocalAppData, GUID_NULL,
@@ -1297,7 +1299,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_PhotoAlbums,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "PhotoAlbums",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Pictures, GUID_NULL,
@@ -1306,7 +1308,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  0),
     KNOWN_FOLDER(FOLDERID_Pictures,
-                 CSIDL_MYPICTURES,
+                 CSIDL_MYPICTURES|KFD_TODO_WINE,
                  "My Pictures",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1315,7 +1317,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_ROAMABLE | KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_PicturesLibrary,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "PicturesLibrary",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Libraries, GUID_NULL,
@@ -1324,7 +1326,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_PRECREATE | KFDF_STREAM),
     KNOWN_FOLDER(FOLDERID_Playlists,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Playlists",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Music, GUID_NULL,
@@ -1333,7 +1335,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  0),
     KNOWN_FOLDER(FOLDERID_PrintersFolder,
-                 CSIDL_PRINTERS,
+                 CSIDL_PRINTERS|KFD_TODO_WINE,
                  "PrintersFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1342,7 +1344,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_PrintHood,
-                 CSIDL_PRINTHOOD,
+                 CSIDL_PRINTHOOD|KFD_TODO_WINE,
                  "PrintHood",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_RoamingAppData, GUID_NULL,
@@ -1351,7 +1353,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Profile,
-                 CSIDL_PROFILE,
+                 CSIDL_PROFILE|KFD_TODO_WINE,
                  "Profile",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1388,7 +1390,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX64,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "ProgramFilesCommonX64",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1397,7 +1399,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX86,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "ProgramFilesCommonX86",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1406,7 +1408,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_ProgramFilesX64,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "ProgramFilesX64",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1415,7 +1417,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_ProgramFilesX86,
-                 CSIDL_PROGRAM_FILESX86,
+                 CSIDL_PROGRAM_FILESX86|KFD_TODO_WINE,
                  "ProgramFilesX86",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1424,7 +1426,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_Programs,
-                 CSIDL_PROGRAMS,
+                 CSIDL_PROGRAMS|KFD_TODO_WINE,
                  "Programs",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_StartMenu, GUID_NULL,
@@ -1433,7 +1435,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_Public,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Public",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1443,7 +1445,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_PublicDesktop,
-                 CSIDL_COMMON_DESKTOPDIRECTORY,
+                 CSIDL_COMMON_DESKTOPDIRECTORY|KFD_TODO_WINE,
                  "Common Desktop",
                  KF_CATEGORY_COMMON,
                  FOLDERID_Public, GUID_NULL,
@@ -1452,7 +1454,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_PublicDocuments,
-                 CSIDL_COMMON_DOCUMENTS,
+                 CSIDL_COMMON_DOCUMENTS|KFD_TODO_WINE,
                  "Common Documents",
                  KF_CATEGORY_COMMON,
                  FOLDERID_Public, GUID_NULL,
@@ -1461,7 +1463,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_PublicDownloads,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "CommonDownloads",
                  KF_CATEGORY_COMMON,
                  FOLDERID_Public, GUID_NULL,
@@ -1470,7 +1472,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_PublicGameTasks,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "PublicGameTasks",
                  KF_CATEGORY_COMMON,
                  FOLDERID_ProgramData, GUID_NULL,
@@ -1479,7 +1481,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_LOCAL_REDIRECT_ONLY),
     KNOWN_FOLDER(FOLDERID_PublicLibraries,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "PublicLibraries",
                  KF_CATEGORY_COMMON,
                  FOLDERID_Public, GUID_NULL,
@@ -1488,7 +1490,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_PublicMusic,
-                 CSIDL_COMMON_MUSIC,
+                 CSIDL_COMMON_MUSIC|KFD_TODO_WINE,
                  "CommonMusic",
                  KF_CATEGORY_COMMON,
                  FOLDERID_Public, GUID_NULL,
@@ -1497,7 +1499,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_PublicPictures,
-                 CSIDL_COMMON_PICTURES,
+                 CSIDL_COMMON_PICTURES|KFD_TODO_WINE,
                  "CommonPictures",
                  KF_CATEGORY_COMMON,
                  FOLDERID_Public, GUID_NULL,
@@ -1506,7 +1508,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_PublicRingtones,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "CommonRingtones",
                  KF_CATEGORY_COMMON,
                  FOLDERID_ProgramData, GUID_NULL,
@@ -1515,7 +1517,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_PublicVideos,
-                 CSIDL_COMMON_VIDEO,
+                 CSIDL_COMMON_VIDEO|KFD_TODO_WINE,
                  "CommonVideo",
                  KF_CATEGORY_COMMON,
                  FOLDERID_Public, GUID_NULL,
@@ -1524,7 +1526,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_QuickLaunch,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Quick Launch",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_RoamingAppData, GUID_NULL,
@@ -1533,7 +1535,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Recent,
-                 CSIDL_RECENT,
+                 CSIDL_RECENT|KFD_TODO_WINE,
                  "Recent",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_RoamingAppData, GUID_NULL,
@@ -1542,7 +1544,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_RecordedTVLibrary,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "RecordedTVLibrary",
                  KF_CATEGORY_COMMON,
                  FOLDERID_PublicLibraries, GUID_NULL,
@@ -1551,7 +1553,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_PRECREATE | KFDF_STREAM),
     KNOWN_FOLDER(FOLDERID_RecycleBinFolder,
-                 CSIDL_BITBUCKET,
+                 CSIDL_BITBUCKET|KFD_TODO_WINE,
                  "RecycleBinFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1560,7 +1562,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_ResourceDir,
-                 CSIDL_RESOURCES,
+                 CSIDL_RESOURCES|KFD_TODO_WINE,
                  "ResourceDir",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1569,7 +1571,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Ringtones,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Ringtones",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_LocalAppData, GUID_NULL,
@@ -1578,7 +1580,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_RoamingAppData,
-                 CSIDL_APPDATA,
+                 CSIDL_APPDATA|KFD_TODO_WINE,
                  "AppData",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1587,7 +1589,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_SampleMusic,
-                 NO_CSIDL|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
+                 NO_CSIDL|KFD_TODO_WINE|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
                  "SampleMusic",
                  KF_CATEGORY_COMMON,
                  FOLDERID_PublicMusic, GUID_NULL,
@@ -1596,7 +1598,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_SamplePictures,
-                 NO_CSIDL|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
+                 NO_CSIDL|KFD_TODO_WINE|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
                  "SamplePictures",
                  KF_CATEGORY_COMMON,
                  FOLDERID_PublicPictures, GUID_NULL,
@@ -1605,7 +1607,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_SamplePlaylists,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "SamplePlaylists",
                  KF_CATEGORY_COMMON,
                  FOLDERID_PublicMusic, GUID_NULL,
@@ -1614,7 +1616,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  0),
     KNOWN_FOLDER(FOLDERID_SampleVideos,
-                 NO_CSIDL|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
+                 NO_CSIDL|KFD_TODO_WINE|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
                  "SampleVideos",
                  KF_CATEGORY_COMMON,
                  FOLDERID_PublicVideos, GUID_NULL,
@@ -1623,7 +1625,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_SavedGames,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "SavedGames",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1632,7 +1634,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
     KNOWN_FOLDER(FOLDERID_SavedSearches,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Searches",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1641,7 +1643,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
     KNOWN_FOLDER(FOLDERID_SEARCH_CSC,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "CSCFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1650,7 +1652,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_SearchHome,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "SearchHomeFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1659,7 +1661,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_SEARCH_MAPI,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "MAPIFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1668,7 +1670,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_SendTo,
-                 CSIDL_SENDTO,
+                 CSIDL_SENDTO|KFD_TODO_WINE,
                  "SendTo",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_RoamingAppData, GUID_NULL,
@@ -1677,7 +1679,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_SidebarDefaultParts,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Default Gadgets",
                  KF_CATEGORY_COMMON,
                  FOLDERID_ProgramFiles, GUID_NULL,
@@ -1686,7 +1688,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_SidebarParts,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "Gadgets",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_LocalAppData, GUID_NULL,
@@ -1695,7 +1697,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_StartMenu,
-                 CSIDL_STARTMENU,
+                 CSIDL_STARTMENU|KFD_TODO_WINE,
                  "Start Menu",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_RoamingAppData, GUID_NULL,
@@ -1704,7 +1706,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_Startup,
-                 CSIDL_STARTUP,
+                 CSIDL_STARTUP|KFD_TODO_WINE,
                  "Startup",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Programs, GUID_NULL,
@@ -1713,7 +1715,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_SyncManagerFolder,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "SyncCenterFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1723,7 +1725,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_SyncResultsFolder,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "SyncResultsFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1733,7 +1735,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_SyncSetupFolder,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "SyncSetupFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1752,7 +1754,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_SystemX86,
-                 CSIDL_SYSTEMX86,
+                 CSIDL_SYSTEMX86|KFD_TODO_WINE,
                  "SystemX86",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1761,7 +1763,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Templates,
-                 CSIDL_TEMPLATES,
+                 CSIDL_TEMPLATES|KFD_TODO_WINE,
                  "Templates",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_RoamingAppData, GUID_NULL,
@@ -1770,7 +1772,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_UserPinned,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "User Pinned",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_QuickLaunch, GUID_NULL,
@@ -1779,7 +1781,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_HIDDEN,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_UserProfiles,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "UserProfiles",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1788,7 +1790,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_UserProgramFiles,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "UserProgramFiles",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_LocalAppData, GUID_NULL,
@@ -1797,7 +1799,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_UserProgramFilesCommon,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "UserProgramFilesCommon",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_UserProgramFiles, GUID_NULL,
@@ -1806,7 +1808,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_UsersFiles,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "UsersFilesFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1815,7 +1817,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_UsersLibraries,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "UsersLibrariesFolder",
                  KF_CATEGORY_VIRTUAL,
                  GUID_NULL, GUID_NULL,
@@ -1824,7 +1826,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(FOLDERID_Videos,
-                 CSIDL_MYVIDEO,
+                 CSIDL_MYVIDEO|KFD_TODO_WINE,
                  "My Video",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Profile, GUID_NULL,
@@ -1833,7 +1835,7 @@ static const struct knownFolderDef known_folders[] = {
                  FILE_ATTRIBUTE_READONLY,
                  KFDF_ROAMABLE | KFDF_PRECREATE),
     KNOWN_FOLDER(FOLDERID_VideosLibrary,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "VideosLibrary",
                  KF_CATEGORY_PERUSER,
                  FOLDERID_Libraries, GUID_NULL,
@@ -1851,7 +1853,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(_FOLDERID_CredentialManager,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "CredentialManager",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1860,7 +1862,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(_FOLDERID_CryptoKeys,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "CryptoKeys",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1869,7 +1871,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(_FOLDERID_DpapiKeys,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "DpapiKeys",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1878,7 +1880,7 @@ static const struct knownFolderDef known_folders[] = {
                  0,
                  0),
     KNOWN_FOLDER(_FOLDERID_SystemCertificates,
-                 NO_CSIDL,
+                 NO_CSIDL|KFD_TODO_WINE,
                  "SystemCertificates",
                  KF_CATEGORY_FIXED,
                  GUID_NULL, GUID_NULL,
@@ -1955,14 +1957,16 @@ static void check_known_folder(IKnownFolderManager *mgr, KNOWNFOLDERID *folderId
             if(SUCCEEDED(hr))
             {
                 hr = IKnownFolder_GetFolderDefinition(folder, &kfd);
-                todo_wine
-                ok_(__FILE__, known_folder->line)(hr == S_OK, "cannot get known folder definition for %s\n", known_folder->sFolderId);
+                if(known_folder->csidl & KFD_TODO_WINE)
+                    todo_wine
+                    ok_(__FILE__, known_folder->line)(hr == S_OK, "cannot get known folder definition for %s\n", known_folder->sFolderId);
+                else
+                    ok_(__FILE__, known_folder->line)(hr == S_OK, "cannot get known folder definition for %s\n", known_folder->sFolderId);
                 if(SUCCEEDED(hr))
                 {
                     ret = MultiByteToWideChar(CP_ACP, 0, known_folder->sName, -1,  sName, sizeof(sName)/sizeof(sName[0]));
                     ok_(__FILE__, known_folder->line)(ret != 0, "cannot convert known folder name \"%s\" to wide characters\n", known_folder->sName);
 
-                    todo_wine
                     ok_(__FILE__, known_folder->line)(lstrcmpW(kfd.pszName, sName)==0, "invalid known folder name returned for %s: %s expected, but %s retrieved\n", known_folder->sFolderId, wine_dbgstr_w(sName), wine_dbgstr_w(kfd.pszName));
 
                     ok_(__FILE__, known_folder->line)(kfd.category == known_folder->category, "invalid known folder category for %s: %d expected, but %d retrieved\n", known_folder->sFolderId, known_folder->category, kfd.category);
@@ -2091,9 +2095,7 @@ static void test_knownFolders(void)
         if(SUCCEEDED(hr))
         {
             hr = IKnownFolder_GetCategory(folder, &cat);
-            todo_wine
             ok(hr == S_OK, "failed to get folder category: 0x%08x\n", hr);
-            todo_wine
             ok(cat==KF_CATEGORY_FIXED, "invalid folder category: %d\n", cat);
 
             hr = IKnownFolder_GetId(folder, &folderId);
@@ -2116,15 +2118,11 @@ static void test_knownFolders(void)
             ok(hr == E_INVALIDARG, "unexpected value from SetPath: 0x%08x\n", hr);
 
             hr = IKnownFolder_GetFolderDefinition(folder, &kfDefinition);
-            todo_wine
             ok(hr == S_OK, "failed to get folder definition: 0x%08x\n", hr);
             if(SUCCEEDED(hr))
             {
-                todo_wine
                 ok(kfDefinition.category==KF_CATEGORY_FIXED, "invalid folder category: 0x%08x\n", kfDefinition.category);
-                todo_wine
                 ok(lstrcmpW(kfDefinition.pszName, sWindows)==0, "invalid folder name: %s\n", wine_dbgstr_w(kfDefinition.pszName));
-                todo_wine
                 ok(kfDefinition.dwAttributes==0, "invalid folder attributes: %d\n", kfDefinition.dwAttributes);
                 FreeKnownFolderDefinitionFields(&kfDefinition);
             }
-- 
2.3.3




More information about the wine-patches mailing list