shell32: Install knownfolders to registry during DLL registration.

This commit is contained in:
Andrew Eikum 2015-03-17 10:03:23 -05:00 committed by Alexandre Julliard
parent efbea96142
commit 12d057c8e7
2 changed files with 322 additions and 146 deletions

View File

@ -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_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_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_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 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_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'}; 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 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 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 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_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_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 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 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 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'}; 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_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_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 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 TemplatesW[] = {'T','e','m','p','l','a','t','e','s','\0'};
static const WCHAR UsersW[] = {'U','s','e','r','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 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 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 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 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 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'}; 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; CSIDL_Type type;
LPCWSTR szValueName; LPCWSTR szValueName;
LPCWSTR szDefaultPath; /* fallback string or resource ID */ 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; } CSIDL_DATA;
static const CSIDL_DATA CSIDL_Data[] = static const CSIDL_DATA CSIDL_Data[] =
@ -894,7 +914,21 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_Desktop, &FOLDERID_Desktop,
CSIDL_Type_User, CSIDL_Type_User,
DesktopW, 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 */ { /* 0x01 - CSIDL_INTERNET */
&FOLDERID_InternetFolder, &FOLDERID_InternetFolder,
@ -1014,7 +1048,21 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_Fonts, &FOLDERID_Fonts,
CSIDL_Type_WindowsPath, CSIDL_Type_WindowsPath,
FontsW, 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 */ { /* 0x15 - CSIDL_TEMPLATES */
&FOLDERID_Templates, &FOLDERID_Templates,
@ -1026,13 +1074,41 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_CommonStartMenu, &FOLDERID_CommonStartMenu,
CSIDL_Type_AllUsers, CSIDL_Type_AllUsers,
Common_Start_MenuW, 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 */ { /* 0x17 - CSIDL_COMMON_PROGRAMS */
&FOLDERID_CommonPrograms, &FOLDERID_CommonPrograms,
CSIDL_Type_AllUsers, CSIDL_Type_AllUsers,
Common_ProgramsW, 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 */ { /* 0x18 - CSIDL_COMMON_STARTUP */
&FOLDERID_CommonStartup, &FOLDERID_CommonStartup,
@ -1104,25 +1180,81 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_ProgramData, &FOLDERID_ProgramData,
CSIDL_Type_AllUsers, CSIDL_Type_AllUsers,
Common_AppDataW, 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 */ { /* 0x24 - CSIDL_WINDOWS */
&FOLDERID_Windows, &FOLDERID_Windows,
CSIDL_Type_WindowsPath, CSIDL_Type_WindowsPath,
NULL, 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 */ { /* 0x25 - CSIDL_SYSTEM */
&FOLDERID_System, &FOLDERID_System,
CSIDL_Type_SystemPath, CSIDL_Type_SystemPath,
NULL, 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 */ { /* 0x26 - CSIDL_PROGRAM_FILES */
&FOLDERID_ProgramFiles, &FOLDERID_ProgramFiles,
CSIDL_Type_CurrVer, CSIDL_Type_CurrVer,
ProgramFilesDirW, 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 */ { /* 0x27 - CSIDL_MYPICTURES */
&FOLDERID_Pictures, &FOLDERID_Pictures,
@ -1152,7 +1284,21 @@ static const CSIDL_DATA CSIDL_Data[] =
&FOLDERID_ProgramFilesCommon, &FOLDERID_ProgramFilesCommon,
CSIDL_Type_CurrVer, CSIDL_Type_CurrVer,
CommonFilesDirW, 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 */ { /* 0x2c - CSIDL_PROGRAM_FILES_COMMONX86 */
&FOLDERID_ProgramFilesCommonX86, &FOLDERID_ProgramFilesCommonX86,
@ -2879,32 +3025,6 @@ static HRESULT set_folder_attributes(void)
return S_OK; 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.@] * SHGetSpecialFolderPathA [SHELL32.@]
*/ */
@ -3912,16 +4032,12 @@ static HRESULT WINAPI foldermanager_GetFolderByName(
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI foldermanager_RegisterFolder( static HRESULT register_folder(const KNOWNFOLDERID *rfid, const KNOWNFOLDER_DEFINITION *pKFD)
IKnownFolderManager *iface,
REFKNOWNFOLDERID rfid,
KNOWNFOLDER_DEFINITION const *pKFD)
{ {
HRESULT hr; HRESULT hr;
HKEY hKey = NULL; HKEY hKey = NULL;
DWORD dwDisp; DWORD dwDisp;
LPWSTR registryPath = NULL; LPWSTR registryPath = NULL;
TRACE("(%p, %s, %p)\n", iface, debugstr_guid(rfid), pKFD);
hr = get_known_folder_registry_path(rfid, NULL, &registryPath); hr = get_known_folder_registry_path(rfid, NULL, &registryPath);
TRACE("registry path: %s\n", debugstr_w(registryPath)); TRACE("registry path: %s\n", debugstr_w(registryPath));
@ -3965,6 +4081,15 @@ static HRESULT WINAPI foldermanager_RegisterFolder(
return hr; 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( static HRESULT WINAPI foldermanager_UnregisterFolder(
IKnownFolderManager *iface, IKnownFolderManager *iface,
REFKNOWNFOLDERID rfid) 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); FIXME("%s, 0x%08x, %p, %p\n", debugstr_guid(rfid), flags, token, pidl);
return E_NOTIMPL; 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;
}

View File

@ -888,6 +888,7 @@ if (0) { /* crashes */
/* Standard CSIDL values (and their flags) uses only two less-significant bytes */ /* Standard CSIDL values (and their flags) uses only two less-significant bytes */
#define NO_CSIDL 0x10000 #define NO_CSIDL 0x10000
#define WINE_ATTRIBUTES_OPTIONAL 0x20000 #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) \ #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__ } { &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[] = { static const struct knownFolderDef known_folders[] = {
KNOWN_FOLDER(FOLDERID_AddNewPrograms, KNOWN_FOLDER(FOLDERID_AddNewPrograms,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"AddNewProgramsFolder", "AddNewProgramsFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -933,7 +934,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_AdminTools, KNOWN_FOLDER(FOLDERID_AdminTools,
CSIDL_ADMINTOOLS, CSIDL_ADMINTOOLS|KFD_TODO_WINE,
"Administrative Tools", "Administrative Tools",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Programs, GUID_NULL, FOLDERID_Programs, GUID_NULL,
@ -942,7 +943,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_AppUpdates, KNOWN_FOLDER(FOLDERID_AppUpdates,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"AppUpdatesFolder", "AppUpdatesFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -952,7 +953,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_CDBurning, KNOWN_FOLDER(FOLDERID_CDBurning,
CSIDL_CDBURN_AREA, CSIDL_CDBURN_AREA|KFD_TODO_WINE,
"CD Burning", "CD Burning",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL, FOLDERID_LocalAppData, GUID_NULL,
@ -961,7 +962,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_LOCAL_REDIRECT_ONLY), KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_ChangeRemovePrograms, KNOWN_FOLDER(FOLDERID_ChangeRemovePrograms,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"ChangeRemoveProgramsFolder", "ChangeRemoveProgramsFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -971,7 +972,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_CommonAdminTools, KNOWN_FOLDER(FOLDERID_CommonAdminTools,
CSIDL_COMMON_ADMINTOOLS, CSIDL_COMMON_ADMINTOOLS|KFD_TODO_WINE,
"Common Administrative Tools", "Common Administrative Tools",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_CommonPrograms, GUID_NULL, FOLDERID_CommonPrograms, GUID_NULL,
@ -980,7 +981,8 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_CommonOEMLinks, KNOWN_FOLDER(FOLDERID_CommonOEMLinks,
CSIDL_COMMON_OEM_LINKS,"OEM Links", CSIDL_COMMON_OEM_LINKS|KFD_TODO_WINE,
"OEM Links",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL, FOLDERID_ProgramData, GUID_NULL,
"OEM Links", "OEM Links",
@ -1006,7 +1008,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_CommonStartup, KNOWN_FOLDER(FOLDERID_CommonStartup,
CSIDL_COMMON_STARTUP, CSIDL_COMMON_STARTUP|KFD_TODO_WINE,
"Common Startup", "Common Startup",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_CommonPrograms, GUID_NULL, FOLDERID_CommonPrograms, GUID_NULL,
@ -1015,7 +1017,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_CommonTemplates, KNOWN_FOLDER(FOLDERID_CommonTemplates,
CSIDL_COMMON_TEMPLATES, CSIDL_COMMON_TEMPLATES|KFD_TODO_WINE,
"Common Templates", "Common Templates",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL, FOLDERID_ProgramData, GUID_NULL,
@ -1024,7 +1026,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_ComputerFolder, KNOWN_FOLDER(FOLDERID_ComputerFolder,
CSIDL_DRIVES, CSIDL_DRIVES|KFD_TODO_WINE,
"MyComputerFolder", "MyComputerFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1033,7 +1035,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_ConflictFolder, KNOWN_FOLDER(FOLDERID_ConflictFolder,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"ConflictFolder", "ConflictFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1043,7 +1045,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_ConnectionsFolder, KNOWN_FOLDER(FOLDERID_ConnectionsFolder,
CSIDL_CONNECTIONS, CSIDL_CONNECTIONS|KFD_TODO_WINE,
"ConnectionsFolder", "ConnectionsFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1053,7 +1055,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Contacts, KNOWN_FOLDER(FOLDERID_Contacts,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Contacts", "Contacts",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1062,7 +1064,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH), KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_ControlPanelFolder, KNOWN_FOLDER(FOLDERID_ControlPanelFolder,
CSIDL_CONTROLS, CSIDL_CONTROLS|KFD_TODO_WINE,
"ControlPanelFolder", "ControlPanelFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1072,7 +1074,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Cookies, KNOWN_FOLDER(FOLDERID_Cookies,
CSIDL_COOKIES, CSIDL_COOKIES|KFD_TODO_WINE,
"Cookies", "Cookies",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, FOLDERID_LocalAppData, FOLDERID_RoamingAppData, FOLDERID_LocalAppData,
@ -1090,7 +1092,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH), KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_DeviceMetadataStore, KNOWN_FOLDER(FOLDERID_DeviceMetadataStore,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Device Metadata Store", "Device Metadata Store",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL, FOLDERID_ProgramData, GUID_NULL,
@ -1099,7 +1101,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Documents, KNOWN_FOLDER(FOLDERID_Documents,
CSIDL_MYDOCUMENTS, CSIDL_MYDOCUMENTS|KFD_TODO_WINE,
"Personal", "Personal",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1108,7 +1110,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE), KFDF_ROAMABLE | KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_DocumentsLibrary, KNOWN_FOLDER(FOLDERID_DocumentsLibrary,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"DocumentsLibrary", "DocumentsLibrary",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Libraries, GUID_NULL, FOLDERID_Libraries, GUID_NULL,
@ -1117,7 +1119,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_PRECREATE | KFDF_STREAM), KFDF_PRECREATE | KFDF_STREAM),
KNOWN_FOLDER(FOLDERID_Downloads, KNOWN_FOLDER(FOLDERID_Downloads,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Downloads", "Downloads",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1126,7 +1128,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH), KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_Favorites, KNOWN_FOLDER(FOLDERID_Favorites,
CSIDL_FAVORITES, CSIDL_FAVORITES|KFD_TODO_WINE,
"Favorites", "Favorites",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1144,7 +1146,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Games, KNOWN_FOLDER(FOLDERID_Games,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Games", "Games",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1153,7 +1155,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_GameTasks, KNOWN_FOLDER(FOLDERID_GameTasks,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"GameTasks", "GameTasks",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL, FOLDERID_LocalAppData, GUID_NULL,
@ -1162,7 +1164,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_LOCAL_REDIRECT_ONLY), KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_History, KNOWN_FOLDER(FOLDERID_History,
CSIDL_HISTORY, CSIDL_HISTORY|KFD_TODO_WINE,
"History", "History",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL, FOLDERID_LocalAppData, GUID_NULL,
@ -1171,7 +1173,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_LOCAL_REDIRECT_ONLY), KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_HomeGroup, KNOWN_FOLDER(FOLDERID_HomeGroup,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"HomeGroupFolder", "HomeGroupFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1180,7 +1182,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_ImplicitAppShortcuts, KNOWN_FOLDER(FOLDERID_ImplicitAppShortcuts,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"ImplicitAppShortcuts", "ImplicitAppShortcuts",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_UserPinned, GUID_NULL, FOLDERID_UserPinned, GUID_NULL,
@ -1189,7 +1191,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_InternetCache, KNOWN_FOLDER(FOLDERID_InternetCache,
CSIDL_INTERNET_CACHE, CSIDL_INTERNET_CACHE|KFD_TODO_WINE,
"Cache", "Cache",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL, FOLDERID_LocalAppData, GUID_NULL,
@ -1198,7 +1200,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_LOCAL_REDIRECT_ONLY), KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_InternetFolder, KNOWN_FOLDER(FOLDERID_InternetFolder,
CSIDL_INTERNET, CSIDL_INTERNET|KFD_TODO_WINE,
"InternetFolder", "InternetFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1207,7 +1209,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Libraries, KNOWN_FOLDER(FOLDERID_Libraries,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Libraries", "Libraries",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL, FOLDERID_RoamingAppData, GUID_NULL,
@ -1216,7 +1218,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH), KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_Links, KNOWN_FOLDER(FOLDERID_Links,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Links", "Links",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1225,7 +1227,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH), KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_LocalAppData, KNOWN_FOLDER(FOLDERID_LocalAppData,
CSIDL_LOCAL_APPDATA, CSIDL_LOCAL_APPDATA|KFD_TODO_WINE,
"Local AppData", "Local AppData",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1234,7 +1236,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_LOCAL_REDIRECT_ONLY | KFDF_PUBLISHEXPANDEDPATH), KFDF_LOCAL_REDIRECT_ONLY | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_LocalAppDataLow, KNOWN_FOLDER(FOLDERID_LocalAppDataLow,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"LocalAppDataLow", "LocalAppDataLow",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1243,7 +1245,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,
KFDF_LOCAL_REDIRECT_ONLY | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH), KFDF_LOCAL_REDIRECT_ONLY | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_LocalizedResourcesDir, KNOWN_FOLDER(FOLDERID_LocalizedResourcesDir,
CSIDL_RESOURCES_LOCALIZED, CSIDL_RESOURCES_LOCALIZED|KFD_TODO_WINE,
"LocalizedResourcesDir", "LocalizedResourcesDir",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1252,7 +1254,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Music, KNOWN_FOLDER(FOLDERID_Music,
CSIDL_MYMUSIC, CSIDL_MYMUSIC|KFD_TODO_WINE,
"My Music", "My Music",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1261,7 +1263,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE), KFDF_ROAMABLE | KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_MusicLibrary, KNOWN_FOLDER(FOLDERID_MusicLibrary,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"MusicLibrary", "MusicLibrary",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Libraries, GUID_NULL, FOLDERID_Libraries, GUID_NULL,
@ -1270,7 +1272,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_PRECREATE | KFDF_STREAM), KFDF_PRECREATE | KFDF_STREAM),
KNOWN_FOLDER(FOLDERID_NetHood, KNOWN_FOLDER(FOLDERID_NetHood,
CSIDL_NETHOOD, CSIDL_NETHOOD|KFD_TODO_WINE,
"NetHood", "NetHood",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL, FOLDERID_RoamingAppData, GUID_NULL,
@ -1279,7 +1281,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_NetworkFolder, KNOWN_FOLDER(FOLDERID_NetworkFolder,
CSIDL_NETWORK, CSIDL_NETWORK|KFD_TODO_WINE,
"NetworkPlacesFolder", "NetworkPlacesFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1288,7 +1290,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_OriginalImages, KNOWN_FOLDER(FOLDERID_OriginalImages,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Original Images", "Original Images",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL, FOLDERID_LocalAppData, GUID_NULL,
@ -1297,7 +1299,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_PhotoAlbums, KNOWN_FOLDER(FOLDERID_PhotoAlbums,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"PhotoAlbums", "PhotoAlbums",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Pictures, GUID_NULL, FOLDERID_Pictures, GUID_NULL,
@ -1306,7 +1308,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
0), 0),
KNOWN_FOLDER(FOLDERID_Pictures, KNOWN_FOLDER(FOLDERID_Pictures,
CSIDL_MYPICTURES, CSIDL_MYPICTURES|KFD_TODO_WINE,
"My Pictures", "My Pictures",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1315,7 +1317,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE), KFDF_ROAMABLE | KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PicturesLibrary, KNOWN_FOLDER(FOLDERID_PicturesLibrary,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"PicturesLibrary", "PicturesLibrary",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Libraries, GUID_NULL, FOLDERID_Libraries, GUID_NULL,
@ -1324,7 +1326,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_PRECREATE | KFDF_STREAM), KFDF_PRECREATE | KFDF_STREAM),
KNOWN_FOLDER(FOLDERID_Playlists, KNOWN_FOLDER(FOLDERID_Playlists,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Playlists", "Playlists",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Music, GUID_NULL, FOLDERID_Music, GUID_NULL,
@ -1333,7 +1335,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
0), 0),
KNOWN_FOLDER(FOLDERID_PrintersFolder, KNOWN_FOLDER(FOLDERID_PrintersFolder,
CSIDL_PRINTERS, CSIDL_PRINTERS|KFD_TODO_WINE,
"PrintersFolder", "PrintersFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1342,7 +1344,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_PrintHood, KNOWN_FOLDER(FOLDERID_PrintHood,
CSIDL_PRINTHOOD, CSIDL_PRINTHOOD|KFD_TODO_WINE,
"PrintHood", "PrintHood",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL, FOLDERID_RoamingAppData, GUID_NULL,
@ -1351,7 +1353,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Profile, KNOWN_FOLDER(FOLDERID_Profile,
CSIDL_PROFILE, CSIDL_PROFILE|KFD_TODO_WINE,
"Profile", "Profile",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1388,7 +1390,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX64, KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX64,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"ProgramFilesCommonX64", "ProgramFilesCommonX64",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1397,7 +1399,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX86, KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX86,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"ProgramFilesCommonX86", "ProgramFilesCommonX86",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1406,7 +1408,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_ProgramFilesX64, KNOWN_FOLDER(FOLDERID_ProgramFilesX64,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"ProgramFilesX64", "ProgramFilesX64",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1415,7 +1417,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_ProgramFilesX86, KNOWN_FOLDER(FOLDERID_ProgramFilesX86,
CSIDL_PROGRAM_FILESX86, CSIDL_PROGRAM_FILESX86|KFD_TODO_WINE,
"ProgramFilesX86", "ProgramFilesX86",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1424,7 +1426,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_Programs, KNOWN_FOLDER(FOLDERID_Programs,
CSIDL_PROGRAMS, CSIDL_PROGRAMS|KFD_TODO_WINE,
"Programs", "Programs",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_StartMenu, GUID_NULL, FOLDERID_StartMenu, GUID_NULL,
@ -1433,7 +1435,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_Public, KNOWN_FOLDER(FOLDERID_Public,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Public", "Public",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1443,7 +1445,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicDesktop, KNOWN_FOLDER(FOLDERID_PublicDesktop,
CSIDL_COMMON_DESKTOPDIRECTORY, CSIDL_COMMON_DESKTOPDIRECTORY|KFD_TODO_WINE,
"Common Desktop", "Common Desktop",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL, FOLDERID_Public, GUID_NULL,
@ -1452,7 +1454,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicDocuments, KNOWN_FOLDER(FOLDERID_PublicDocuments,
CSIDL_COMMON_DOCUMENTS, CSIDL_COMMON_DOCUMENTS|KFD_TODO_WINE,
"Common Documents", "Common Documents",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL, FOLDERID_Public, GUID_NULL,
@ -1461,7 +1463,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicDownloads, KNOWN_FOLDER(FOLDERID_PublicDownloads,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"CommonDownloads", "CommonDownloads",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL, FOLDERID_Public, GUID_NULL,
@ -1470,7 +1472,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicGameTasks, KNOWN_FOLDER(FOLDERID_PublicGameTasks,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"PublicGameTasks", "PublicGameTasks",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL, FOLDERID_ProgramData, GUID_NULL,
@ -1479,7 +1481,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_LOCAL_REDIRECT_ONLY), KFDF_LOCAL_REDIRECT_ONLY),
KNOWN_FOLDER(FOLDERID_PublicLibraries, KNOWN_FOLDER(FOLDERID_PublicLibraries,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"PublicLibraries", "PublicLibraries",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL, FOLDERID_Public, GUID_NULL,
@ -1488,7 +1490,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicMusic, KNOWN_FOLDER(FOLDERID_PublicMusic,
CSIDL_COMMON_MUSIC, CSIDL_COMMON_MUSIC|KFD_TODO_WINE,
"CommonMusic", "CommonMusic",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL, FOLDERID_Public, GUID_NULL,
@ -1497,7 +1499,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicPictures, KNOWN_FOLDER(FOLDERID_PublicPictures,
CSIDL_COMMON_PICTURES, CSIDL_COMMON_PICTURES|KFD_TODO_WINE,
"CommonPictures", "CommonPictures",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL, FOLDERID_Public, GUID_NULL,
@ -1506,7 +1508,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicRingtones, KNOWN_FOLDER(FOLDERID_PublicRingtones,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"CommonRingtones", "CommonRingtones",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_ProgramData, GUID_NULL, FOLDERID_ProgramData, GUID_NULL,
@ -1515,7 +1517,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_PublicVideos, KNOWN_FOLDER(FOLDERID_PublicVideos,
CSIDL_COMMON_VIDEO, CSIDL_COMMON_VIDEO|KFD_TODO_WINE,
"CommonVideo", "CommonVideo",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_Public, GUID_NULL, FOLDERID_Public, GUID_NULL,
@ -1524,7 +1526,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_QuickLaunch, KNOWN_FOLDER(FOLDERID_QuickLaunch,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Quick Launch", "Quick Launch",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL, FOLDERID_RoamingAppData, GUID_NULL,
@ -1533,7 +1535,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Recent, KNOWN_FOLDER(FOLDERID_Recent,
CSIDL_RECENT, CSIDL_RECENT|KFD_TODO_WINE,
"Recent", "Recent",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL, FOLDERID_RoamingAppData, GUID_NULL,
@ -1542,7 +1544,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_RecordedTVLibrary, KNOWN_FOLDER(FOLDERID_RecordedTVLibrary,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"RecordedTVLibrary", "RecordedTVLibrary",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_PublicLibraries, GUID_NULL, FOLDERID_PublicLibraries, GUID_NULL,
@ -1551,7 +1553,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_PRECREATE | KFDF_STREAM), KFDF_PRECREATE | KFDF_STREAM),
KNOWN_FOLDER(FOLDERID_RecycleBinFolder, KNOWN_FOLDER(FOLDERID_RecycleBinFolder,
CSIDL_BITBUCKET, CSIDL_BITBUCKET|KFD_TODO_WINE,
"RecycleBinFolder", "RecycleBinFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1560,7 +1562,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_ResourceDir, KNOWN_FOLDER(FOLDERID_ResourceDir,
CSIDL_RESOURCES, CSIDL_RESOURCES|KFD_TODO_WINE,
"ResourceDir", "ResourceDir",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1569,7 +1571,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Ringtones, KNOWN_FOLDER(FOLDERID_Ringtones,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Ringtones", "Ringtones",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL, FOLDERID_LocalAppData, GUID_NULL,
@ -1578,7 +1580,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_RoamingAppData, KNOWN_FOLDER(FOLDERID_RoamingAppData,
CSIDL_APPDATA, CSIDL_APPDATA|KFD_TODO_WINE,
"AppData", "AppData",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1587,7 +1589,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_SampleMusic, KNOWN_FOLDER(FOLDERID_SampleMusic,
NO_CSIDL|WINE_ATTRIBUTES_OPTIONAL /* win8 */, NO_CSIDL|KFD_TODO_WINE|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
"SampleMusic", "SampleMusic",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_PublicMusic, GUID_NULL, FOLDERID_PublicMusic, GUID_NULL,
@ -1596,7 +1598,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_SamplePictures, KNOWN_FOLDER(FOLDERID_SamplePictures,
NO_CSIDL|WINE_ATTRIBUTES_OPTIONAL /* win8 */, NO_CSIDL|KFD_TODO_WINE|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
"SamplePictures", "SamplePictures",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_PublicPictures, GUID_NULL, FOLDERID_PublicPictures, GUID_NULL,
@ -1605,7 +1607,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_SamplePlaylists, KNOWN_FOLDER(FOLDERID_SamplePlaylists,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"SamplePlaylists", "SamplePlaylists",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_PublicMusic, GUID_NULL, FOLDERID_PublicMusic, GUID_NULL,
@ -1614,7 +1616,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
0), 0),
KNOWN_FOLDER(FOLDERID_SampleVideos, KNOWN_FOLDER(FOLDERID_SampleVideos,
NO_CSIDL|WINE_ATTRIBUTES_OPTIONAL /* win8 */, NO_CSIDL|KFD_TODO_WINE|WINE_ATTRIBUTES_OPTIONAL /* win8 */,
"SampleVideos", "SampleVideos",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_PublicVideos, GUID_NULL, FOLDERID_PublicVideos, GUID_NULL,
@ -1623,7 +1625,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_SavedGames, KNOWN_FOLDER(FOLDERID_SavedGames,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"SavedGames", "SavedGames",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1632,7 +1634,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH), KFDF_ROAMABLE | KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_SavedSearches, KNOWN_FOLDER(FOLDERID_SavedSearches,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Searches", "Searches",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1641,7 +1643,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH), KFDF_PRECREATE | KFDF_PUBLISHEXPANDEDPATH),
KNOWN_FOLDER(FOLDERID_SEARCH_CSC, KNOWN_FOLDER(FOLDERID_SEARCH_CSC,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"CSCFolder", "CSCFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1650,7 +1652,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_SearchHome, KNOWN_FOLDER(FOLDERID_SearchHome,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"SearchHomeFolder", "SearchHomeFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1659,7 +1661,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_SEARCH_MAPI, KNOWN_FOLDER(FOLDERID_SEARCH_MAPI,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"MAPIFolder", "MAPIFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1668,7 +1670,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_SendTo, KNOWN_FOLDER(FOLDERID_SendTo,
CSIDL_SENDTO, CSIDL_SENDTO|KFD_TODO_WINE,
"SendTo", "SendTo",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL, FOLDERID_RoamingAppData, GUID_NULL,
@ -1677,7 +1679,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_SidebarDefaultParts, KNOWN_FOLDER(FOLDERID_SidebarDefaultParts,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Default Gadgets", "Default Gadgets",
KF_CATEGORY_COMMON, KF_CATEGORY_COMMON,
FOLDERID_ProgramFiles, GUID_NULL, FOLDERID_ProgramFiles, GUID_NULL,
@ -1686,7 +1688,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_SidebarParts, KNOWN_FOLDER(FOLDERID_SidebarParts,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"Gadgets", "Gadgets",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL, FOLDERID_LocalAppData, GUID_NULL,
@ -1695,7 +1697,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_StartMenu, KNOWN_FOLDER(FOLDERID_StartMenu,
CSIDL_STARTMENU, CSIDL_STARTMENU|KFD_TODO_WINE,
"Start Menu", "Start Menu",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL, FOLDERID_RoamingAppData, GUID_NULL,
@ -1704,7 +1706,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_Startup, KNOWN_FOLDER(FOLDERID_Startup,
CSIDL_STARTUP, CSIDL_STARTUP|KFD_TODO_WINE,
"Startup", "Startup",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Programs, GUID_NULL, FOLDERID_Programs, GUID_NULL,
@ -1713,7 +1715,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_SyncManagerFolder, KNOWN_FOLDER(FOLDERID_SyncManagerFolder,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"SyncCenterFolder", "SyncCenterFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1723,7 +1725,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_SyncResultsFolder, KNOWN_FOLDER(FOLDERID_SyncResultsFolder,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"SyncResultsFolder", "SyncResultsFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1733,7 +1735,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_SyncSetupFolder, KNOWN_FOLDER(FOLDERID_SyncSetupFolder,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"SyncSetupFolder", "SyncSetupFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1752,7 +1754,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_SystemX86, KNOWN_FOLDER(FOLDERID_SystemX86,
CSIDL_SYSTEMX86, CSIDL_SYSTEMX86|KFD_TODO_WINE,
"SystemX86", "SystemX86",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1761,7 +1763,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Templates, KNOWN_FOLDER(FOLDERID_Templates,
CSIDL_TEMPLATES, CSIDL_TEMPLATES|KFD_TODO_WINE,
"Templates", "Templates",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_RoamingAppData, GUID_NULL, FOLDERID_RoamingAppData, GUID_NULL,
@ -1770,7 +1772,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_UserPinned, KNOWN_FOLDER(FOLDERID_UserPinned,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"User Pinned", "User Pinned",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_QuickLaunch, GUID_NULL, FOLDERID_QuickLaunch, GUID_NULL,
@ -1779,7 +1781,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_HIDDEN, FILE_ATTRIBUTE_HIDDEN,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_UserProfiles, KNOWN_FOLDER(FOLDERID_UserProfiles,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"UserProfiles", "UserProfiles",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1788,7 +1790,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_PRECREATE), KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_UserProgramFiles, KNOWN_FOLDER(FOLDERID_UserProgramFiles,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"UserProgramFiles", "UserProgramFiles",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_LocalAppData, GUID_NULL, FOLDERID_LocalAppData, GUID_NULL,
@ -1797,7 +1799,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_UserProgramFilesCommon, KNOWN_FOLDER(FOLDERID_UserProgramFilesCommon,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"UserProgramFilesCommon", "UserProgramFilesCommon",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_UserProgramFiles, GUID_NULL, FOLDERID_UserProgramFiles, GUID_NULL,
@ -1806,7 +1808,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_UsersFiles, KNOWN_FOLDER(FOLDERID_UsersFiles,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"UsersFilesFolder", "UsersFilesFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1815,7 +1817,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_UsersLibraries, KNOWN_FOLDER(FOLDERID_UsersLibraries,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"UsersLibrariesFolder", "UsersLibrariesFolder",
KF_CATEGORY_VIRTUAL, KF_CATEGORY_VIRTUAL,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1824,7 +1826,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(FOLDERID_Videos, KNOWN_FOLDER(FOLDERID_Videos,
CSIDL_MYVIDEO, CSIDL_MYVIDEO|KFD_TODO_WINE,
"My Video", "My Video",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Profile, GUID_NULL, FOLDERID_Profile, GUID_NULL,
@ -1833,7 +1835,7 @@ static const struct knownFolderDef known_folders[] = {
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_READONLY,
KFDF_ROAMABLE | KFDF_PRECREATE), KFDF_ROAMABLE | KFDF_PRECREATE),
KNOWN_FOLDER(FOLDERID_VideosLibrary, KNOWN_FOLDER(FOLDERID_VideosLibrary,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"VideosLibrary", "VideosLibrary",
KF_CATEGORY_PERUSER, KF_CATEGORY_PERUSER,
FOLDERID_Libraries, GUID_NULL, FOLDERID_Libraries, GUID_NULL,
@ -1851,7 +1853,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(_FOLDERID_CredentialManager, KNOWN_FOLDER(_FOLDERID_CredentialManager,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"CredentialManager", "CredentialManager",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1860,7 +1862,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(_FOLDERID_CryptoKeys, KNOWN_FOLDER(_FOLDERID_CryptoKeys,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"CryptoKeys", "CryptoKeys",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1869,7 +1871,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(_FOLDERID_DpapiKeys, KNOWN_FOLDER(_FOLDERID_DpapiKeys,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"DpapiKeys", "DpapiKeys",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1878,7 +1880,7 @@ static const struct knownFolderDef known_folders[] = {
0, 0,
0), 0),
KNOWN_FOLDER(_FOLDERID_SystemCertificates, KNOWN_FOLDER(_FOLDERID_SystemCertificates,
NO_CSIDL, NO_CSIDL|KFD_TODO_WINE,
"SystemCertificates", "SystemCertificates",
KF_CATEGORY_FIXED, KF_CATEGORY_FIXED,
GUID_NULL, GUID_NULL, GUID_NULL, GUID_NULL,
@ -1955,14 +1957,16 @@ static void check_known_folder(IKnownFolderManager *mgr, KNOWNFOLDERID *folderId
if(SUCCEEDED(hr)) if(SUCCEEDED(hr))
{ {
hr = IKnownFolder_GetFolderDefinition(folder, &kfd); hr = IKnownFolder_GetFolderDefinition(folder, &kfd);
todo_wine if(known_folder->csidl & KFD_TODO_WINE)
ok_(__FILE__, known_folder->line)(hr == S_OK, "cannot get known folder definition for %s\n", known_folder->sFolderId); 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)) if(SUCCEEDED(hr))
{ {
ret = MultiByteToWideChar(CP_ACP, 0, known_folder->sName, -1, sName, sizeof(sName)/sizeof(sName[0])); 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); 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)(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); 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)) if(SUCCEEDED(hr))
{ {
hr = IKnownFolder_GetCategory(folder, &cat); hr = IKnownFolder_GetCategory(folder, &cat);
todo_wine
ok(hr == S_OK, "failed to get folder category: 0x%08x\n", hr); 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); ok(cat==KF_CATEGORY_FIXED, "invalid folder category: %d\n", cat);
hr = IKnownFolder_GetId(folder, &folderId); 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); ok(hr == E_INVALIDARG, "unexpected value from SetPath: 0x%08x\n", hr);
hr = IKnownFolder_GetFolderDefinition(folder, &kfDefinition); hr = IKnownFolder_GetFolderDefinition(folder, &kfDefinition);
todo_wine
ok(hr == S_OK, "failed to get folder definition: 0x%08x\n", hr); ok(hr == S_OK, "failed to get folder definition: 0x%08x\n", hr);
if(SUCCEEDED(hr)) if(SUCCEEDED(hr))
{ {
todo_wine
ok(kfDefinition.category==KF_CATEGORY_FIXED, "invalid folder category: 0x%08x\n", kfDefinition.category); 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)); 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); ok(kfDefinition.dwAttributes==0, "invalid folder attributes: %d\n", kfDefinition.dwAttributes);
FreeKnownFolderDefinitionFields(&kfDefinition); FreeKnownFolderDefinitionFields(&kfDefinition);
} }